Version: Unity 6.0 (6000.0)
言語 : 日本語
ゲームオブジェクト
Rotation and orientation

Transform

Switch to Scripting

Transform はゲームオブジェクトの位置回転スケール、および親の状態を保存します。ゲームオブジェクトには常に Transform コンポーネントがアタッチされます。Transform を削除する、または Transform コンポーネントを使用せずにゲームオブジェクトを作成することはできません。

Transform コンポーネント

Transform コンポーネントは、シーン内の各ゲームオブジェクトの位置回転スケールを決定します。すべてのゲームオブジェクトには Transofrm が配置されています。

Transform コンポーネント
Transform コンポーネント

ヒント: 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 はワールド空間に基づいてプロパティを測定します。

Transform の編集

2D スペースでは、Transform は X 軸または Y 軸でのみ操作できます。3D スペースでは、X 軸、Y 軸、Z 軸で Transform を操作できます。Unity で、これらの軸はそれぞれ、赤色、緑色、青色で表示されます。

軸の色分けを示す Transform
軸の色分けを示す Transform

Transform のプロパティを編集できる主な方法は 3 つあります。

シーンビュー

シーンビューでは、移動、回転、スケールツールを使用して Transform を変更できます。これらのツールは Unity エディターの左上隅に配置されています。

ハンド、移動、回転、スケールツール
ハンド、移動、回転、スケールツール

Transform ツールは、シーン内のゲームオブジェクトで使用できます。ゲームオブジェクトを選択すると、オブジェクト内に__ギズモ__ツールが表示されます。ギズモの外観は選択したツールによって異なります。

トランスフォームギズモ (括弧内はキーボードショートカット)。
トランスフォームギズモ (括弧内はキーボードショートカット)。

3 つのギズモの軸のうち 1 つをクリックしてドラッグすると、軸の色が黄色に変わります。マウスをドラッグしている間、ゲームオブジェクトは選択した軸に沿って移動、回転、またはスケールします。マウスボタンをリリースしても、軸は選択されたままになります。

ゲームオブジェクトの移動中は、特定の平面への移動をロックできます (つまり、2 つの軸を変更し、3 つ目の軸は変更しません)。各平面のロックをアクティベートするには、移動ギズモの中心の周囲にある 3 つの小さな色つきの正方形を選択します。色は正方形を選択したときにロックされる軸に対応しています (例えば、Z 軸をロックするには青色の正方形を選択します)。

インスペクターウィンドウ

Inspector ウィンドウでは、Transform コンポーネントを使用して、選択したゲームオブジェクトの Transform プロパティを編集できます。コンポーネントの Transform プロパティ値の編集方法は 2 つあります。

  • プロパティ値フィールドに手動で値を入力します。これは非常に特殊な調整を行う場合に有効です。
  • 値フィールドをクリックし、上下にドラッグして値を増減します。これはあまり具体的でない調整を行う場合に有効です。

C# スクリプト

Transform API を使用して、スクリプトでゲームオブジェクトの Transform を編集します。

ゲームオブジェクトのグループ化

Unity では、ゲームオブジェクトを親子階層にグループ化できます。

  • 親ゲームオブジェクトには、Transform プロパティを継承する他のゲームオブジェクトが接続されています。
  • 子ゲームオブジェクトは別のゲームオブジェクトに接続され、そのゲームオブジェクトの Transform プロパティを継承します。

Hierarchy ウィンドウでは、子ゲームオブジェクトは親ゲームオブジェクトの直下に表示され、リスト内でインデントされます。折り畳みアイコンを選択すると、親ゲームオブジェクトの子ゲームオブジェクトを非表示または表示に設定できます。

子ゲームオブジェクトは、親ゲームオブジェクトとまったく同じように移動、回転、スケールします。子ゲームオブジェクトには、自身の子ゲームオブジェクトを配置することもできます。ゲームオブジェクトには複数の子ゲームオブジェクトを配置できますが、配置できる親ゲームオブジェクトは 1 つのみです。

ゲームオブジェクト間のこれらの複数レベルの親子関係は、Transform 階層を形成します。階層の最上位のゲームオブジェクト (つまり、階層内で唯一親を持たないゲームオブジェクト) は、__ルート__ゲームオブジェクトと呼ばれます。

親ゲームオブジェクトを作成するには、Hierarchy ウィンドウで任意のゲームオブジェクトを別のゲームオブジェクトにドラッグします。この操作によって 2 つのゲームオブジェクト間に親子関係が作成されます。

親子階層の例。名前の左側に折り畳みの矢印があるゲームオブジェクトは親です。
親子階層の例。名前の左側に折り畳みの矢印があるゲームオブジェクトは親です。

親と子のゲームオブジェクトの Transform の編集

ゲームオブジェクトを親子階層にグループ化できます。

子ゲームオブジェクトの Transform 値は、親ゲームオブジェクトの Transform 値を基準にして表示されます。これらの値は__ローカル座標__と呼ばれます。シーンの構築では、通常は子ゲームオブジェクトのローカル座標で作業することで十分です。ゲームプレイでは、多くの場合に、グローバル座標__やワールド空間での正確な位置を確認することが有効です。Transform コンポーネントのスクリプティング API には、ローカル座標とグローバル座標の__位置回転、および__スケール__に関する個別のプロパティがあり、ローカル座標とグローバル座標を変換できます。

ヒント: Transform を親にする場合は、子の Transform を追加する前に親の場所を <0,0,0> に設定することが有効です。つまり、子 Transform のローカル座標はグローバル座標と同じになるため、子 Transform が正しい位置にあることの確認が容易になります。

Transform とスケール

Transform の__スケール__は、モデリングアプリケーションのメッシュのサイズと該当するメッシュの Unity におけるサイズの差を決定します。Unity でのメッシュのサイズ (したがって Transform の__スケール__) は、特に物理演算シミュレーションを実施する際に重要です。デフォルトでは、物理演算エンジンはワールド空間の 1 単位が 1 メートルに対応するものと仮定します。ゲームオブジェクトのサイズが非常に大きい場合は、“スローモーション” で落下しているように見える可能性があります。非常に大きなゲームオブジェクトが長い距離を落下するのを見ているため、シミュレーションは正しく行われています。

ゲームオブジェクトの__スケール__に影響する要因は 3 つあります。

  • 3D モデリングアプリケーションでのメッシュのサイズ
  • ゲームオブジェクトの Import SettingsMesh Scale Factor 設定。
  • Transform コンポーネントの__スケール__値。

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) です。不均等スケーリングは、いくつかの特定のケースに対して有効な可能性がありますが、均等スケーリングとは異なる動作をします。

  • 一部のコンポーネントでは不均等スケーリングを完全にサポートしていません。例えば、スフィアコライダー、カプセルコライダー、ライト、オーディオソースなどの Radius プロパティで定義された円や球面的な要素を持つコンポーネントがあります。つまり、不均等なスケーリングでも、楕円ではなく円形の形状が維持されます。
  • 子ゲームオブジェクトに不均等にスケーリングされた親ゲームオブジェクトがあり、その親ゲームオブジェクトを基準にして回転すると、歪んで見える、または “切断” される場合があります。コンポーネントの中には、単純な不均等スケーリングをサポートしているものもありますが、このように歪んでいるときは正確に作用しません。例えば歪んだ Box Collider (ボックスコライダー) は、レンダリングされたメッシュの形状と正確には一致しません。
  • 不均等にスケーリングされた親ゲームオブジェクトの子ゲームオブジェクトは、回転してもスケールが自動的に更新されません。その結果、子ゲームオブジェクトの形状は、最終的にスケールを更新したとき、例えば子ゲームオブジェクトが親ゲームオブジェクトから切り離されたときに、突然変化するように見える可能性があります。

その他の参考資料

Transform

ゲームオブジェクト
Rotation and orientation