Unityアセットストア セール情報まとめはこちら
Unityアセットストア セール

今年最大級のセール ブラックフライデーセール開催!
約300のアセットが最大50%オフ!
24時間ごとに変わるフラッシュディールは最大70%オフ!
効率的に開発して、好きなゲームを作ろう

販売ページはこちら
ゲーム制作

【Unity】非アクティブの子オブジェクトをスクリプトで取得する方法

Unity アイキャッチ
記事内に広告が含まれています。
スポンサーリンク
赤かぶくん
赤かぶくん

子オブジェクトをうまく取得できずに困っているよ。

どうしたら解決できるの?

まつぼん
まつぼん

そんなお悩みにお答えします!

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エディターから登録かと思います。

ゲーム作りで困ったときにぜひ参考にしてみてくださいね。

本記事が、皆さんの参考になれば幸いです。

タイトルとURLをコピーしました