現在製作中のプロトタイプで、階層構造のあるGameObjectを扱っています。
その中で、階層構造の中にあるGameObjectを指定するときに気づいたことがあったので備忘メモ。
具体例をあげます。
これがHierarchyウィンドウの中身。
2つのPlayerオブジェクトがあります。
2つともまったく同じ内容です。
PlayerオブジェクトにPlayerScriptコンポーネントを適用するとして、
「階層の中にある"North"オブジェクトに適用されている"SomeScript"コンポーネントを扱いたい」
場合にどうすればいいか。
必要部分だけを抜粋すると、階層構造はこんな感じ。
ここでは、区別のためにPlayerA、PlayerBと名づけます。
+ Player (PlayerScript.js) ← Player A
+-- North (SomeScript.js) ← North A
+ Player (PlayerScript.js) ← Player B
+-- North (SomeScript.js) ← North B
PlayerScript.js内での記述の選択肢としては、3つあります。
(1) GameObject.Find("North").GetComponent(SomeScript);
(2) gameObject.Find("North").GetComponent(SomeScript);
(3) transform.Find("North").GetComponent(SomeScript);
結果、
(1)(2)ゲーム空間全体を検索してしまうようで、NorthBを指定したはずがNorthAが選択されてました。
(3)PlayerA、PlayerBの各々の子である、NorthA、NorthBを指定できました。
これで結構ハマってました。
気づいてよかった。
いや、リファレンスをちゃんと読めばいいんですが orz
2012年07月18日
[Unity] 階層構造のあるGameObjectの子GameObjectを指定するときの注意
posted by be-style at 20:08| Comment(0)
| Unity
この記事へのコメント
コメントを書く