タイトル: Get Socket Transform
SEOタイトル: UE5のGet Socket Transformの使い方|ソケット位置の取得とアタッチ
Unreal Engine 5(UE5)の「Get Socket Transform」は、スケルタルメッシュやスタティックメッシュなどのコンポーネント上に定義されたソケット(取り付け点)のワールドまたは相対トランスフォーム(位置・回転・スケール)を取得するブループリントノードです。武器やエフェクトをキャラクターの特定の部位に出したり、アクターをアタッチする際の基準座標を得たりする場面でよく使われます。
| この記事の要点 |
|---|
|
ソケット(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 Space は ERelativeTransformSpace 列挙型で、取得結果をどの座標系で返すかを決めます。代表的な値は次の通りです。
| 値 | 意味 | 主な用途 |
|---|---|---|
| World(RTS_World) | ワールド座標系でのトランスフォーム。 | 他アクターのスポーン位置や配置の基準にする場合。 |
| Actor(RTS_Actor) | そのコンポーネントを所有するアクター基準の相対トランスフォーム。 | アクター内部での相対位置を扱う場合。 |
| Component(RTS_Component) | 対象コンポーネント基準の相対トランスフォーム。 | コンポーネントローカルでの計算をしたい場合。 |
| Parent Bone Space(RTS_ParentBoneSpace) | 親ボーン基準の相対トランスフォーム。 | ボーン階層に対する相対値が必要な場合。 |
多くの場面で使うのは World です。武器やエフェクトをワールド空間にスポーンする際は、World で取得した結果をそのまま使うと位置・回転が合いやすくなります。逆に親アクター内部での相対関係を扱いたい場合は Actor や Component を選びます。座標がずれて見えるトラブルの多くは、World で取得すべき場面で相対空間を使っていた、あるいはその逆だった、という空間の取り違えが原因です。どの空間でトランスフォームを受け取り、それをどの空間で使うのか(スポーン位置に使うのか、相対オフセットの計算に使うのか)を意識して選ぶと、想定通りの結果を得やすくなります。
用途:武器・エフェクトの配置とアタッチ
Get Socket Transform は、ソケットを起点に何かを配置・追従させる場面で活躍します。代表的な使い方を挙げます。
武器をスポーンしてソケット位置に出す
- スケルタルメッシュの「hand_r」ボーンなどに、武器用のソケット(例:「WeaponSocket」)を作成します。
- ブループリントで Get Socket Transform に Target(メッシュコンポーネント)と Socket Name(「WeaponSocket」)を渡し、Transform Space を World にします。
- 得られた 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 は、ある瞬間の座標を計算やスポーンに使いたい場合に向いています。
細かい仕様や列挙値の挙動はエンジンのバージョンによって差が出ることがあるため、厳密な値が必要な場合は、お使いのバージョンの公式ドキュメントやエディタ上のノード表示で確認することをおすすめします。