【UE】アクタのコンポーネントの位置を特定のボーンに固定させる方法

Unreal Engine

はじめに

例えばキャラクターに剣を持たせたいとき、その剣(USceneComponent から派生したコンポーネントクラス)をどのように扱えばいいでしょうか?

この画像の白い棒が剣だとしたとき、この剣を SkeletalMeshComponent の子供としてアタッチするだけではキャラクターの手に追従してくれません。

手のボーンの位置を Tick() で毎フレーム取得して、それを剣に適用するという実装もできますが、ソケットというものを使えばもっとスマートに実装できるのでその方法をサクっと紹介します。

手順

ここからはドラゴンの顔付近に常にカメラを固定するという例で実際の手順を解説します。

ソケットの追加

手順1

まずはコンポーネントを追従させたい 3D モデルの Skeleton を開きます。
コンポーネントを固定させたいボーンを選択している状態で左上の「+」から「Add Socket」を選択してソケットをそのボーンに追加します。

手順2

追加したソケットの名前をいい感じに変更して、Details から座標や角度、大きさなどを設定しておきます。

コンポーネントの設定

手順3

編集した Skeleton を使用している SkeletalMesh がアサインされているブループリントを開いて、ボーンに固定させたいコンポーネントをその SkeletalMeshComponent の子供としてアタッチします。
(今回は CameraComponent をボーンに追従させます)

手順4

SkeletalMeshComponent にアタッチしたコンポーネントの「Sockets > Parent Socket」の右の虫眼鏡マークを押して、SkeletalMesh エディタで追加したソケットを選択します。

手順はここまでです!
コンパイルしてゲームを実行してみましょう。

追加したコンポーネントの位置が対象のボーンに固定されているはずです。。

最後に

    お問い合わせ

      タイトルとURLをコピーしました