この記事でのバージョン
Unity 5.4.0f3
SetParent
新たなGameObjectを生成するにはnew GameObject("オブジェクト名)、
親を設定するにはTransformのSetParentを使います。
上記から、新たに親や子を生成する場合は以下のような感じになります。
//親を生成 GameObject newParent = new GameObject ("Parent"); Transform oldParent = transform.parent; transform.SetParent (newParent.transform); if(oldParent != null){ newParent.transform.SetParent (oldParent); } //子を生成 GameObject child = new GameObject ("Chld"); child.transform.SetParent (transform);
なお、直接setParentするとそれまでの親の下から外れてしまうので、
新たな親の親に、それまでの親を設定するように(差し込むように)処理しています。
拡張メソッド
上記の処理は特に難しいものではありませんが、
Transformの拡張メソッドとして作成しておくと、何かと便利です。
その拡張メソッドが以下のコードです。
ついでに、生成と同時にコンポーネントも追加出来るメソッドと
Prefabから生成したインスタンスを親や子に設定するパターン
も作りました。
上記のTransformExtension.csを作成すると、
どのTransformでも簡単に親や子を作れるようになります。
//新たに子を生成 GameObject child = transform.CreateChild("Child"); BoxCollider childCollider = transform.CreateChild<BoxCollider>("Child"); //新たに親を生成 GameObject parent = transform.CreateParent("Parent"); BoxCollider parentCollider = transform.CreateParent<BoxCollider>("Parent");
//ResourcesディレクトリからのPrefabへのパス string prefabPath = "GameObject"; //Prefabから子を生成 GameObject child = transform.CreateChildFromPrefab(prefabPath); BoxCollider childCollider = transform.CreateChildFromPrefab<BoxCollider>(prefabPath); //Prefabから親を生成 GameObject parent = transform.CreateParentFromPrefab(prefabPath); BoxCollider parentCollider = transform.CreateParentFromPrefab<BoxCollider>(prefabPath);
おわりに
今回のような処理としては短いものでも、拡張メソッドを用意しておくと楽ですし、
なによりコードがすっきりして良いかと思います(:3っ)∋〜