unity3d
ゲームオブジェクトの検索と収集
サーチ…
構文
- 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