WisdomSoft - for your serial experiences.

スクリプトとゲームオブジェクト

スクリプト自身は MonoBehaviour クラスを継承するオブジェクトであり GameObject 自身ではありませんが、スクリプトを現在実行しているゲームオブジェクトを gameObject プロパティから取得できます。

スクリプトを持つゲームオブジェクトの取得

MonoBehaviour クラスを継承するスクリプトは、コンポーネントとしてゲームオブジェクトに設定されています。スクリプトを実行しているメソッドの this から得られるのは MonoBehaviour オブジェクトでありゲームオブジェクトではありません。

スクリプトを実行しているゲームオブジェクトを取得するには gameObject プロパティを使います。

Component クラス gameObject プロパティ
public GameObject gameObject { get; }

スクリプトを実行しているゲームオブジェクト自身は gameObject プロパティを使います。しかし、スクリプト自身である MonoBehaviour クラスの多くのプロパティは、スクリプトを実行しているゲームオブジェクトにアタッチされています。

例えば、スクリプトからオブジェクトの名前にアクセスするには gameObject プロパティから得られたオブジェクトの name プロパティを使う方法がありますが、単にスクリプト自身の name プロパティからでもゲームオブジェクトの名前を得られます。

コード1
using UnityEngine;

public class Test : MonoBehaviour
{
	void Start()
	{
		print(name);
		print(gameObject.name);
	}
}
実行結果
コード1 実行結果

コード1はスクリプト自身の name プロパティと gameObject プロパティから得られた GameObject オブジェクトの name プロパティを出力しています。実行結果は、同じ名前となるでしょう。

このように、MonoBehaviour クラスのプロパティの多くがスクリプトを実行するゲームオブジェクトのプロパティとして関連付けられています。前述した移動や回転などの座標変換を行う transform プロパティも同様です。

GameObject クラス transform プロパティ
public Transform transform { get; }

名前と同様に gameObject プロパティから得られる GameObject オブジェクトの transform プロパティからも座標変換を行えます。

本来の意味から考えれば、ゲームオブジェクトの状態を操作するには gameObject プロパティから得られる GameObject オブジェクトを通すべきですが、スクリプトの処理の大部分が、スクリプトを持つゲームオブジェクトの操作であるため、スクリプト自身のプロパティがゲームオブジェクトであるかのように作用します。

ただし、これは MonoBehaviour クラスであるスクリプトの this オブジェクトとゲームオブジェクトは異なるものであるという考えを混同させてしまうため注意が必要です。