スポンサーリンク

【Unity】GameObject.Findの正しい使い方

Unity

Unity Version 2021.3.11f1(LTS)

GameObject.Findとは

GameObject.Findは、指定した名前のゲームオブジェクトをシーンの中から探して取得することが出来る関数」です。

GameObject targetObject = GameObject.Find("ゲームオブジェクトの名前");

使い方は、とても簡単で、()の中に探したいゲームオブジェクトの名前を指定することで、対象のゲームオブジェクトを探すことが出来ます!

使用例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BoyController : MonoBehaviour
{
    private GameObject _girlObject; //探してきたGameObject保存用

    void Start()
    {
        _girlObject = GameObject.Find("Girl");          //名前が"Girl"のゲームオブジェクトを探す

        Debug.Log("女の子オブジェクト" + _girlObject);   //見つけられたかをDebug.Logで表示
    }
}

このスクリプトでは、画面左の男の子を管理しているクラスが、画面右の女の子ゲームオブジェクトを探して、取得しています。

正常に取得出来ていれば、このようなログが表示されます!

注意点

名前を指定するだけで、ゲームオブジェクトがシーンのどこにいても、取得できる便利な関数ですが、注意するべきことが2つあります。

1.見つけられるのはアクティブなオブジェクトのみ

呼び出した時に、非アクティブになっているゲームオブジェクトは見つけることが出来ません。

画像のように、Girlゲームオブジェクトが、シーン上に存在はしていますが、Inspectorのチェックが外れていて、非アクティブの状態となっています。

ゲームオブジェクトを、取得することが出来ないので、"Girl"が表示されません。

2.処理が重たいので何度も使い続けるのはNG

呼び出すたびに、シーン上のゲームオブジェクトをすべて検索するので、動作が重い処理です。

なので、Start関数などの初期化系の関数で、1度だけ呼び出すようにしましょう!

Update関数内で毎フレーム呼ぶのは避けましょう!

3.同じ名前のものがあると最後に生成した方が取得される

同じシーンに"Girl"ゲームオブジェクトが複数存在すると、一番最後にシーン上に配置した"Girl"が取得されるようです。(※環境によっては動作が変わるかもしれません)

基本的には、この関数で取得する対象のゲームオブジェクトは、名前が重複しないようにしましょう!

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