transform.positionとGetComponent<Transform>().positionの違い

この資料では、Unityにおいてtransform.positionGetComponent<Transform>().positionがどのように違うのか、そしてなぜtransform.positionの方がシンプルに使えるのかについて、初学者向けに説明します。


1. transformとは?

Unityでは、全てのオブジェクト(GameObject)は位置回転大きさを管理するために、Transformコンポーネントを持っています。このTransformコンポーネントは必須のため、どんなオブジェクトにも必ず付いています。

簡単な例

transform.position = new Vector3(0, 5, 0);

このコードは、オブジェクトの位置を(0, 5, 0)に設定するものです。この時、transformはオブジェクトのTransformコンポーネントを指し、そこから直接positionプロパティにアクセスしています。


2. GetComponent<Transform>()とは?

GetComponent<T>()は、Unityオブジェクトの中にある特定のコンポーネントを取得するためのメソッドです。<T>の部分に探したいコンポーネントの型を指定します。

例えば、GetComponent<Transform>()とすることで、そのオブジェクトのTransformコンポーネントを取得できます。以下はその例です。

Transform myTransform = GetComponent<Transform>();
myTransform.position = new Vector3(0, 5, 0);

このようにして、Transformコンポーネントを取得してから、そのpositionを変更しています。


3. なぜtransform.positionは簡単に使えるのか?

Transformコンポーネントは、全てのUnityオブジェクトに必須であり、最もよく使われるコンポーネントの一つです。そのため、UnityではTransformコンポーネントを簡単に扱えるように、transformというショートカットを提供しています。

  • transformは、GetComponent<Transform>()と同じ結果を得られますが、Unityが内部で最適化してくれているため、直接呼び出すことができます。

これにより、毎回GetComponent<Transform>()を使う必要がなくなり、コードがシンプルかつ効率的になります。


4. 他の代表的なショートカット

Unityでは、transform以外にもいくつかのショートカットが存在します。

4.1 gameObject

gameObjectは、スクリプトがアタッチされているオブジェクトそのものを参照します。このショートカットを使うと、スクリプトが属するオブジェクトを直接操作することができます。

gameObject.SetActive(false);

4.2 rigidbody(※非推奨)

かつてはrigidbodyというショートカットがありましたが、現在は非推奨です。GetComponent<Rigidbody>()を使用します。

Rigidbody rb = GetComponent<Rigidbody>();
rb.AddForce(Vector3.up * 10);

4.3 camera(※非推奨)

cameraもまた、以前はショートカットが提供されていましたが、現在は非推奨です。GetComponent<Camera>()を使用します。

Camera cam = GetComponent<Camera>();
cam.fieldOfView = 60;

5. まとめ

  • transformgameObjectは、頻繁に使われるため、ショートカットが用意されています。
  • 他のコンポーネントにアクセスする際は、GetComponent<T>()を使用するのが現在の推奨される方法です。

この資料を通して、transform.positionGetComponent<Transform>().positionとならない理由や他のショートカットについて理解できたかと思います。

Unity

Posted by hidepon