「アンリアルクエスト5 ~剣を使って敵を倒そう!~」1日目を振り返る
はじめに。
エピック ゲームズ ジャパンが主催するUnreal Engineの公式大型イベント
「UNREAL FEST 2023 TOKYO」
でのユーザー参加型イベント
に挑戦しました。
アンリアルクエストは過去4回ほど開催されていて、当時の自分では
「BluePrintってよくわからないし……」
UnrealEngineを業務で使ってるのにだめですねこれは。
と、参加せずにいました。
が、今の自分はゲームを作りたいという思いがあるため、この手のイベントにも積極的に参加せねば!
と挑戦。
アンリアルクエストって何?って方も多いので書くと
イベントの一週間のうち5日間、毎日ゲーム制作に関するクエスト(課題)が発表されます。
初級・中級・上級の 3 段階、クエストを解いていくことで 1 つのゲームが完成します。
完成したゲーム(っぽいもの)を動画にとって応募!という、BluePrint初心者にとってはなかなかハードなものでした。
アンリアルクエスト5は2023/05/22~2023/05/28の一週間で行われました。
動画は選考サれてですが、6月2日(金)、6月3日(土)の「UNREAL FEST 2023 TOKYO」で紹介されるようです。
まあつらつらと書いてますが、ここでは初心者の自分がどんなノードを繋いでゲーム(っぽいもの)を作っていったのか、備忘録を忘れないうちに書いていこうと思います。多分とろとろと書く。と思う。
あくまで自分用の備忘録扱いなので、全くわからない人が最初に見てもちんぷんかんぷんだと思いますのであしからず。
1日目の自分はどこまでできたのか。
#アンリアルクエスト 5 1日目
— 敷本ホノ (@4kimo10hono) May 22, 2023
敵を倒した後ラグドールにしてヘニャる処理まで追加!ということは中級行けた?
ただ、剣でダメージを与えた際にヒットストップをSetGlobalTimeDilationで入れると、既に倒した敵も吹っ飛んでいく!!Delayとかが悪さしてる??誰か助けてwヒットストップは外すか…… pic.twitter.com/CiP5UhaXqW
中級までできたようです。ヒットストップは後にちょっとだけいい感じになりましたがこの段階では断念。なんでこんなに跳ねるの……
剣での攻撃を実装
参考文献
プレイヤーや敵のベースとなるものや攻撃モーションなどは既にヒストリアさんが用意してくれていたので(太っ腹!)意外とスムーズに行けました。

剣のブループリントを用意して剣の刃部分にコリジョン追加。
敵キャラに「Enemy」というタグを追加して、このタグを持つActorは全て敵とみなし、BaseDamageを変数化したもので武器ダメージを後から自由に設定。
ただ、これだと振らなくてもただ持ってる剣が重なるだけでダメージを与えてしまいますね。多分。

カスタムイベントを2つ追加。
刃に付けたコリジョンをOverlapAllにするものと、
NoCollision、つまりコリジョンを消す2つのイベント。
これをどこから呼び出すかと言うと
AnimNotifyStateを作成し、関数を作って呼び出せるようにします。

左のFunctionと+マークの間ぐらいに重ねると現れるOverrideから
Received_notifyBeginを作成しキャラBP経由で呼び出す

Received_notifyEndも作って同様に。
CastToはあまり使っちゃいけないらしいが、ガチのゲーム制作でもないし知識も足りてないので大目に見てください。
で、これはどこで使うかと言うと

AnimationMontage!
AnimationSequenceから作られていました(たしかもう既に。)

Notifies欄の1に入っているのがさっき作ったAnimNotifyStateです。
欄を右クリックからAddNotifyStateで追加。
左端がReceived_notifyBegin、右端がReceived_notifyBeginに対応。
これを剣で攻撃してるだろうな~って間は伸ばして切り終わったなってタイミングで終わりに。
これで斬ってる間はダメージを与えられる感じになったはず。
じゃあ敵はどうやってダメージを受け取るのか?
敵がダメージを受ける処理を実装。

敵のBPのイベントグラフに移動、HPという変数をFloat型で作成し、ダメージを受けるたびに武器BPで設定した値がHPの数値から減り、減った数値が新しくHPとしてセット。そのHPが0になったかどうかでBranchで処理を分けています。(MAXのおかげで多分0より下にはならないとは思うんだけど?)

False側なのでHP>0、まだ敵が生きています。
ダメージを受けたらヒットモーションを再生して動きを止める。

True側はHP≦0つまり0以下で倒されたということなので
敵キャラのメッシュはラグドール化でぐにゃりと。
ここらへんは過去のアンリアルクエストでも紹介されていました。
事前にやっててよかった過去アンリアルクエスト。
カプセルコンポーネントも残ってると邪魔なのでNoCollisionに。Delayで3秒間待ったら、消す。
このぐにゃっとなるのを中級:敵に死亡演出をつけよう!扱いにしたので
これで
初級:敵を倒せるようにしよう!
中級:敵に死亡演出をつけよう!
が達成できたかな?と思います。
ビヘイビアツリーは1日目ではこのツイートの後2時間ぐらい格闘したようですがうまく行っておらず
#アンリアルクエスト
— 敷本ホノ (@4kimo10hono) May 22, 2023
1日目上級で、パトロールからのキャラの追跡をやろうと思ったけどうまく行かない……こんな時間だから寝よう
何故次の日だったかな?うまく行ったか自分でもわからないので、詳細は書けないと思います……
とりあえず1日目はここまで。
2日目移行も気が向いたらまた書きます。
ではまた。