アンリアルクエスト5 実装振り返り1日目

この記事は約4分で読めます。

アンリアルクエスト1日目の初級から上級の一部までの実装の振り返りと,実装手順の振り返り記事になります.(完全実装後のまとめなので一部後ろの課題の内容が含まれます,継ぎ足し文のせいで文体が安定しない)

1日目:初級 敵を倒す/ 中級:敵に死亡演出をつけよう

1日目の記念すべき1つ目の課題は敵を倒すでした.

サンプルプロジェクトにはすでに敵が3体配置されており,これらはAIコントローラによって制御されているため,何もしなくてもプレーヤに近づき攻撃してきます.しかし,その敵の攻撃には当たり判定がなく,味方の攻撃にも当たり判定がないので,当たり判定を有効化し,そのうえで相手に当たったら撃破するという機能を実装するのが目標となります.

なお味方の攻撃については攻撃motionが攻撃アクションに既に割り振られているため,マウスを左クリックすればタテ切りを行ってくれます.

この初級課題については過去のクエストでも学習済みで,やるべきこととしてわかるのが

・ダメージを受けてDestroyする敵

・味方の攻撃でダメージを与える

の2点です.

前者のほうはわりとシンプルにBlueprintを組むことが可能で,ダメージを受けたらDestroyすればOKです.このときにDeathをイベント化しておくと別の要因でのキルや,演出を追加するときに便利.

ついでにDestroyする前にCollisionとAllBodiesSimulatesPhysicsを有効にしておくとラグドールしてくれるので,ちょっとした演出としてピッタリ.そしてこれが達成されれば中級もクリアということになります.ただし,物理アセットの設定をきちんとしておかないと,特にVRM4U経由のアバタでは恐怖映像なことになってしまう.また音声も併せて入れておくと演出として十分となるのではなかろうか.

効果音素材には今回もこちらのサイトのものを利用させていただきました.

あとは味方の攻撃でダメージを受けるようにすればよいのですが,地味にこれがややこしい.
ただ倒すだけであれば味方に触れた時にダメージを与えてしまえばよいのだけど,それだと剣以外の部分に接触した際も判定されてしまうし,攻撃motion以外のタイミングでもダメージが発生してしまう.「剣で切られた」ときにダメージを判定させるためにはブループリントを工夫する必要があり,これには,元のサンプルにつかわれているisAttackというbool値が利用できる.これは攻撃motion中に再度攻撃motionなどを行わないように設定されているが,これによって攻撃中かそうでないかを判定することができる.

よってisAttackがTrueの時のみにダメージを発生させるようにすればよい.また剣のみにダメージを発生させるためには,剣の部分に当たり判定を設けるか,剣メッシュ自身のOverlap判定を使うことで実装できる.したがって,以下のようにノードを組めば課題達成となる.

1日目上級:ビヘイビアツリーを使って敵を賢くしよう

今回のサンプルにはビヘイビアツリーを使って敵AIがあらかじめ実装されている.この課題はこれを用いて,少し細工することで賢く実装しましょうというもの.実は1日目の時点ではこの課題は実装できているかは少々怪しいのだが,今回は敵がAIによって異なった動きをするようにすると解釈して実装した.厳密にはビヘイビアツリーではなくタスクに手を加えたのでその点もクエストクリアかどうかは微妙.

実装内容は,味方が倒れた時に攻撃ではなくあおりmotionをするというもの.

まず敵の攻撃motionに対して味方の攻撃と同じように当たり判定を加え,そして味方にHPシステムを導入し,HPが減少する仕組みを作る.

あとはAIタスクの味方への攻撃タスクにおいて,味方のHPが0以下の時に攻撃ではなくあおりを行うようにのオードを組むことで実装した.
(CharacterProfileはHP計算などに使っている独自実装したコンポーネント)
ローリングのモーションはサンプル同梱のもので,攻撃motionと同じようにAnimationMontage化することによって組み込んだ.

なお実際のクエストクリアはこの後,仲間キャラを実装することによってAIの行動幅を増やすことによって達成している.

というわけで,1日目時点での進捗動画はこちら.Twitterにあげたものの再掲.

コメント

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