[UE5] 武器を手に持ったり納刀したりする
- Unreal Editor 5.4.4
やりたいこと
剣を手に持っている状態と、納刀している状態を切り替えたい。
参考
剣のモデルデータ
参考にした記事
実装
(ThirdPersonで新規プロジェクトを作成し、デフォルトで用意されているアセットを使用します。)
ソケットを作成する
Content/Characters/Mannequins/Meshes/SKM_Quinn_Simple.uasset を開きます。
武器を持たせたい(装着したい)部位を選択して右クリック->Add Socket を選択します。
これでソケットが作成されるので、適切な名前を付けます。
今回は、以下のように作成しました。
- 腰用のソケット
- ソケット名 : spineSocket
- 部位 : pelvis > spine_01
- 右手用のソケット
- ソケット名 : rHandSocket
- 部位 : pelvis > spine_01 > spine_02 > spine_03 > spine_04 > spine_05 > clavicle_r > upperarm_r > lowerarm_r > hand_r
次に、実際に武器を持たせたときの見え方を調整します。
作成したソケットを右クリック->Add Preview Asset から、実際に持たせたいモデルを選択します。
モデルが表示されるので、ソケットの位置や角度を調整します。
武器のBluePrint
Actorクラスの新規BluePrintを作成し、武器のモデルデータを放り込みます。
この時、追加したStaticMeshComponentのCollision > CollisionPresets は NoCollision にひとまず設定しておいてください。
こうしないと、後でキャラを動かしたときにおかしな挙動になってしまいます。
キャラに持たせる
Content/ThirdPerson/Blueprints/BP_ThirdPersonCharacter.uasset を開き、ViewPortへ。
先ほど作成した武器のBluePrintをCharacterMeshComponentの子要素にしてください。
武器のDetailsの中に ParentSocket という項目があるので、先ほど作成した rHandSocket を設定します。
武器の位置がおかしくなる場合は、Transformを確認してください。
この時点で、キャラクターに武器を持たせた状態でプレイできるはずです。
持ち替えの実装
BP_ThirdPersonCharacter のEventGraphで画像のようなノードを組みます。
それぞれの処理について少し詳しく説明します。
Fキーを押すとイベントが呼び出され、InHandというbooleanによって処理を分岐します。
InHandは「武器を手に持っているか」を判別するための変数です。
AttachComponentToComponentで武器をキャラクターメッシュの子要素にします。
この時、ソケットを指定することができるので、作成しておいたspineSocketとrHandSocketを設定しておきます。
(スペルミスに注意)
最後にInHandをひっくり返して処理は終了です。
終わりに
筆者はUE5は勉強中なので、何か誤っている点があれば指摘いただけますと幸いです。
Discussion