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;
見つからない場合は
nullFind返しnull
| 長所 | 短所 |
|---|---|
| 限られた、明確に定義された検索範囲 | 文字列は弱参照です |
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow