【Unity】スクリプトからUIを生成する際につまづいた点
- By: Sparrow Tune
- カテゴリー: プログラミング
- Tags: Unity

プログラミング
やりたかった事
メニュー画面からゲーム画面へ遷移した後にUIをスクリプトを使って表示させる。
つまづいた点
・Prefabから生成したobjectが画面に表示されなかった
Prefabとして用意しておいたボタンなどのUIをスクリプトから生成しようとした際に次のようなエラーメッセージが出てきました。
Setting the parent of a transform which resides in a prefab is disabled to prevent data corruption.
意味としては、Prefabに対しては親を設定できないようにしているといったようです。
参考サイト
参考サイトのケースでは、Prefabをinstantiateにしていなかったのが原因だったようですが、私の場合はinstantiateしているのにこのエラーが発生しました。
解決方法
public void GhostArrangement(string prefabs_path, float pos_x, float pos_y) { //インスタンスの生成 GameObject ui = (GameObject)Resources.Load(prefabs_path); //修正前 Instantiate(ui, new Vector3(pos_x, pos_y, 0), Quaternion.identity); //canvasの子に指定 ui.transform.SetParent(this.canvas.transform, false); //修正後 GameObject ui_clone = Instantiate(ui, new Vector3(pos_x, pos_y, 0), Quaternion.identity); //canvasの子に指定 ui_clone.transform.SetParent(this.canvas.transform,false); }
instantiateをする記述自体は書いていたのですが、
instantiateしたオブジェクトに対して親オブジェクトを指定してあげていなかった点が原因でした。
おまけ
子オブジェクトは座標が親に追従するので
instantiateで座標を指定したとしても思い通りに行きません。
SetParent()の第二引数をfalseにしてやると親への追従を無視することができます。
ここも最初戸惑いました。
スポンサーリンク