- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!シーン内のGameObject/Componentを取得
GameObject名として「xxxx」、この中のコンポーネントとして「TestScript.cs」(クラス名 TestScript) が存在する場合に、スクリプト内のクラスの参照を得るには以下のようにします。
TestScript script;
script = GameObject.Find("xxxx").GetComponent<TestScript>();
「GameObject.Find」関数で、シーン内のGameObjectを検索し、その中のコンポーネントをGetComponent関数で取得しています。
後は、TestScriptの関数fooにアクセスするには「script.foo();」のように呼び出せます。
グローバル変数などを別途のスクリプト内にまとめている場合のアクセスではこれが利用できます。
!!GameObject.SetActive(false)時
GameObjectのSetActiveでfalseを指定した場合、もしくはGameObjectのInspectorウィンドウで以下の箇所のチェックボックスをOffにした場合は、シーン上に対象のGameObjectは表示されません。
{{ref_image unity_gameobject_active_01.png}}
この場合は、GameObject.Findでも検索されなくなります。
Unityエディタ上であらかじめ指定のGameObjectは有効にしておいて、
MonoBehaviour派生クラスのStart関数内で
private GameObject m_gameObject;
....
void Start() {
m_gameObject = GameObject.Find("xxx") as GameObject;
m_gameObject.SetActive(false);
}
のようにGameObjectの参照を保持しておくとよいかもしれません。
!!Hierarchyの階層を考慮してGameObjectを検索
m_gameObject = GameObject.Find("/UI Root/MyPanel/Label") as GameObject;
のように「/」で区切って指定することで、Hierarchyウィンドウの階層構造を考慮した検索を行なうことができます。
----
{{lastmodified}}