UnityのスクリプトからUIのテキストを操作する

今回は、ブログのコメントからリクエストを頂いた内容の記事になります。

Unityのスクリプトから、UIテキストの内容を変更したい時にどうすればいいか?という内容になります。
実はこの内容、わたくしもUIを扱い始めの頃に、JavaScriptでC#で書かれたスクリプトと同じような事をしようとして出来なかったものでした。

C#とJavaScriptで微妙に記述の仕方が変わるんです。
記述の仕方については、実際にスクリプトを見てもらった方が早いと思います。

まずはヒエラルキー上にUIを作成します。

UIテスト1

上のように階層を作成します。

UIテスト2

Canvasに、MessageTestC(C#で作成)とMessageTestJ(JavaScriptで作成)を作成し、取りつけておきます。
テストする時にどちらかをアクティブ、どちらかを非アクティブにしてテストします。

スポンサーリンク

C#でUIを使用する時のスクリプト

MessageTestCは以下のように記述します。

C#の場合は、MonoDevelopのインテリジェンス機能?が有効であればUIであるTextを使うと宣言が勝手に付く(付かない場合もある)と思いますが、

using UnityEngine.UI;

上の宣言が必要になります。

C#の場合はusingの宣言が付いていない時に、Textと書いたらTextの上にマウスカーソルを移動し、右クリックしてresolveからusing宣言を加える事が出来ます。

using宣言を加える

Monodevelopを日本語化しているので、デフォルトのMonodevelopを使っている方は少し違うかもしれません。

また、JavaScriptではUIのテキストはUI.TextとUIから始めなければいけませんが、C#の場合はTextとなります。
スクリプトの内容は

マウスの左クリックをした時に 代替テキストC2 というテキストの表示
SPACEキーを押した時に 代替テキストC3 というテキストの表示

を行っています。

JavaScriptでUIを使用する時のスクリプト

JavaScriptで記述したMessageTextJの方は、以下のように記述します。

JavaScriptの場合はUI.Textを取得します。
ブログの前半に投稿した記事では、GetComponentInChildren(UI.Text)としてますが、
GetComponentInChildren.<UI.Text>()で取得した方がいいみたいです。

スクリプトの処理内容は、C#で作成したものとテキストの内容を変えただけで同じになります。

JavaScriptでもC#と同じようにUIのテキストを使いたい時

これまでに書いてきたように記述すればJavaScriptでもUIのテキストを扱えますが、C#と同じように使う事も出来ます。

usingの代わりにimportを使って明示的にパッケージを指定すれば、UI.TextではなくTextで使用する事が出来ます。
いやぁ・・・JavaScriptというよりJavaですね。

これで、UnityのスクリプトからUIのテキストを操作する事が出来るようになりました。
ブログにコメントを頂いた方に返答した内容に多少付け加えて記事にしました。
簡易ではありますが、C#とJavaScriptでのUIの取り扱いの違いがわかるかと思います。

スポンサーリンク

記事をシェアして頂ける方はこちら

フォローして頂くとやる気が出ます

コメント

  1. 匿名 より:

    すいません、質問なんですがスクリプトからTextを変更する時に改行をいれる事ってできますか?

    • 改行コード¥n(半角)を入れれば改行出来ると思います。

      test1
      test2
      test3

      と表示されます。