18.

UE5のトランスフォームとは|位置・回転・スケールとワールド/ローカル座標

編集

トランスフォーム(Transform)とは、Unreal Engine 5(UE5)において、位置(Location)・回転(Rotation)・スケール(Scale)の3つをまとめた、オブジェクトの配置情報です。レベルに置かれたアクタやコンポーネントが「どこに・どの向きで・どの大きさで」存在するかは、すべてこのトランスフォームが保持しています。3D空間でオブジェクトを扱う最も基礎的な情報のため、エディタでの配置からブループリント・C++によるゲーム中の制御まで、あらゆる場面で登場します。

この記事の要点
  • トランスフォームは位置・回転・スケールの3要素を1つにまとめた構造体である。
  • 回転は度(degree)で表され、ピッチ・ヨー・ロールの3軸で指定する(内部表現は四元数の場合もある)。
  • 座標にはワールド座標ローカル(相対)座標があり、どちらを扱っているかを常に意識する必要がある。
  • 親子階層では、子は親を基準とした相対トランスフォームで配置される。
  • ブループリントには Get/Set Actor TransformSet Actor Relative Location など、ワールド用と相対用のノードが用意されている。
  • 「ワールドとローカルの混同」「親スケールの子への影響」「回転順序」が代表的なつまずきどころである。

トランスフォームとは

トランスフォームは、3D空間におけるオブジェクトの「状態」を表す情報です。UE5では、レベルに配置するアクタ、その内部のコンポーネント(メッシュやカメラなど)それぞれがトランスフォームを持ちます。エディタで対象を選択すると、詳細パネルの上部に「位置」「回転」「拡大・縮小」という3つの欄が並んで表示され、これがそのオブジェクトのトランスフォームにあたります。

トランスフォームは単なる数値の集まりではなく、FTransform という1つの構造体(データのまとまり)として扱われます。そのため、位置・回転・スケールをまとめて取得したり、別のオブジェクトへコピーしたりといった操作が1つの値で行えます。ブループリント上でも「Transform」という1本のピン(紫色)として受け渡しできます。

トランスフォームを構成する3つの要素

トランスフォームは、次の3要素から成り立ちます。それぞれが独立した役割を持ち、組み合わせることでオブジェクトの最終的な見た目と配置が決まります。

要素 内部の型 意味 単位・補足
位置(Location) Vector(X, Y, Z) 基準点に対するオブジェクトの座標。 標準ではセンチメートル相当。X・Y・Zの3軸で指定。
回転(Rotation) Rotator または Quaternion オブジェクトの向き。 エディタ表示は。ピッチ・ヨー・ロールの3軸。
スケール(Scale) Vector(X, Y, Z) 各軸方向の拡大・縮小率。 1.0が等倍。2.0で2倍、0.5で半分。負値で反転。

位置(Location)

位置は、X・Y・Zの3軸で表される座標です。UE5では一般に、X軸が前後(前方向が正)、Y軸が左右、Z軸が上下(上方向が正)に対応します。位置を変えることで、オブジェクトを空間内で移動させられます。座標値の基準が「ワールド全体」なのか「親オブジェクト」なのかは、後述するワールド/ローカルの区別によって変わります。

回転(Rotation)

回転はオブジェクトの向きを表し、エディタ上ではを単位とする3つの値で指定します。UE5では、回転を表す型として「ローテータ(Rotator)」が使われ、次の3軸で構成されます。

  • ピッチ(Pitch): オブジェクトが上下を向くように傾ける回転(Y軸まわり)。
  • ヨー(Yaw): 左右を向くように回す回転(Z軸まわり)。
  • ロール(Roll): 進行方向の軸を中心に左右へ傾ける回転(X軸まわり)。

ローテータは人間が読み書きしやすい一方、計算や補間(なめらかな回転)の内部処理では「クォータニオン(Quaternion/四元数)」という別表現が使われる場面があります。両者は相互に変換できますが、扱いが異なるため、ノードの入出力がどちらの型かは確認しておくと安全です。

スケール(Scale)

スケールは各軸方向の拡大・縮小率です。値が 1.0 のとき元の大きさで、2.0 なら2倍、0.5 なら半分になります。X・Y・Zを個別に設定できるため、特定の軸だけ伸ばす(非均等スケール)ことも可能です。なお、非均等スケールはコリジョンやライティングなどで意図しない結果を招くことがあるため、必要な場面に絞って使うのが一般的です。

ワールド座標とローカル(相対)座標の違い

トランスフォームを扱ううえで最も重要なのが、どの基準で座標を考えているかという点です。UE5には大きく2つの座標系があります。

  • ワールド座標(World): レベル全体の原点を基準とした絶対的な座標系。「マップ上の絶対的な場所・向き」を表します。
  • ローカル座標(Local/相対・Relative): そのオブジェクトの親を基準とした相対的な座標系。「親からどれだけずれているか」を表します。

親を持たない単独のアクタでは、相対トランスフォームとワールドトランスフォームは実質的に一致します。一方、親子関係があるオブジェクトでは両者が食い違うため、目的に応じて使い分ける必要があります。エディタの詳細パネルでも、位置・回転・拡縮の各欄を「相対」と「ワールド」で切り替えて表示・編集できます。

親子階層と相対トランスフォーム

UE5では、アクタやコンポーネントを親子関係(アタッチ)で結びつけられます。子は親に「ぶら下がる」形になり、親が動けば子も一緒に動きます。たとえばキャラクターに武器をアタッチすると、キャラクターの移動・回転に追従して武器も動きます。

このとき子が保持しているのは、親を基準とした相対トランスフォームです。子の最終的なワールド上の位置・向き・大きさは、「親のワールドトランスフォーム」と「子の相対トランスフォーム」を合成して求められます。階層が深い場合は、ルートから順に各階層の相対トランスフォームが積み重なって、最終的なワールドトランスフォームが決まります。

この仕組みにより、複数のパーツをまとめて1つの単位として動かしたり、親だけを操作して全体を移動させたりが容易になります。逆に、子のワールド位置だけを直接動かしたい場合は、相対値ではなくワールド用の操作を選ぶ必要があります。

主なトランスフォーム操作ノード

ブループリントでは、アクタやコンポーネントのトランスフォームを取得・設定するノードが多数用意されています。名前に「Relative」が付くものは相対(ローカル)座標、「World」が付くものや付かないものはワールド座標を扱う、という対応を押さえると整理しやすくなります。

ノード(例) 役割 座標系
Get Actor Transformアクタのトランスフォームをまとめて取得ワールド
Set Actor Transformアクタのトランスフォームをまとめて設定ワールド
Get Actor Location / Get Actor Rotation位置・回転を取得ワールド
Set Actor Location / Set Actor Rotation位置・回転を設定ワールド
Set Actor Relative Transform親基準のトランスフォームを設定相対(ローカル)
Set Actor Relative Location / ...Rotation親基準の位置・回転を設定相対(ローカル)
Add Actor World Offset / Local Offset現在位置からの移動量を加算ワールド/ローカル

コンポーネント(メッシュなど)に対しても、Set Relative LocationSet World Location のように同様のノードが用意されています。アクタ全体を動かすのか、その内部の一部だけを動かすのかで、対象を選び分けます。

Transform構造体の扱い

位置・回転・スケールを1つにまとめた値が FTransform です。ブループリントでは、これらを個別の値から組み立てる Make Transform ノードと、逆に3要素へ分解する Break Transform ノードがよく使われます。

  • Make Transform: Location・Rotation・Scale を入力し、1つのTransform値を作る。
  • Break Transform: 1つのTransform値を、Location・Rotation・Scaleの3つに分解する。
  • Make Relative Transform: 「対象のトランスフォーム」と「基準のトランスフォーム」から、基準に対する相対トランスフォームを求める。

たとえば、アクタを別の場所にスポーン(生成)する Spawn Actor ノードは、配置先をTransform値で受け取ります。この場合、必要な位置・回転・スケールを Make Transform で組み立てて渡す、という流れが典型的です。

つまずきやすい落とし穴

落とし穴 症状・原因 対処の方向性
ワールドとローカルの混同 相対用ノードにワールド座標を渡す(またはその逆)と、意図しない位置に飛ぶ。親を持つオブジェクトで起きやすい。 ノード名の「Relative/World」を確認し、扱っている座標系を統一する。
親スケールが子へ波及 親に非均等スケールを掛けると、子の形が歪んだり、子の相対位置が伸縮したりする。 スケールは末端の見た目用オブジェクトに限定し、階層の親では極力等倍を保つ。
回転順序・基準の取り違え ピッチ・ヨー・ロールを別軸と取り違える、または合成順序の違いで回転結果が変わる。 各軸の役割を確認し、必要に応じてローカル基準とワールド基準のどちらで回すかを明示する。

とくに回転は、適用する順序によって最終的な向きが変わるため、複数の回転を組み合わせる場合は注意が必要です。また、原点付近から遠く離れた巨大なレベルでは座標値が大きくなり、精度に影響する場合があります。こうした大規模ワールド向けの座標精度の扱いはバージョンや設定によって異なるため、必要に応じて公式ドキュメントで確認することをおすすめします。

よくある質問(FAQ)

Q. 位置・回転・スケールは1つずつ設定しないといけませんか?

いいえ。Set Actor Transform のようにまとめて設定するノードもあれば、Set Actor Location のように個別に設定するノードもあります。3要素をまとめて扱いたいときはTransform値(FTransform)を、1要素だけ変えたいときは個別ノードを使うと整理しやすくなります。

Q. 子オブジェクトを親と無関係に動かしたいのですが?

相対トランスフォームではなくワールド用の操作(例: Set World Location)を使うと、親の影響を受けつつもワールド上の目標位置を直接指定できます。完全に親の追従から切り離したい場合は、アタッチ(親子付け)自体を解除する方法もあります。

Q. 回転がエディタの表示どおりに動かないことがあります。

回転はピッチ・ヨー・ロールの軸の対応や、相対基準かワールド基準かによって挙動が変わります。また内部表現としてクォータニオンが使われる場合、ローテータとの変換で同じ向きでも数値が異なって見えることがあります。まずは扱っている軸と座標基準を確認し、想定どおりかを切り分けると原因を特定しやすくなります。

まとめ

UE5のトランスフォームは、位置・回転・スケールをまとめた、オブジェクトの配置情報です。3要素の意味に加えて、ワールド座標とローカル(相対)座標の違い、そして親子階層での相対トランスフォームの考え方を押さえることが、思いどおりにオブジェクトを配置・制御するうえでの土台になります。ブループリントの各ノードは「Relative/World」で座標系が分かれているため、扱っている基準を常に意識することが、トラブルを避ける近道です。個々のノードの細かい仕様や座標精度の扱いについては、公式ドキュメントもあわせて確認すると確実です。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. ノード・コンポーネント・関数・クラス一覧
  2. Tips
  3. エラー一覧
  4. ブループリント (Blueprint)
  5. プロジェクト (Project)
  6. レベル (Level)
  7. ウィジェット (Widget)
  8. データテーブル (DataTable)
  9. アセット
  10. アウトライナー
  11. ビュー
  12. レイヤー
  13. レイアウト
  14. ビルド
  15. ライティング
  16. ジオメトリ
  17. アクタ
  18. トランスフォーム
  19. スナップ
  20. ピボット
  21. コンテンツドロワー
  22. コンポーネント
  23. メッシュ
  24. マテリアル
  25. World Composition
  26. World Partition
  27. Unreal Insights
  28. セーブ&ロード

最近更新/作成されたページ