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を使うと宣言が勝手に付く(付かない場合もある)と思いますが、

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

C#の場合はusingの宣言が付いていない時に、Textと書いたらTextの上にマウスカーソルを移動し、

MonoDevelopでは右クリックしてresolveからusing宣言を加える事が出来ます。
visual studioでは右クリックしてクイックアクションとリファクタリングから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の取り扱いの違いがわかるかと思います。

タイトルとURLをコピーしました