Transform (トランスフォーム) は、ゲームオブジェクトの Position (位置)、Rotation (角度/回転)、Scale (スケール/縮尺) および親子関係の状態を保持します。ゲームオブジェクトには常に Transform コンポーネントが設定されています。Transform コンポーネントを削除したり、Transform コンポーネントなしでゲームオブジェクトを作成することはできません。
Transform コンポーネントは、シーン内の各オブジェクトの Position (位置)、Rotation (角度/回転)、Scale (スケール/縮尺) を決定します。全てのゲームオブジェクトは Transofrm を持っています。
ヒント: トランスフォームの軸 (およびその他の UI 要素) の色は変更できます。(メニューから Unity > Preferences と選択し、Colors & keys パネルを選択してください。)
プロパティ | 機能 |
---|---|
Position | XYZ 座標におけるトランスフォームの位置。 |
Rotation | X、Y、Z 軸を中心とするトランスフォームの回転角 (単位: 度)。 |
Scale | X、Y、Z 軸に沿ったトランスフォームのスケール。値が “1” の場合は元のサイズ (ゲームオブジェクトをインポートした時のサイズ) になります。 |
Unity は、トランスフォームの Position、Rotation、Scale の値を、そのトランスフォームの親を基準に相対的に測定します。トランスフォームに親がない場合、Unity はワールド空間でプロパティを測定します。
2D 空間では、X 軸または Y 軸上でのみトランスフォームを操作できます。3D 空間では、X 軸、Y 軸、Z 軸でトランスフォームを操作できます。Unity では、これらの軸はそれぞれ赤、緑、青の色で表されます。
トランスフォームのプロパティは、主に以下の 3 つの方法で編集できます。
シーンビューでは、Move (移動)、Rotate (回転)、Scale (スケール) ツールを使ってトランスフォームを編集できます。これらのツールは Unity エディターの左上にあります。
トランスフォームツールはシーン内のどのゲームオブジェクトにでも使用できます。ゲームオブジェクトを選択すると、その中にツールの ギズモ が表示されます。ギズモの見た目は選択したツールによって異なります。
表示されているギズモの 3 軸のうち 1 つをクリックしてドラッグすると、選択した軸が黄色になります。マウスをドラッグすると、選択した軸に沿ってゲームオブジェクトが移動、回転、拡大/縮小します。マウスボタンを離しても、軸は選択されたままです。
ゲームオブジェクトを動かす時に、動きを特定の平面にロック(固定) する (つまり、2 つの軸にのみ変更を加え、3 つ目の軸には変更を加えないようにする) ことができます。各平面へのロックを有効にするには、移動ギズモの中心を囲む 3 つの小さな色付きキューブを選択します。この色は各軸の色に対応しており、キューブを選択するとその軸がロックされます (例えば、Z 軸をロックするには青いキューブを選択します)。
Inspector ウィンドウでは、Transform コンポーネントを使って、選択したゲームオブジェクトの Transform プロパティを編集できます。コンポーネントで Transform プロパティの値を編集するには、以下の 2 つの方法があります。
ゲームオブジェクトのトランスフォームをスクリプト経由で編集するには、Transform
API を使用してください。
Unity では、ゲームオブジェクトを親子階層にグループ化することができます。
Hierarchy ウィンドウでは、子ゲームオブジェクトは親ゲームオブジェクトの直下に表示され、リスト内でインデントされます。親ゲームオブジェクトの折りたたみアイコンを選択すると、その子ゲームオブジェクトを表示したり隠したりできます。
子ゲームオブジェクトは、親ゲームオブジェクトと全く同様に移動、回転、拡大縮小します。また、子ゲームオブジェクトがそれ自体の子ゲームオブジェクトを持つこともできます。ゲームオブジェクトは、子ゲームオブジェクトは複数持てますが、親ゲームオブジェクトは 1 つしか持てません。
こうしたゲームオブジェクト同士の親子関係は、トランスフォーム階層を形成します。階層の一番上にあるゲームオブジェクト (つまり、階層の中で唯一親を持たないゲームオブジェクト) は、ルート ゲームオブジェクトと呼ばれます。
親ゲームオブジェクトを作成するには、Hierarchy ウィンドウで任意のゲームオブジェクトを他のゲームオブジェクトの上にドラッグします。これで、2 つのゲームオブジェクトの間に親子関係が作られます。
You can group GameObjects into parent-child hierarchies.
全ての子ゲームオブジェクトの Transform 値は、親ゲームオブジェクトの Transform 値を基準とする相対値で表示されます。こうした値は ローカル座標 と呼ばれます。シーンを構築するにあたっては、通常は、子ゲームオブジェクトのローカル座標で作業すれば事足ります。ゲームプレイでは、子ゲームオブジェクトの グローバル座標 あるいはワールド空間における正確な位置の特定が往々にして役に立ちます。Transform コンポーネントのスクリプティング API には、ローカルとグローバルで別々の Position、Rotation、Scale プロパティがあり、ローカル座標とグローバル座標を相互に変換できます。
ヒント: トランスフォームを親にする場合、子トランスフォームを追加する前に親の位置を <0,0,0> に設定しておくと便利です。これは子トランスフォームのローカル座標がグローバル座標と同じになることを意味します。これにより、子トランスフォームが正しい位置にあることを確認しやすくなります。
トランスフォームの Scale (スケール) は、モデリングアプリケーションでのメッシュのサイズと Unity でのメッシュのサイズとの差異を決定します。Unity でのメッシュサイズ (つまりトランスフォームの Scale) は、特に物理シミュレーション中に非常に重要です。物理演算エンジンは、デフォルトでは、ワールド空間における 1 ユニットが 1 メートルに対応する想定になっています。ゲームオブジェクトが非常に大きいと、“スローモーションで” 落下しているように見える場合があります。これは実際に正しいシミュレーションです - 非常に大きなオブジェクトがとても長い距離を落ちるのを見ている、ということになるからです。
ゲームオブジェクトの Scale に影響する要素は以下の 3 つです。
Transform コンポーネントでゲームオブジェクトの Scale を調整しないでください。現実世界の縮尺でモデルを作成する場合は、Transform の Scale を変更する必要はありません。また、インポートサイズに基づいて一部の最適化が行われるため、メッシュのインポート時のスケールも調整できます。これは個々のメッシュの Import Settings (インポート設定) で行います。Scale 値が調整されたゲームオブジェクトをインスタンス化すると、パフォーマンスが低下することがあります。
ノート: Scale を変更すると子トランスフォームの位置に影響します。例えば、親トランスフォームを (0,0,0) にスケールすると、全ての子トランスフォームが、親トランスフォームを基準に相対的に (0,0,0) に配置されます。
Transform 内の Scale の X、Y、Z の値が、例えば (2, 4, 2) のように異なる場合、これは不均等スケーリングと呼ばれます。これに対し、均等スケーリングとは、X、Y、Z の値が (3, 3, 3) のように同じ場合です。不均等なスケーリングは限られた特定のケースで役立ちますが、以下のように、均等なスケーリングとは異なる動作が発生します。
Transform