先のパーティクル発生制御を実装していた時のスクリプトで気になる点を発見。
1 2 3 4 5 6 7 8 |
ParticleSystem _balloon; void Awake() { this._balloon = transform.FindChild("Balloon").GetComponent<ParticleSystem>(); // this._balloon = GameObject.Find("Balloon").GetComponent<ParticleSystem>(); } |
Awake()で、inactiveなBalloonオブジェクトのParticleSystemコンポーネントを取得しています。
あれ?inactiveなオブジェクトをFindしたらNullじゃなかったっけ??
GameObject.Find()では間違いなくNullになっていたはずだけど…。
改めてスクリプトのリファレンスでTransform.Findを調べてみました。
Transform.Find
ちなみに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は使わないほうがいいかもしれません。
コメントを残す
コメントを投稿するにはログインしてください。