devlog [naru design]

プログラミングやテクニカルな内容の覚え書き。

先のパーティクル発生制御を実装していた時のスクリプトで気になる点を発見。

Awake()で、inactiveなBalloonオブジェクトのParticleSystemコンポーネントを取得しています。
あれ?inactiveなオブジェクトをFindしたらNullじゃなかったっけ??
GameObject.Find()では間違いなくNullになっていたはずだけど…。

改めてスクリプトのリファレンスでTransform.Findを調べてみました。

Transform.Find

http://docs.unity3d.com/ScriptReference/Transform.Find.html

ちなみにGameObject.Findは

GameObject.Find

http://docs.unity3d.com/ScriptReference/GameObject.Find.html

よく見るとGameObject.Findの説明には

”This function only returns active gameobjects.”

と書かれています。Transform.Findには、この一文がありません。今まで、Find()ではinactiveなオブジェクトを取得できないと思っていましたが、違っていたようです。

– GameObject.Find() : activeなオブジェクトのみ
– Transform.Find() : active/inactiveどちらでも

また、Transform.FindChild()はリファレンスには見当たりません。以前から変だなと思っていましたが、Transform.FindChild()はTransform.Find()と同等なようです。リファレンスに載っていないのでFindChildは使わないほうがいいかもしれません。

Pocket

コメントを残す

Trackback URL: