(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

親や子を簡単に作れる拡張メソッド【Unity】【拡張メソッド】


このエントリーをはてなブックマークに追加



この記事でのバージョン
Unity 5.4.0f3


はじめに

今回は親や子を簡単に作れる拡張メソッドのご紹介!

イメージは以下のような感じ。


f:id:kan_kikuchi:20160824134734g:plain


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っ)∋〜