23.

UE5のGet Socket Transformの使い方|ソケット位置の取得とアタッチ

編集

Unreal Engine 5(UE5)の「Get Socket Transform」は、スケルタルメッシュやスタティックメッシュなどのコンポーネント上に定義されたソケット(取り付け点)のワールドまたは相対トランスフォーム(位置・回転・スケール)を取得するブループリントノードです。武器やエフェクトをキャラクターの特定の部位に出したり、アクターをアタッチする際の基準座標を得たりする場面でよく使われます。

この記事の要点
  • Get Socket Transform は、指定したソケット(またはボーン)の Transform 構造体を返すノード。
  • 主な入力は Target(対象コンポーネント)・In Socket Name(ソケット名)・Transform Space(座標空間)の3つ。
  • 位置だけ欲しい場合は Get Socket Location、回転だけなら Get Socket Rotation が使える。
  • ソケット名が見つからない場合、エラーにはならずコンポーネント自身のトランスフォームが返る点に注意。
  • 武器・エフェクトの配置や、Attach Actor / Component to Component でのソケット指定アタッチと組み合わせて使うのが定番。

ソケット(Socket)とは

ソケットとは、メッシュ上に定義する名前付きの取り付け点(参照ポイント)です。位置・回転・スケールのオフセットを持ち、「右手」「銃口」「背中」など、何かをアタッチしたい場所にあらかじめ作っておきます。

  • スケルタルメッシュのソケット:特定のボーンを親として定義します。親ボーンがアニメーションで動くと、ソケットもそれに追従して動くため、手や足など動く部位への取り付けに向いています。スケルトンアセット、またはスケルタルメッシュのエディタからソケットを追加します。
  • スタティックメッシュのソケット:スタティックメッシュエディタのSocket Managerで追加します。ボーンを持たないため、メッシュ原点からのオフセットとして定義されます。

ソケット名は後でブループリントから文字列(Name型)で参照するため、追加時に分かりやすい一意の名前を付けておくのが扱いやすくなります。ソケットはエディタ上でプレビュー用のメッシュ(例:武器モデル)を仮表示しながら位置合わせできるため、実際に取り付けたときの見え方を確認しながらオフセットを調整できます。1つのメッシュに複数のソケットを定義できるので、用途ごと(武器用・エフェクト用・装飾用など)に分けて持たせておくと、ブループリント側での使い分けが明確になります。

Get Socket Transform の入力と出力

Get Socket Transform はシーンコンポーネント(Scene Component)を対象に動作するノードです。主な引数は次の通りです。

項目区分説明
Target入力ソケットを持つコンポーネント。スケルタルメッシュコンポーネントやスタティックメッシュコンポーネントなどを指定します。
In Socket Name入力取得したいソケット名。ソケット名だけでなくボーン名を指定して、そのボーンのトランスフォームを得ることもできます。
Transform Space入力結果を返す座標空間。後述の ERelativeTransformSpace から選択します。
Return Value出力位置・回転・スケールを含む Transform 構造体。

出力は Transform 構造体なので、Break Transform で位置・回転・スケールに分解したり、そのまま SpawnActor の Spawn Transform に渡したりできます。

位置・回転だけ欲しい場合

トランスフォーム全体が不要で、位置や回転だけが欲しい場合は、専用の派生ノードを使うと配線がシンプルになります。

  • Get Socket Location:ソケットの位置(Vector)を返します。こちらは常にワールド空間で返る点が、Transform Space を選べる Get Socket Transform との違いです。
  • Get Socket Rotation:ソケットの回転(Rotator)を返します。

Transform Space(座標空間)の指定

Get Socket Transform の Transform SpaceERelativeTransformSpace 列挙型で、取得結果をどの座標系で返すかを決めます。代表的な値は次の通りです。

意味主な用途
World(RTS_World)ワールド座標系でのトランスフォーム。他アクターのスポーン位置や配置の基準にする場合。
Actor(RTS_Actor)そのコンポーネントを所有するアクター基準の相対トランスフォーム。アクター内部での相対位置を扱う場合。
Component(RTS_Component)対象コンポーネント基準の相対トランスフォーム。コンポーネントローカルでの計算をしたい場合。
Parent Bone Space(RTS_ParentBoneSpace)親ボーン基準の相対トランスフォーム。ボーン階層に対する相対値が必要な場合。

多くの場面で使うのは World です。武器やエフェクトをワールド空間にスポーンする際は、World で取得した結果をそのまま使うと位置・回転が合いやすくなります。逆に親アクター内部での相対関係を扱いたい場合は Actor や Component を選びます。座標がずれて見えるトラブルの多くは、World で取得すべき場面で相対空間を使っていた、あるいはその逆だった、という空間の取り違えが原因です。どの空間でトランスフォームを受け取り、それをどの空間で使うのか(スポーン位置に使うのか、相対オフセットの計算に使うのか)を意識して選ぶと、想定通りの結果を得やすくなります。

用途:武器・エフェクトの配置とアタッチ

Get Socket Transform は、ソケットを起点に何かを配置・追従させる場面で活躍します。代表的な使い方を挙げます。

武器をスポーンしてソケット位置に出す

  1. スケルタルメッシュの「hand_r」ボーンなどに、武器用のソケット(例:「WeaponSocket」)を作成します。
  2. ブループリントで Get Socket Transform に Target(メッシュコンポーネント)と Socket Name(「WeaponSocket」)を渡し、Transform Space を World にします。
  3. 得られた Transform を SpawnActor の Spawn Transform に渡して武器アクターを生成します。

アタッチして追従させる場合

武器を毎フレーム手の動きに追従させたい場合は、トランスフォームを取得して手動で位置を合わせ続けるよりも、Attach Actor To Component(または Attach Component To Component)でSocket Name を指定してアタッチする方が簡潔です。アタッチすると親子関係が作られ、ソケットの動きに自動で追従します。

Get Socket Transform は「ある瞬間のソケットの座標を読み取って計算や配置に使う」、Attach 系ノードは「ソケットに対して恒常的に貼り付ける」と役割を分けて考えると整理しやすくなります。両者を組み合わせ、スポーン直後にアタッチする流れもよく使われます。

Socket Name 指定の注意点

Get Socket Transform の挙動で特に押さえておきたいのが、ソケット名が見つからなかったときの動作です。

// 公式ドキュメントの戻り値の説明(要旨)

// ソケットが見つかればソケットのトランスフォーム(ワールド空間)を返す。

// 見つからなければコンポーネント自身のトランスフォーム(ワールド空間)を返す。

つまりソケット名を間違えてもその場でエラーや警告が必ず出るわけではなく、代わりにコンポーネント自身のトランスフォームが返ります。「なぜか武器がキャラクターの足元(コンポーネント原点付近)に出る」といった症状の多くは、このソケット名の不一致が原因です。

  • ソケット名はエディタで定義した名前と大文字・小文字・スペルを完全に一致させる必要があります。
  • 可能なら、ソケット名はピンに直接文字列を打つのではなく、エディタ上のドロップダウンや定数から選ぶと打ち間違いを減らせます。
  • 対象のメッシュ(スケルトン/スタティックメッシュ)にそのソケットが実際に存在するかを、Socket Manager 等で確認します。

落とし穴と対処

よくある落とし穴対処
ソケット名のタイプミスで意図したソケットが取れず、武器やエフェクトが妙な位置に出る。エディタで定義した名前と完全一致しているか確認。文字列直打ちを避け、選択式やリネーム時の一括更新を活用する。
存在しないソケット名を指定しても、エラーで止まらずコンポーネントのトランスフォームが返るため、不具合に気づきにくい。表示位置が想定外のときは、まずソケットの存在とスペルを疑う。デバッグ時はソケット位置を Draw Debug Sphere 等で可視化する。
Transform Space の取り違え。Local(Component/Actor)相当を World として使い、座標がずれる。ワールド配置には World を、相対計算には Actor / Component を選ぶ。Get Socket Location が常にワールド空間で返る点も意識する。
アニメーション更新タイミングとのずれ。取得した瞬間のソケット位置を使うため、追従させたい場合に1フレーム遅れて見えることがある。継続的な追従が目的なら、毎フレーム取得し直すより Attach 系ノードでのアタッチを検討する。

関連ノード

  • Get Socket Location / Get Socket Rotation:位置・回転だけを個別に取得したいとき。
  • Attach Actor To Component / Attach Component To Component:ソケットを指定してアクターやコンポーネントを貼り付け、追従させたいとき。
  • Does Socket Exist:指定した名前のソケットが存在するかを事前にチェックしたいとき。
  • Break Transform:取得した Transform を位置・回転・スケールに分解したいとき。

FAQ

Q. ソケット名を間違えるとどうなりますか?
A. ノードがエラーで止まることは基本的になく、ソケットが見つからない場合は対象コンポーネント自身のトランスフォーム(ワールド空間)が返ります。武器やエフェクトがコンポーネント原点付近に出てしまう典型的な原因なので、表示位置が想定外のときはまずソケット名のスペルと存在を確認してください。

Q. ボーン名を指定しても使えますか?
A. はい。In Socket Name にはソケット名のほかボーン名も指定でき、その場合は該当ボーンのトランスフォームを取得できます。ソケットを別途用意しなくても、特定のボーン位置を起点にしたい場合に利用できます。

Q. 武器を手に持たせ続けたいのですが、毎フレーム Get Socket Transform で位置を合わせるべきですか?
A. 恒常的に追従させたいだけなら、毎フレーム取得して手動で合わせるより Attach Actor To Component 等でソケット指定アタッチする方が簡潔で、ずれも起きにくくなります。Get Socket Transform は、ある瞬間の座標を計算やスポーンに使いたい場合に向いています。

細かい仕様や列挙値の挙動はエンジンのバージョンによって差が出ることがあるため、厳密な値が必要な場合は、お使いのバージョンの公式ドキュメントやエディタ上のノード表示で確認することをおすすめします。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. Event BeginPlay
  2. Event ActorBeginOverlap
  3. Event Tick
  4. on component begin overlap
  5. On Component Hit
  6. CameraBoom(Spring Arm)
  7. Get Player Character
  8. Nav Mesh Bounds Volume
  9. AI MoveTo
  10. Pawn
  11. Create Render Target 2D
  12. Take High Res Screenshotノード
  13. Sphere Reflection Capture
  14. Event Tickノード
  15. ウィジェットのキャンバスパネル
  16. DefaultSceneRoot
  17. FloatingPawnMovement
  18. Set World Rotation
  19. Event Any Damage
  20. Set World Rotation
  21. VInterp To
  22. Get Socket Transform

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