2012年07月18日

[Unity] 階層構造のあるGameObjectの子GameObjectを指定するときの注意

現在製作中のプロトタイプで、階層構造のあるGameObjectを扱っています。
その中で、階層構造の中にあるGameObjectを指定するときに気づいたことがあったので備忘メモ。

具体例をあげます。
これがHierarchyウィンドウの中身。

20120718child001.png

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
posted by be-style at 20:08| Comment(0) | Unity
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]