🔶

[UE5] 武器を手に持ったり納刀したりする

2025/02/22に公開
  • Unreal Editor 5.4.4

やりたいこと

剣を手に持っている状態と、納刀している状態を切り替えたい。
https://youtu.be/EGHu6b_u6Us

参考

剣のモデルデータ
https://www.fab.com/ja/listings/d5be0dc9-1a41-4be2-a63a-5ed436f3445d

参考にした記事
https://zenn.dev/daichi_gamedev/books/unreal-engine-5/viewer/attack-with-sword

実装

(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