子オブジェクトをうまく取得できずに困っているよ。
どうしたら解決できるの?
そんなお悩みにお答えします!
Unityでゲームを作っていた時に、非アクティブの子オブジェクトを取得したいことがあります。
でも、うまくいきませんでした。
調べたところ、GameObject型の変数を用意してUnityエディターから登録などシンプルな方法で実現可能でした。
本記事では、Unityで非アクティブの子オブジェクトをスクリプトで取得する方法についてご紹介します。
環境
Unity バージョン:2020.3.46f1
内容 非アクティブの子オブジェクトをスクリプトで取得する
Find関数を用いて子オブジェクトを取得しようとすると、エラーが起きることがあります。
これは、親オブジェクトが非アクティブになっていると、子オブジェクトを見つけることができないことが原因のようです。
解決方法 非アクティブの子オブジェクトをスクリプトで取得する
解決方法は下記のとおりです。
- GameObject型の変数を用意してUnityエディターから登録
- 最初アクティブにしてFind関数で取得後に非アクティブにする
- 親オブジェクトからTransform.Find
詳細を順番にご説明します。
GameObject型の変数を用意してUnityエディターから登録
一番簡単な方法。
GameObject型の変数を宣言し、Unityエディター上からアタッチします。
わかりやすい、Find関数よりも処理が速いなど、利点が多く確実な方法かと思います。
最初アクティブにしてFind関数で取得後に非アクティブにする
アクティブならFind関数で取得できます。
取得後非アクティブにする方法です。
private GameObject targetObject;
void Start()
{
targetObject = GameObject.Find("Target");
targetObject.SetActive(false);
}
親オブジェクトからTransform.Find
Transform.Findで取得する方法です。
この場合アクティブでなくても取得可能となります。
// parentGameObjectは探したいオブジェクトの親オブジェクト
GameObject targetObject = parentGameObject.transform.Find("Target").gameObject;
【Unity】非アクティブの子オブジェクトをスクリプトで取得する方法 まとめ
本記事では、Unityで非アクティブの子オブジェクトをスクリプトで取得する方法をご紹介しました。
下記のとおり、いくつか方法があります。
- GameObject型の変数を用意してUnityエディターから登録
- 最初アクティブにしてFind関数で取得後に非アクティブにする
- 親オブジェクトからTransform.Find
初心者にわかりやすいのは、GameObject型の変数を用意してUnityエディターから登録かと思います。
ゲーム作りで困ったときにぜひ参考にしてみてくださいね。
本記事が、皆さんの参考になれば幸いです。