【Unity】Transformコンポーネントとは?オブジェクトの座標を管理している機能

Transformコンポーネント Unity

こんにちは、ともくんのゲーム作り部屋にようこそ!

このページでは、

「UnityのTransformコンポーネントが何なのか知りたい!」

「Transformコンポーネントで何ができるのか知りたい!」

というお悩みの方に向けた内容となっています。

Unityでは、コンポーネントというものを使ってオブジェクトに様々な機能を持たせることができます。

その中でも、ゲーム内に配置するほとんどのオブジェクトに対して、Transformコンポーネントが使われています。

このTransformコンポーネントは、オブジェクトの位置や回転、大きさなどを管理しているコンポーネントです。

そこで、Unityでよく使われるTransformコンポーネントについて、どういうものなのか、使い方や設定項目までをまとめていきます。

この記事を書いた人

ゲーム作りを学び始めた一児のパパです。
このブログは、子供から「ゲームを作ってみたい!」と言われ、非プログラマーでゲーム作りをしたことない僕が、ゲーム作りの本を読んで独学でゲーム開発を学んでいるブログです。
同じように初めてゲーム作りをしている方と一緒に学んでいけるようなブログに出来たらいいなと思っています。
また、「このコードはおかしい」とか「もっと良い書き方があるよ!」などあれば、どんどん指摘して頂けると助かります。

Transformコンポーネントとは?

まずは、UnityのTransformコンポーネントがどういうものなのかを紹介していきます。

オブジェクトの座標を管理している機能

Transformコンポーネントとは、ゲーム内のオブジェクトの座標を管理している機能です。

もう少し具体的に言うと、ゲーム内に配置するオブジェクトの座標・回転・大きさを決める役割をTransformコンポーネントで行っています。

例えば、オブジェクトをゲーム内で移動させたり、

オブジェクトをグルグルと回転させたり、

オブジェクトの拡大縮小を行ったり、

といったことをTransformコンポーネントで行うことができます。

なお、Unity内に配置しているゲームオブジェクトには、全てこのTransformコンポーネントが紐づいていて、座標などのオブジェクト情報が管理されています。

UIオブジェクトはRectTransformで管理する

全てのゲームオブジェクトにTransformコンポーネントが紐づいていますが、UIのオブジェクトに関しては異なります。

UIオブジェクトは、TransformではなくRectTransformコンポーネントというものが準備されていて、このRectTransformを使ってUIの表示位置を指定していくことができます。

RectTransformとは、RECT構造体と呼ばれる矩形を表すためのクラスのコンポーネントで、UI画面領域の中のどこにUI(テキストやボタン)を表示させるかを指定することができます。

そのため、UIを配置する際は、Transformコンポーネントは使わないので注意しておきましょう。

Transformコンポーネントの使い方

ここからは、Transformコンポーネントの使い方や設定項目についてまとめていきます。

オブジェクトを配置すると自動的に紐づく

Transformコンポーネントは、基本的にオブジェクトを配置したり作成したりすると、自動的に紐づき使うことができます。

例えば、ヒエラルキーウィンドウの+ボタンから「3D Object」「Cube」を選択して配置します。

作成されたオブジェクトを選択すると、インスペクターウィンドウにTransformコンポーネントが初めから紐づいているのが分かります。

他にも準備した画像などを取り込んだり、空のオブジェクトを作成した際も、Transformコンポーネントは必ず紐づいて作成されます。

Transformコンポーネントの設定項目

Transformコンポーネントには、

  • Position
  • Rotation
  • Scale

の3つの設定項目があります。

Position:オブジェクトの座標位置を決める変数

Positionは、オブジェクトをゲーム内のどこに配置するかといった座標を管理している変数で、X座標・Y座標・Z座標を使って配置する座標を決めています。

もう少し詳しく説明すると、Transformコンポーネントの中に変数positionが定義されていて、この中にfloat型の変数x・y・zが管理されています。

例えば、オブジェクトを配置する位置を初期の(0 ,0 ,0)から、

(3,0,0)に変更すると、オブジェクトの位置が変わっているのが分かります。

また、ここに表示されている座標は、ローカル座標となっているため、親オブジェクトからの座標位置が表示されることになります。

例えば、元のPositionの位置が(0,0,0)になっているオブジェクトを(10,10,10)の座標位置にある親オブジェクトの配下に入れた場合、

オブジェクトの位置は変わっていないのに、座標が(0,0,0)から(-10,-10,-10)に変わっているのがわかります。

これは、親オブジェクトを基準としたローカル座標が、Positionの値として表示されているからです。

Rotation:オブジェクトの回転を管理している変数

Rotationは、オブジェクトの回転を管理している変数で、Positionと同じくX・Y・Zで回転量を保持しています。

もう少し詳しく言うと、

  • Xの値は座標のX軸に対してどのくらい角度の回転を行うか
  • Yの値は座標のY軸に対してどのくらい角度の回転を行うか
  • Zの値は座標のZ軸に対してどのくらい角度の回転を行うか

を決めている項目です。

例えば、Rotationに何も設定していない以下のオブジェクトを準備します。

このオブジェクトのRotationのYの項目に「40」を入れた場合、Y軸に対して40度の回転量が加わることになります。

この状態でさらにZに「120」を入れた場合、今度はZ軸に対して120度の回転量が加わります。

このように、TransformコンポーネントのRotationでは、そのオブジェクトの各軸に対しての回転を制御しています。

なお、Rotationに回転量を加えることができるRotateは、Transformコンポーネントで管理しているメソッドになっています。

Scale:オブジェクトの大きさを管理している変数

Scaleは、オブジェクトの大きさを管理している変数で、他のPositionやRotationと同じくX・Y・Zで大きさを保持しています。

もう少し詳しく言うと、

  • Xの値はX軸に対してどのくらいの拡大縮小を行うか
  • Yの値はY軸に対してどのくらいの拡大縮小を行うか
  • Zの値はZ軸に対してどのくらいの拡大縮小を行うか

を決めていて、デフォルトを1としてオブジェクトの大きさ倍率を指定できます。

例えば、2Dゲームで四角形のオブジェクトを配置しておきます。

このオブジェクトのScaleのXの値を「2」とした場合、X軸に対して通常の2倍に拡大されたオブジェクトが表示されます。

さらに、Yの値を「0.5」とした場合、Y軸に対して通常の半分になったオブジェクトになります。

このようにTransformコンポーネントのScaleは、オブジェクトの大きさを管理している変数になっています。

GetComponentを使わなくて良い

Transformコンポーネントをスクリプトから管理する場合に、GetComponentを使ってコンポーネントの取得を行う必要がありません。

具体的には、通常コンポーネントの機能をスクリプトから使う場合は、GetComponentというコンポーネントの情報を取得するメソッドを使う必要があります。

しかし、Transformコンポーネントは非常によく使うコンポーネントのため、Unity側ですでに「transform」という変数名で情報が取得されているので、このGetComponentを使う必要がありません。

例えば、オブジェクトの座標の位置をスクリプトから取得する場合、

using UnityEngine;

public class Test : MonoBehaviour
{
    void Start()
    {
        Debug.Log(transform.position);
    }
}

上記のように、7行目で「transform.position」と書いてあげるだけで、Positionの値が取得できるようになっています。

まとめ

このページでは、Unityでよく使われるTransformコンポーネントについて、どんなコンポーネントなのか、また使い方や設定項目についてまとめていきましたが、いかがでしたでしょうか?

Transformコンポーネントとは、オブジェクトの座標や回転、大きさなどを管理しているコンポーネントです。

このTransformを使って、移動させたり回転させたり、拡大縮小を行ったりと、オブジェクトを制御するのに使うことができます。

ゲーム内に配置するオブジェクトには、すべてTransformコンポーネントが紐づくことになるので、使い方をマスターしておくと良いでしょう。

最後までお読みいただきまして、ありがとうございました!

コメント