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

  • 3
    Like
  • 0
    Comment
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() {
 //処理
}