質問: ヒエラルキービュー(シーン内)にスクリプトAがあるとします。 Aは簡単な処理でして、ゲームが開始されるとプロジェクトビュー内(シーン外)にあるスクリプトBを呼び出すものです・・ このスクリプトBには ``` public GameObject hogehoge; public Texture hongehonge; public ,,, ``` といったように、プレファブやテクスチャーを設定してあります。 しかし、ゲームをいざビルドしてみると、どうやらこのスクリプトBが読み込まれていないらしく、Bの中に書いていた処理だけが開始されませんでした。 ためしに、スクリプトBをAから呼び出さず、適当なゲームオブジェクトにBを取りつけてビルドしたら、正常に動きました。。 このBをどうしてもAから呼び出したいのですが、何か方法はありませんか?
回答: ``` //スクリプトA内 private スクリプトB scriptB; void Awake(){ scriptB = this.gameObject.AddComponent<スクリプトB>(); } ``` スクリプトAをこのように記載すると、以後「scriptB」を使うことでスクリプトBにアクセスできます。 (scriptB.hogehogeのような形) ただし、「スクリプト」のpublic変数はオブジェクトの情報を持てません。 つまりAddComponentした時点では、hogehogeもhongehongeも空(null)の状態です。 恐らくそのせいでスクリプトB内の処理が行われていないのではないでしょうか。 (nullだったら何もしない処理が入っているなど) 対策するとしたら、以下2つの方法があります。 ``` //スクリプトA内 void Awake(){ scriptB = this.gameObject.AddComponent<スクリプトB>(); //スクリプトを付けた時点でオブジェクトを入れてやる。 //(ただしスクリプトBのAwakeやStartでhogehogeを利用していると間に合わない場合あり) scriptB.hogehoge = GameObject.Find(“HogeHoge”); } ``` もしくは、 1.「スクリプトBを付けた状態のプレハブ(hogehoge等もセット済み)」を作成 2.スクリプトAでInstantiate 3.2を「スクリプトAの付いたオブジェクトの子オブジェクト」などにする(ここは任意) 4.GetComponentで2のGameObjectからスクリプトBを取得