【初心者Unity】はじめに知っておくべきTransformコンポーネントの概要
▶
【Unity】3Dアクションゲームを作ろう!#7 ステージの作成(Skybox・落下判定)
▶
【Unity】3Dアクションゲームを作ろう!#8 ステージの作成(スイッチ・扉)
▶
【Unity】3Dアクションゲームを作ろう!#9 プレイヤーのHP管理
▶
【初心者Unity】JsonUtilityクラスでJSONを扱う方法
▶
【初心者Unity】スクリプトからコンポーネントを追加する方法
はじめに知っておくべきTransformコンポーネントの概要
Transformコンポーネントは、各ゲームオブジェクトの「座標(Position)、回転(Rotation)、サイズ(Size)」を管理するコンポーネントです。
ゲームオブジェクトごとに必ずもっているコンポーネントであり、他のコンポーネントのようにゲームオブジェクトから外すことはできません。
Unityエディタ上ではインスペクタービューにて編集することができます。各項目のパラメータはX軸、Y軸、Z軸ごとに値を持ち、数値はシーンビューと連動しているためハンドツールでゲームオブジェクトの位置やサイズを変更するとリアルタイムでインスペクタービューに反映されます。
また、Transformを扱う上で押さえておくべきポイントは、各項目の値はすべて親オブジェクトからの相対値として扱われる点です。
親オブジェクト無し
まずは親オブジェクトが存在しないケースから説明します。
ヒエラルキービューの直下(ルート直下ともいう)に配置されたゲームオブジェクトは、親オブジェクトが存在しません。したがって、
位置(Position)の値はワールド座標の原点(0, 0, 0)からの距離を表します。
Rotation(回転)の値はワールド座標のXYZ軸まわりの角度となります。
サイズ(Size)はワールド座標系と同じ尺度となるため、(Size xが1)=(ワールド座標のx方向に1の長さを持つ)となります。(回転は考慮しないものとする)
要するに各値がどこにも依存しないため、各プロパティの値から実際の位置やサイズを直感的にとらえることができます。
親オブジェクトあり
次に親オブジェクトが存在する(ゲームオブジェクトが入れ子となる)ケースについてです。
まず理解すべき点は、子オブジェクトは親オブジェクトの値に影響を受けるという点です。
例えば、親オブジェクトサイズを2倍にすれば、子オブジェクトのサイズも2倍になりますが、この時、子オブジェクトのSizeの値に変動はありません。
これは子オブジェクトの値があくまでも親オブジェクトに対する相対的な値として扱われるためです。そのため、
子オブジェクトのPositionの値は、親オブジェクトの座標を基準とした距離を表します。
子オブジェクトのRotationは親オブジェクトのxyz軸を基準とした角度となります。
下図は子オブジェクトのRotationが0でも親の軸が基準となっていることがわかります。
親オブジェクトを回転させると、子オブジェクトのワールド座標での位置も変わります。
子オブジェクトのSizeは親オブジェクトと比較したサイズ(2にすれば親の2倍、0.5なら半分の大きさ)となります。
このように、いずれも親オブジェクトが基準となっています。
上記の仕組みを知った上で実際にTransformの値を操作してみると、感覚的に理解できると思います。
ちなみにPositionやSize値の「1」は、現実世界のシミュレートとしては「1メートル」として扱われます。これは物理演算(特に空気抵抗や摩擦など)を考慮するオブジェクトにおいては重要な要素となりますので覚えておくとよいでしょう。逆に見た目だけを調整では特に気にする必要はありません。