【Unity】ゲームオブジェクトの検索はFindメソッド。デメリットは処理速度が遅いこと。

2021年7月29日

どうも、だらはです。
今回はゲームオブジェクトを取得する方法を紹介したいと思います。

スポンサーリンク

ゲームオブジェクトを取得する方法

ゲームオブジェクトを取得する方法は以下の通りいくつかあります。

今回は「名前で検索する方法」と「親子関係から検索する。(親から子)」です。
他の手法に関してはリンクを張りましたので参照頂けたらと思います。

1. 名前で検索する方法

「名前で検索する方法」の場合はGameObjectクラスFind()メソッドを使います。
シーン全体から検索するあめ処理が重いので、Update()メソッドでは使わないようにしてください。

public static GameObject Find(string name);

引数は文字列です。検索するオブジェクト名を指定します。
では、サンプルとしてスクリプト例を書きたいと思います。
Enemyという名のゲームオブジェクトを検索し、回転させるスクリプトです。

◆SmpFind.cs

using UnityEngine;

public class SmpFind : MonoBehaviour
{
    private GameObject obj;
    void Start()
    {
        obj = GameObject.Find("Enemy");
    }
    void Update()
    {
        obj.transform.Rotate(0, 1, 0);
    }
}

以下の画像が実行結果です。

画像を見て頂けると分かると思いますが、Find()メソッドで取得できるゲームオブジェクトは1つのみです。
Find()メソッドは使いやすいですが、ゲームオブジェクト名が一意でない場合などには、先に挙げた「タグ(Tag)で検索する」「親子関係から検索する(子から親)」、後述する「親子関係から検索する(親から子)」を試してみると良いと思います。

2.親子関係から検索する(親から子)方法

次に親子関係から検索する方法(親から子)です。

具体的にはtransform.Find()メソッドを使います。

public Transform Find (string n);

◆SmpFind.cs

using UnityEngine;

public class SmpFind : MonoBehaviour
{
    private GameObject obj;
    void Start()
    {
        obj = transform.Find("Cube").gameObject;
    }
    void Update()
    {
        obj.transform.Rotate(0, 1, 0);
    }
}

あくまで子オブジェクトを検索するので、オブジェクト名が一意でなくても複数のオブジェクトを同時制御できます。

最後に

いかがでしたでしょうか。

  • Find()メソッドを使う場合は、Start()メソッド内で使用する。
  • 処理速度はタグ/親子関係から検索する方が早い。

以上、だらはでした。

スポンサーリンク

基礎

Posted by daraha_gm