サーチ…


構文

  • public static GameObject Find(文字列名);
  • パブリック静的GameObject FindGameObjectWithTag(文字列タグ);
  • パブリック静的GameObject [] FindGameObjectsWithTag(文字列タグ);
  • public static Object FindObjectOfType(タイプタイプ);
  • public static Object [] FindObjectsOfType(タイプタイプ);

備考

使用する方法

実行時にGameObjectsを探しているときは、リソースを消費する可能性があるので注意してください。特に、FindObjectOfTypeやFind in Update、FixedUpdateを実行しないでください。より一般的には、フレームあたり1つ以上の時間と呼ばれるメソッドで実行してください。

  • 実行時メソッドFindObjectOfTypeを呼び出し、必要なときにのみFind
  • FindGameObjectWithTagは他の文字列ベースのメソッドと比較して非常に優れたパフォーマンスを持っています。 Unityは、タグ付きオブジェクトに別々のタブを持ち、シーン全体ではなく照会します。
  • エディタで作成された "静的な" GameObjects(UI要素やプレハブなど)は、エディタでシリアライズ可能なGameObject リファレンスを使用します
  • 自分で管理するリストまたは配列にGameObjectのリストを保存する
  • 一般的に、同じタイプのGameObjectを多くインスタンス化すると、 Object Pooling
  • 高価な検索方法を繰り返し実行することを避けるために、検索結果をキャッシュします。

より深く進む

Unityに付属のメソッドに加えて、独自の検索および収集メソッドを設計するのは比較的簡単です。

  • FindObjectsOfType()場合は、スクリプトでstaticコレクション内のリストを保持することができます。シーンのオブジェクトを検索して検査するよりも、オブジェクトの準備リストを反復する方がはるかに高速です。

  • または、インスタンスを文字列ベースのDictionaryに保存するスクリプトを作成し、展開できるシンプルなタグ付けシステムを使用できます。

ゲームオブジェクトの名前で検索する

var go = GameObject.Find("NameOfTheObject");
長所短所
使いやすいシーン内のゲームオブジェクトの数に応じてパフォーマンスが低下します
文字列は弱参照であり、ユーザーエラーが疑われる

GameObjectのタグで検索する

var go = GameObject.FindGameObjectWithTag("Player");
長所短所
単一のオブジェクトとグループ全体の検索が可能文字列は弱い参​​照であり、ユーザーエラーの疑いがあります。
比較的高速かつ効率的タグはスクリプトでハードコードされているため、コードは移植できません。

編集モードでスクリプトに挿入

[SerializeField]
GameObject[] gameObjects;
長所短所
素晴らしいパフォーマンスオブジェクトコレクションは静的です
ポータブルコード同じ場面のGameObjectsのみを参照できる

MonoBehaviourスクリプトによるゲームオブジェクトの検索

ExampleScript script = GameObject.FindObjectOfType<ExampleScript>();
GameObject go = script.gameObject;

FindObjectOfType()は、何も見つからない場合はnull返しnull

長所短所
強く型付けされた評価に必要な数のゲームオブジェクトに沿ってパフォーマンスが低下する
単一のオブジェクトとグループ全体の検索が可能

子オブジェクトから名前でGameObjectを探す

Transform tr = GetComponent<Transform>().Find("NameOfTheObject");
GameObject go = tr.gameObject;

見つからない場合はnull Find返しnull

長所短所
限られた、明確に定義された検索範囲文字列は弱参照です


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow