この記事は、「アンリアルクエスト5に挑戦!  初級・中級解説編」の続きです。初級・中級の解説を見たい方はリンクより前記事を参照してみてください。

3日目上級クエスト「必殺技を入れよう」

3日目上級クエストは「必殺技を入れよう」でした。今回のアンリアルクエスト5はアセットが非常に充実していて、必殺技のアニメーションに使えそうなアセット(AS_SpinSlash)も入っているんですよね。今回はこれを使って必殺技を実装していきたいと思います。

なお、前回同様ですが分かりやすさを優先する為、アンリアルクエスト5用のプロジェクトを一旦リセットした状態(プロジェクトデータの配布状態)からの実装を前提に解説していきます。

必殺技の仕様を決めよう!

初級・中級クエストでも前転させたり、連続攻撃させたりしてきたので、必殺技ボタンを押したらAS_SpinSlashを再生するだけで必殺技が完成って感じですが、それだと物足りないので、今回は以下のような仕様で必殺技を実装することにしました。

  • 攻撃ボタンの長押しでチャージ
  • 3秒以上チャージで必殺技が発動
  • 必殺技の時は剣からエフェクトがでる

EnhancedInputを使ってみよう

UE5ではユーザーからの入力はEnhancedInputという仕組みを使うことが推奨されています。アンリアルクエスト5のプロジェクトでも既に使われていますので、今の攻撃ボタンの処理をちょっと変えてみてチャージの仕組みを作ってみましょう。

/Input/Actions/IA_Attackを開きます。今回はここに長押しを実装していきます。

“Triggers”にあるプラスボタンをクリックし、一覧から”Hold And Release”を選択します。インデックス[0]に横にある三角形をクリックして、”Hold Time Threshold”に”3″と入力してください。これは、攻撃ボタンは3秒以上長押しすることでイベントを発動するような設定という意味になります。

次にプレイヤーのBP(BP_UQ5_Player)を開き、攻撃処理の入力イベントがStartedピンから出ている部分を、Canceledピンから線が出るように修正します。

Canceledと言われると違和感がありますが、IA_Attackを”Hold And Release”に変更した為、本来であれば3秒以上ボタンを押してから離さないとボタンイベントが発動しなくなってしまいました。逆に3秒以下でボタンを離した場合はCanceledが呼ばれるようになったということです。

つまり、通常の攻撃でボタンを長押しすることは無いのでCanceledがコールされ、これが普通の攻撃モーションとなるワケです。(いままではボタンを押した瞬間に攻撃モーションが実行されていましたが、今回は長押しを考慮して、ボタンを離した瞬間に攻撃モーションが実行されるようになりました)

このように、ボタンイベントに対して様々な機能が付与できる点がEnhancedInputの良い所になりますので、興味がある方は公式ドキュメントや他のサイトも参考にしてみてください。

私のオススメはキシロラボ様のEnhancedInputの記事(https://japanese-rooster.com/game-63)になります。

必殺技アニメーション

/Characters/Mannequis/Animations/UQ5/AS_SpinSlashからAnimMontageを作成します。名前は”AM_SpinSlash”としました。

先ほど修正したプレイヤーのBPに戻って、攻撃ボタンのTriggeredからモンタージュの再生にピンを繋ぎます。もちろん再生するモンタージュは今作ったばかりの”AM_SpinSlash”ですね。

これで攻撃ボタンを3秒以上押してから離すと必殺技が放たれるようになりました。

必殺技の時だけ剣が光ったらカッコいいよね!

なんと、アンリアルクエストのプロジェクトファイルには剣の軌跡を光らせるエフェクトが入っているので、それも適用してみましょう。

プレイヤーのBPを開いて、コンポーネント内のBladeMeshに子コンポーネントとして”Niagara Particle System Component”を追加します。右側の詳細パネルのNiagara配下にある”Niagara System Asset”で”NS_BradeTrail”を選択してください。

このままだと、剣の柄の部分からエフェクトが表示されてしまうので、”Niagara Particle System Component”の座標を少しだけ調整します。(私はX:0 Y:0 Z:70にしました)

これでゲームをプレイしてみると剣の軌跡が光るようになりますが、必殺技の時だけ光って欲しいので、詳細パネルのレンダリング配下のVisibleのチェックを外しておきましょう。

そして、必殺技のアニメーション時のみ剣の軌跡を表示するようにBP側でNiagaraの表示を制御します。ロジックはこんな感じですね。

これで必殺技完成です!!

あ、あれ?なんかチャージしてる感じが無くて、動画をみているだけだとショボい感じがします。

ちょっと仕様を追加してみて、0.2秒以上ボタンをホールドしたら溜めアニメーションを再生し、3秒以上溜めたら必殺技がでるようにしてみましょう

溜めアニメーションの作成

まずは溜めアニメーションを作成しましょう。先ほど作成した”AM_SpinSlash”を複製し、”AM_SpinSlashCharge”を作成し編集してみましょう。

アニメーションを一時停止して、画面中央下部のタイムラインの赤いスライダーを動かしながら、チャージしていそうなアニメーションになる位置を選択し、”モンタージュ(DefaultGroup)”という行と交わる部分で右クリックから「新しいモンタージュセクション」を選択します。

セクション名の入力を促されるので、「Charging」とします。

更に同じ場所で改めて「新しいモンタージュセクション」を作ります。こちらの名前は「ChargingLoop」としました。最終的には以下のようになっているはずです。

画面右下に「モンタージュセクション」というタブがあるので(アセットブラウザタブが選択されていて見えていない場合がありますので、その場合は「モンタージュセクション」タブをクリックしてください)その中を確認すると、プレビューというボタンの横に”Default”->”Charging”->”ChargingLoop”という並びが確認できると思います。

この並び順の”Charging”と”ChargingLoop”の間の”矢印”をクリックし、表示された一覧の中から”Charging”を選択してください。

これでアニメーションを再生してみると、チャージしているようなアニメーションになるかと思います。

上記で追加したモンタージュセクションをドラッグしたりしながら、見栄えの良いアニメーションになるように調整してみても面白いかもしれません。これで溜めアニメーションの完成です。

溜めアニメーションの再生

EnhancedInputには”Ongoing”というピンが存在しています。これはボタンのトリガー毎に意味は異なりますが、基本的には「ボタンを押している」時にTickのように呼び出されるイベントです。

さらにIA_Attackノードの下段にある下三角をクリックすると”Elapsed Seconds”というピンがあり、これが「ボタンを押している時間」となります。

これらを組み合わせるとチャージ中のアニメーションの実行がうまく実装できそうなので、プレイヤーのBPに対して以下のようなロジックを追加してみました。(Ongoingピンから出ているロジックの部分です)

これでプレイしてみると、必殺技の前に溜めアニメーションが再生されます。

上記の解説では分かりやすさを優先する為にDoOnceノードのResetピンを接続していないので、一度しか溜めが発生しません。通常攻撃や必殺技が出し終わったら再び溜めアニメーションが再生されるようにDoOnceを解除しないといけないので、その修正をした結果が以下の通りとなります。(通常攻撃のモンタージュ再生の”OnInterupted”ピンからも”IsAttack”のフラグ更新処理を呼び出している点に注意してください)

細かいことを言えば、必殺技のアニメーションモンタージュは溜め動作後の状態から再生しないとダメなのですが、動き的には問題なさそうなのでこれでOKとしちゃいます。ということで、完成形はこちら。

これで、3日目の上級クエストクリアです!EnhancedInputさえ使いこなせれば簡単なクエストだったと思います。チャージ中に力を貯めているアニメーションなんかを適用しても面白いかもしれませんので、是非挑戦してみてください。

そのまま5日目の上級クエストに挑戦

5日目の上級クエストは「こだわりのヒットストップを作ろう」でした。これは敵に攻撃が当たった瞬間に時間が止まるような演出を入れて、攻撃に重みを付ける演出になります。

今回の解説ではアンリアルクエスト5のプロジェクトを一旦リセットした状態で解説していますので、敵の当たり判定を入れたりするとヒットストップ処理の解説がボケてしまうので、必殺技が出たらスローモーションにして、それっぽい演出にしてみようと思います。(敵に攻撃があたった場合の解説は初級・中級解説編で説明しているので、そちらの解説と併せて理解して頂ければと思います)

スローモーションの実装は簡単

UE5でのスローモーションの実装はとても簡単です。”SetGlobalTimeDilation”というノードに再生スピードの比率を指定するだけでゲーム全体のスピードを変更することができます。

試しに必殺技のアニメーションの前にスピードを0.1にして、必殺技のアニメーション後に元に戻すようにしてみます。

で、プレイしてみると。

既にカッコいい!!スローモーションって演出だけでカッコいいですね。

余談ですが、”SetGlobalTimeDilation”ノードはゲーム全体のスピードを変更してしまう為、「俺TUEEE」(敵だけがスローモーションになって、プレイヤーが普通に動き回る)に使うことはできません。この場合は、”SetCustomTimeDilation”ノードを使うことで特定のActorのスピードを変更することが可能です。

これで完成でも良いのですが、解説がこれだけだと少し寂しいので3D人 -3dnchu- さんが無償で公開されている”Stylized Post Process for Unreal Engine 5″を使って演出を追加してみようと思います。(気に入ったらGumroad経由で応援の意味を込めての購入も可能です)

3D人 -3dnchu- 様 Stylized Post Process for Unreal Engine 5

ポストプロセスマテリアルで演出を追加してみよう

上記サイトから”Stylized Post Process for Unreal Engine 5″を入手し、プロジェクトを開きます。(初回はすごく時間が掛かるかもしれません)

プロジェクトが開いたら/3Dnchu/Materials/PPInstances/MI_PP_Hatching_Sample03を右クリックして”アセットアクション”→”移行”を選択します。

アセットレポートというダイアログが表示されるので、全てにチェックが入った状態のまま「OK」ボタンをクリックします。

フォルダ選択ダイアログが開くので、アンリアルクエスト5プロジェクト内のContentsフォルダを指定してください。

これでアンリアルクエスト5プロジェクトにポストプロセスマテリアルが取り込まれました。

再びアンリアルクエスト5のプロジェクトに戻り、プレイヤーBPのコンポーネントから”FollowCamera”を選択し、詳細パネル内の”ポストプロセス”→”Rendering Features”→”ポストプロセスマテリアル”にある”Array”のプラスボタンをクリックし”選択”をクリック後に”アセットリファレンス”を選択してください。

するとドロップダウンが表示されるので、先ほど取り込んだ”MI_PP_Hatching_Sample03″を選択してください。

この状態だと必殺技以外でもポストプロセスマテリアルが反映されてしまうので、一旦ポストプロセス自体を無効にして、必殺技の時だけ有効にしてみたいと思います。

“FollowCamera”の詳細パネルに”PostProsessBlendWeight”という項目があるので、そこに”0″を入力します。これでこのカメラに対してのポストプロセスが全て無効になります。

更にカスタムイベントを作り、カメラのポストプロセスの有効・無効を切り替える処理を実装します。今回は必殺技の時だけポストプロセスを有効にするのでカスタムイベント名は”UsePPMSpecialAttack”と”UnusePPMSpecialAttack”としました。

最後に必殺技を出す前に”UsePPMSpecialAttack”を呼び出して、必殺技が終わったら”UnusePPMSpecialAttack”を呼び出します。

プレイしてみて、必殺技を出してみてください。

必殺技の時だけ手書き調のゲーム画面になりました。

これでアンリアルクエスト5の3日目と5日目の上級編クリアです。

4日目の上級編のクエストである「敵のバリエーションを作ろう」については様々な回答方法がありますので、解説を見送らせて頂きます。(敵のBPを継承して別の敵を作ったり、異なるビヘイビアツリーを用意して動きが異なる敵キャラクターに仕立て上げればOKだと思いますので、今までの解説編を組み合わせることで、敵のバリエーションを作ることは可能だと思います。)

これでアンリアルクエスト5の全ての解説を終了させて頂きます。私自身もアンリアルクエストで育ったので、この記事が今からアンリアルエンジンを始める方や、分からなくて詰まってしまった人の助けになればと思います。

No responses yet

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です