Transform はゲームオブジェクトの位置、回転、スケール、および親の状態を保存します。ゲームオブジェクトには常に Transform コンポーネントがアタッチされます。Transform を削除する、または Transform コンポーネントを使用せずにゲームオブジェクトを作成することはできません。
Transform コンポーネントは、シーン内の各ゲームオブジェクトの位置、回転、スケールを決定します。すべてのゲームオブジェクトには Transofrm が配置されています。
ヒント: Transform 軸 (およびその他の UI 要素) の色を変更できます (メニュー: Unity> Preferences の順に選択し、Colors & keys パネルを選択します)。
| プロパティ | 機能 |
|---|---|
| Position | X、Y、Z 座標での Transform の位置。 |
| Rotation | X 軸、Y 軸、Z 軸を中心とする Transform の回転角 (単位: 度)。 |
| Scale | X 軸、Y 軸、および Z 軸に沿った Transform のスケール。値 “1” は元のサイズ (ゲームオブジェクトをインポートした際のサイズ) です。 |
| 制約された比率の有効化 | 現在の比率を維持するようにスケールを強制し、1 つの軸を変更すると他の 2 つの軸も変更されるようにします。デフォルトでは無効になっています。 |
Unity は Transform の親に対する Transform の位置、回転、スケールの値を測定します。Transform に親が存在しない場合、Unity はワールド空間に基づいてプロパティを測定します。
2D スペースでは、Transform は X 軸または Y 軸でのみ操作できます。3D スペースでは、X 軸、Y 軸、Z 軸で Transform を操作できます。Unity で、これらの軸はそれぞれ、赤色、緑色、青色で表示されます。
Transform のプロパティを編集できる主な方法は 3 つあります。
シーンビューでは、移動、回転、スケールツールを使用して Transform を変更できます。これらのツールは Unity エディターの左上隅に配置されています。
Transform ツールは、シーン内のゲームオブジェクトで使用できます。ゲームオブジェクトを選択すると、オブジェクト内に__ギズモ__ツールが表示されます。ギズモの外観は選択したツールによって異なります。
3 つのギズモの軸のうち 1 つをクリックしてドラッグすると、軸の色が黄色に変わります。マウスをドラッグしている間、ゲームオブジェクトは選択した軸に沿って移動、回転、またはスケールします。マウスボタンをリリースしても、軸は選択されたままになります。
ゲームオブジェクトの移動中は、特定の平面への移動をロックできます (つまり、2 つの軸を変更し、3 つ目の軸は変更しません)。各平面のロックをアクティベートするには、移動ギズモの中心の周囲にある 3 つの小さな色つきの正方形を選択します。色は正方形を選択したときにロックされる軸に対応しています (例えば、Z 軸をロックするには青色の正方形を選択します)。
Inspector ウィンドウでは、Transform コンポーネントを使用して、選択したゲームオブジェクトの Transform プロパティを編集できます。コンポーネントの Transform プロパティ値の編集方法は 2 つあります。
Transform API を使用して、スクリプトでゲームオブジェクトの Transform を編集します。
Unity では、ゲームオブジェクトを親子階層にグループ化できます。
Hierarchy ウィンドウでは、子ゲームオブジェクトは親ゲームオブジェクトの直下に表示され、リスト内でインデントされます。折り畳みアイコンを選択すると、親ゲームオブジェクトの子ゲームオブジェクトを非表示または表示に設定できます。
子ゲームオブジェクトは、親ゲームオブジェクトとまったく同じように移動、回転、スケールします。子ゲームオブジェクトには、自身の子ゲームオブジェクトを配置することもできます。ゲームオブジェクトには複数の子ゲームオブジェクトを配置できますが、配置できる親ゲームオブジェクトは 1 つのみです。
ゲームオブジェクト間のこれらの複数レベルの親子関係は、Transform 階層を形成します。階層の最上位のゲームオブジェクト (つまり、階層内で唯一親を持たないゲームオブジェクト) は、__ルート__ゲームオブジェクトと呼ばれます。
親ゲームオブジェクトを作成するには、Hierarchy ウィンドウで任意のゲームオブジェクトを別のゲームオブジェクトにドラッグします。この操作によって 2 つのゲームオブジェクト間に親子関係が作成されます。
ゲームオブジェクトを親子階層にグループ化できます。
子ゲームオブジェクトの Transform 値は、親ゲームオブジェクトの Transform 値を基準にして表示されます。これらの値は__ローカル座標__と呼ばれます。シーンの構築では、通常は子ゲームオブジェクトのローカル座標で作業することで十分です。ゲームプレイでは、多くの場合に、グローバル座標__やワールド空間での正確な位置を確認することが有効です。Transform コンポーネントのスクリプティング API には、ローカル座標とグローバル座標の__位置、回転、および__スケール__に関する個別のプロパティがあり、ローカル座標とグローバル座標を変換できます。
ヒント: Transform を親にする場合は、子の Transform を追加する前に親の場所を <0,0,0> に設定することが有効です。つまり、子 Transform のローカル座標はグローバル座標と同じになるため、子 Transform が正しい位置にあることの確認が容易になります。
Transform の__スケール__は、モデリングアプリケーションのメッシュのサイズと該当するメッシュの Unity におけるサイズの差を決定します。Unity でのメッシュのサイズ (したがって Transform の__スケール__) は、特に物理演算シミュレーションを実施する際に重要です。デフォルトでは、物理演算エンジンはワールド空間の 1 単位が 1 メートルに対応するものと仮定します。ゲームオブジェクトのサイズが非常に大きい場合は、“スローモーション” で落下しているように見える可能性があります。非常に大きなゲームオブジェクトが長い距離を落下するのを見ているため、シミュレーションは正しく行われています。
ゲームオブジェクトの__スケール__に影響する要因は 3 つあります。
Transform コンポーネントでゲームオブジェクトの__スケール__を調整しないでください。現実世界のスケールでモデルを作成する場合、Transform の__スケール__を変更する必要はありません。また、一部の最適化はインポートサイズに基づいて行われるため、メッシュをインポートするスケールを調整することもできます。これは、個別のメッシュの __Import 設定__で行います。調整された__スケール__値を持つゲームオブジェクトをインスタンス化すると、パフォーマンスが低下する可能性があります。
ノート: __スケール__を変更すると、子の Transform の位置も影響を受けます。例えば、親 Transform を (0,0,0) にスケーリングすると、すべての子 Transform は親 Transform を基準にして (0,0,0) に配置されます。
不均一なスケーリングは、Transform のスケールの x、y、z の値が異なる場合です。例えば (2, 4, 2)。一方、均一なスケーリングは、x、y、z に対して同じ値を持ちます。例えば、(3, 3, 3) です。不均等スケーリングは、いくつかの特定のケースに対して有効な可能性がありますが、均等スケーリングとは異なる動作をします。
Transform