UE5で物を拾って装備する手順メモ
参考動画 174 / ichinanayonチャンネル さん
この記事の内容はこちらの動画を視聴しながら前半部分をメモったものです。後半のアニメーション部分の実装や武器の切り替えの学習をしたい方を知りたい方はご視聴をお勧めします。
Itemの基底クラスBP_Item
拾えるものをItemと名付ける。
SkeletalMeshコンポーネントを追加
親となるBP_ItemブループリントをActorで作成。
BP_Itemを開いてComponentsにSkeletalMeshコンポーネントを追加
追加をしたらItemMeshCompにリネーム
Construction Script を設定
Set Skeletal Mesh Assetを設定
Construction ScriptでItemMeshCompノードを設置
ItemMeshCompノードから Set Skeletal Meshノードを作成
Set Skeletal MeshノードのNew Meshを変数にする
->New Meshからエッジを引っ張ってPromote to variableとする。
作った変数の名前をItemMeshにする。理由は固定にしてしまうと固定のItemだけしか装備できなくなるため。変数の値を変えることでItemのチェンジが可能になる。
ItemMesh変数のDetailsからCategoryを Item Context|Mesh にする。
Categoryはパイプで分けることによりネストさせることができる。
Set Materialを設定
Item Mesh Compを設置
Item Mesh Compからエッジを引っ張ってSet Materialノードを作成
Set MaterrialノードのMaterialをPromoto to variableで変数にする
変数名はItemMaterialにリネーム
CategoryはItemContext|Mesh 。VARIABLESの一覧からドラッグして移動できるのでDetailsから入れる必要は特になし。うまくできなかったらItemMeshのCategoryと同じものをDetailsから入れる
銃の3Dメッシュを用意する
マーケットプレイスにある Lyra Starter Game を使ってプロジェクトを作成。
Contents/Weapons/Pistol/Mesh/ フォルダにMeshがあるので全選択をして
Asset Actions -> Bulk Export
BulkExportをするとダイアログが出てくる。デフォルトでExport All
Export Source Meshにチェックされてないがチェックしなくていいの?
✨Export Source Meshにチェックを入れると
元の高解像度メッシュデータがエクスポートされる。
編集や再利用のために、より詳細なジオメトリ情報が保持され。
ファイルサイズが大きくなる可能性があある。
✨チェックが入っていない場合
UEで最適化されたメッシュデータのみがエクスポートされる。
ファイルサイズが小さくなり、エクスポート処理が速くなる。
ゲームエンジンでの使用に最適化されたデータが得られる。
エクスポートされたファイル
4ファイルです。SK_Pistol.FBXを元のプロジェクトでimportして使う。
importするとピストルのSkeleton Meshが手に入るのでそれを使う。Materialは好きなものを使うと良い。
BP_Itemの子クラス
BP_ItemからCreate Child Blueprint Classを作り名前をBP_Pistolにする。
BP_Pistolを開いてClass DefaultsからItemMeshにSK_Pistolをセット。
ItemMaterialは好きなものを。
Viewportで見るとこんな感じに
Class DefaultsでアタッチするSlot Nameを設定
weapon_r
をAttached Socket Nameにいれる。
TransformカテゴリもAttachSocketNameも前に名付けた任意の名前なので注意。
weapon_rはSKM_QuinnのSkeletal Meshから。ThirdPersonだと以下のパスにファイルがある。
\Content\Characters\Mannequins\Meshes\SKM_Quinn
BP_ItemのEvent Graphを実装
装備イベントの作成
BP_Item->Event Graph -> カスタムイベントを作成 -> OnEquippedと名付ける。装備イベント。
キャラクターのSkeletalMeshComponetにアイテムのSkeletalMeshComponentをアタッチするように実装していく。
カスタムイベントのInputsにOwnerを追加。型はCharacter。
Pass-by-Referenceにチェック
Pass-by-Referenceが何か分からなかったのでClaudeに聞いてみた。
チェックを付けたら参照渡しになるっぽい。当然チェック。
Chacterは使いまわせるように変数にする。
OnEquippedをPromote to variableで変数にする。
OwnerCharacterからGet MeshでSkeletalMeshComponentを付けとる
Get MeshノードのMeshもPromote to variableで変数にする。
変数名はOwner Mesh Comp。
ItemMeshCompをドラッグしてノードとして設置。
ピンからエッジを引っ張ってAttach Component To Componentノードを作成
ParentにOnwer Mesh Compノードを接続。
Socket Name を Promote to variableで変数にする。
名前はAttached Socket Name。CategoryにTransformを入力。
Location Rule, Rotation Rule, Scale Rule, はすべてSnap to Targetにする。
キーを押して装備
装備イベントは準備できたのでイベントを呼び出すための処理を実装する。
BP_ThirdPersonCharacterをプレイヤーキャラクタにしているので開く。
Event GraphでF Keyノードを追加
F Key ノードのPressed ピンからエッジを引っ張って Spawn Actorノードを作成
ClassにBP Pistolを設定
Spawn TransformをSplit Struct pingで分割
戻り値から On Equippedイベントを呼び出す
On EquippedノードのOwnerはself