スクリプトからゲームオブジェクトを取得する
gameObject
からアタッチしているゲームオブジェクトのインスタンスを取得することが可能(リファレンス)。
MonoBehaviour
の継承が必要だがそもそもアタッチしている時点で継承する必要あり。
例えばCubeオブジェクトにスクリプトをアタッチしてデバッグログでgameObject
を出力した場合。
SampleObject.cs
public class SampleObject : MonoBehaviour {
private void Start () {
Debug.Log(gameObject);
}
}
Console
Cube (UnityEngine.GameObject)
UnityEngine.Debug:Log(Object)
こんなこと誰でも知ってるよね
gameObjectのgameObject
gameObject
はGameObject
だが、GameObject
もgameObject
を持っている(下記参照)。
GameObject.cs
namespace UnityEngine
{
[ExcludeFromPreset]
[NativeHeaderAttribute("Runtime/Export/GameObject.bindings.h")]
[UsedByNativeCodeAttribute]
public sealed class GameObject : Object
{
...
//
// Summary:
// Scene that the GameObject is part of.
public Scene scene { get; }
public GameObject gameObject { get; }
...
}
}
つまりgameObject.gameObject
みたいな書き方も可能。インスタンスも同じである。
SampleObject.cs
private void Start () {
Debug.Log(gameObject.gameObject);
Debug.Log(gameObject == gameObject.gameObject);
}
Console
Cube (UnityEngine.GameObject)
UnityEngine.Debug:Log(Object)
True
UnityEngine.Debug:Log(Object)
その気になればgameObject.gameObject.gameObject
なんて書くことも可能、たくさん繋げられる。
SampleObject.cs
private void Start () {
Debug.Log(gameObject.gameObject.gameObject);
Debug.Log(gameObject == gameObject.gameObject.gameObject);
}
Console
Cube (UnityEngine.GameObject)
UnityEngine.Debug:Log(Object)
True
UnityEngine.Debug:Log(Object)
何故こういう動きになるのか気になって調べてみたのですがあまり有力な情報は得られず。
何か知っている人がいたらコメント等で教えて下さい。