update.経緯Unity3DでScore情報などを画面に2Dで出すuGUIを操作中、Text(自分)の文字をScriptから取得して変更しようとしてもなかなかうまくいかなかった。追加1まずはまったポイントがコレ。UnityEngine.UIを追加し忘れていた。UnityEngine;でUnityEngine配下と思われるUnityEngine.UIも利用できるようになっているのかと思ってしまったが、別途UnityEngine.UIをusingで指定する必要があった。これがないと、追加2でエラーが出る。追加2privateでText型のtextを宣言している。追加1でUnityEngine.UIを追加していないと、そもそもこの「Text」って何?というエラーが出る。追加3自身のComponent「Text」の値をとってくる、というもの。これがないとどのText(Component)を変更するのかをscriptから判断できない。ちなみにUnityのUI上でここを指定することもできる。その場合はこの記述はいらない(補足1)。追加4Textクラスのフィールド「text」に値を代入する。(Text)」となっていることがわかる。Canvas/Text」がアタッチされ、移行targetTextはアタッチしたCanvas/Textを参照するようになる。this.GetComponent\<Text>();は不要になる。上記scriptを「Canvas/Text」ではなく「Canvas」にAddComponentしたら動かないちなみに、上記scriptをCanvas自身にAddComponentしたらこのコードは動かない。//追加3の「this.」がCanvas自身になってしまい、Canvas自身にはTextがないので動かない。child.GetComponent\<Text>();とすることで、子要素を取得し、その子要素にAddされているComponent<Text>を取得することもできる。個別のText等のコンポーネントにいちいちScriptをAddComponentしていくのは非現実的なのと、子要素の名前を指定して取得するケースはGameObjectの構成を変更した途端に全て修正する必要ができてしまう。そのため、例外的に対応する以外は、やはり大元となるGameObjectにControllerのようなclassを用意し、多数ある子GameObjectをpublicにしてUnity上からアタッチするほうがよいと思われる。