武器を拾ってみよう!
今回はアニメーションBPとキャラの動作を改良して、
装備をAttachするところまでやってみたいと思います。
実際に動作させる物はこちらです。
アニメーションして拾って装備するまでの一連の流れができた!これでちょっと改良すれば装備を落とすとかもできるはず(・ω・) #UE4 pic.twitter.com/lj0BE0NLD9
— よしかた (@yoshikata_game) 2021年2月21日
※UE4.26.1を使用しています。
※事前準備としてサードパーソンプロジェクトを作成する必要があります。
※これだけが正解ではなくもっと良い方法もあると思いますので、
ぜひ試行錯誤をして楽しく作ってみてください(・ω・)
キャラクターBPに必要な変数を追加
まずThirdPersonCaracterで拾っている最中かのフラグを作ります。
ThirdPersonCaracterのブループリントを開いて、
isPickupというboolの変数を追加します。
※変数の追加は変数横の+ボタンで追加が行えます。
ThirdPersonCharacterの設定は今回この変数のみです。
続いてアニメグラフとアニメーションBPの設定を行います。
アニメグラフの編集とアニメーションBP編集
操作しているTPSキャラクターの、
ThirdPerson_AnimBPにステートを追加します。
右クリックでステートの追加を行います。
拾うアニメーションをPickupのステートで再生するようにします。
※ThirdPerson_PickupItemは下のリンクのアニメーションファイルの事です。
こちらを使用する際はプロジェクトにインポートしてください。
アニメーションは下記のリンクにfbx形式で置いてあります。
※アニメーションはコントロールリグのプロジェクトで作ったので、
自作したい人はこちら。
アニメーションの追加が完了したら
右上のアニメーションを選択して通知を追加します。
今回はPlayerで設定していたThirdPersonCharacterの、
IsPickupの状態を見てアニメーションをするようにしているので、
PlayCharacterという変数で状態を保持しておきます。
そのPlayCharacterから先ほど追加したIsPickupの変数を元に切り替えます。
矢印のそれぞれの方向にアニメーションに移行する条件を書きます。
PlayCharacterの中にあるisPickupを元に状態を切り替えます。
あとはイベントグラフの方で下記の二つの処理を作ります。
・プレイヤー情報を更新する。
・拾うアニメーションが終了時に通知でisPickupをFalseにする。
アニメーション処理の箇所の説明は完了になります。
続いては拾うためのアイテムの処理・ソケットを作ります。
ソケットの設定
まずアイテムをアタッチするためのソケットを作成します。
ThirdPerson_AnimBPのスケルトンタブを選択します。
左側のスケルトンツリーから、lowerarm_rを選択してソケットを追加します。
スケルタルメッシュのlowerarm_r(右腕の前腕側)のボーンから作成します。
ソケットの追加が完了したら、
位置や角度などを微調整します。
位置:X→-13 Y→0.0 Z→-6.8
角度:X→-100 Y→83 Z→0
ソケットの設定は上記で完了です。
アイテムブループリントの作成
拾うアイテムブループリントを作成します。
BP_Itemというコンポーネント用のブループリントを作成します。
作成したらアイテム(StaticMesh)と拾う範囲を決めるトリガーを作成します。
StaticMeshの方ではキャラクターとカメラに当たらないように、
PawnとCameraのコリジョンをオーバーラップにしておきます。
実際にイベントグラフの方でプログラムを作成していこうと思います。
まずインプットできるようにBeginPlayで入力を受け付けるようにします。
続いてGate関数を用いてプレイヤーが接触した時だけ拾うようにします。
オーバーラップ開始時にOpenにして、
オーバーラップ終了時にクローズするようにしています。
Exitが実行された際にアニメーションを行うIsPickupフラグをONにして、
拾うタイミングでキャラクターのメッシュにアタッチします。
AttachActorToComponentのルールはどれも「Snap To Target」にしています。
最後にSphereCollisionを削除します。
これでアイテムブループリントの動作は完了になります。
実際に配置してちゃんと拾えるか確認してみてください。
最後に・・・・
今回アニメーションブループリントを使用しましたが、
PlayAnimationで実装することも可能です。
もっと簡単な方法もあるかと思うのでぜひいろいろ試してみてください!
長々と記事を読んでいただきありがとうございます。