Unityで外部(自分以外)のGameObjectを取得したい!
Unityの勉強中です。
概要
外部(自分以外)のGameObjectを操作したいことがある。例えば、ボタンを押したら別のGameObjectのテキストが変化する処理など。
この記事では、外部のGameObjectを取得する手順をいくつか掲載する。
仕様書
環境
- Unity 2020.3.25.f1
手順書
外部のGameObjectを取得する手順を4パターン挙げる。
オブジェクトの名前から検索して取得する
GameObject gameObject = GameObject.Find ("GameObjectName");
オブジェクトの名前が一致するオブジェクトを取得する。
実行時の負荷がそれなりにあるのでStart
関数などで初期化しておいて使うようにするのが吉。
オブジェクトに設定したタグから検索して取得する
GameObject gameObject = GameObject.FindWithTag("TagName");
オブジェクトに設定したタグ名が一致するオブジェクトを取得する。
タグという性質上、同一タグのオブジェクトがある場合、意図したオブジェクトを取得できない可能性がある。
同一のタグが設定されたオブジェクトが複数あるシーンの場合は、後節のFindObjectsWithTag
関数を使う。
オブジェクトに設定したタグから検索して取得する(複数)
GameObject[] gameObjects = GameObject.FindObjectsWithTag("TagName");
foreach(var obj in gameObjects) {
...
}
オブジェクトに設定したタグ名が一致する全てのオブジェクトを配列で取得する。
パブリックなメンバー変数を用意してエディタ上で設定しておく
public GameObject gameObject;
パブリックなメンバー変数を用意しておくとエディタ上でGameObject
を設定できるようになる。
検索の工程がないのでこれが一番早い。
まとめ(感想文)
基本的にはメンバー変数を用意しておくやり方が良いとは分かったんだけども、コード上で済ませたくなる性分。