C#
Unity

UnityのGameObject.Find()でnullが帰ってきてしまうときの対処法

More than 1 year has passed since last update.


GameObject.Find()とは

UnityEngineで提供されているGameObjectクラスをつかってシーン内のオブジェクトを取得する関数.引数に対象のオブジェクト名,相対パス,絶対パスが指定できる.詳しくは公式のマニュアル参照.


nullが帰ってくるとき


パスが間違っている(orオブジェクトが存在しない)

スペルミスやそもそも対象のものがないとき.これは直せばOK.


アクティブでない

公式マニュアルにもあるが,対象がアクティブになっていないときはnullになる.(これに気付かないでハマってた)

こういう場合は,親オブジェクトを経由することで取得する方法がある.Transform.Find()はアクティブでなくても取得できるので,以下のようなコードを書けば取得できる.transformからGameObjectに変えなければいけないので注意.


FindTest.cs

GameObject parent, target;

void Start() {
parent = GameObject.Find("path/to/oya");
target = parent.transform.Find("WantIt").gameObject;
}

void Update() {
//処理
}