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

約200のアセットが最大50%割引!
開発を効率化して、好きなゲームを作ろう

販売ページはこちら
Unity

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

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

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

「WordPressでブログやアフィリエイトをやってみたい!」

「もっと性能が良いレンタルサーバーに乗り換えたい!」

そんな方に、安い・高機能・高速のレンタルサーバーConoHa WINGがおすすめ。

以下の「ConoHA WING 5000円割引特典リンク」からWINGパック12ヶ月以上の申込みをすると、キャンペーン価格からさらに5,000円割引されます。お得に申し込めるチャンス!

詳細はこちらの記事をご覧ください。

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