前書き
TopDownEngineの開発元であるMore Mountainsではいろいろなテンプレートを作成しています。その中でTopDownEngineを購入すると一緒にくっついてくるFEELというツールがあります。このFEELはMMFeedbacksという機能を持っておりこの機能を使うことで今回紹介する攻撃予測範囲を簡単に作成することが出来ます。
TopDownEngineを持っていなくてもFEELを持っている方なら参考になるのでぜひご確認ください。
攻撃予測範囲とは?
アクションゲームでよくある「これから敵がこの地点に攻撃しますよー」っといった赤い円だったり領域のことを今回紹介する内容では指します。以下は参考例になりますが、以下の画像の赤い円の部分を攻撃予測範囲としています。今回はFEELの機能であるFeedbacksを使って作っていこうと思います。
FEELのFeedbacksとは?
本文中で何度もFeedbacksという文字が出てきていますが、そもそもFeedbacksとは?っという話になりますが、まずは以下がUnity上でFeedbacksを設定するインスペクターになります。
MMFeedbacksは、簡単に視覚効果、音響効果、振動などのフィードバックを追加できるツールになっています。特にゲーム内のイベントやアクションに応じた演出を設定するために設計されており、上記参考例のようにフィードバックする内容などがいろいろと準備されていて選択するだけで簡単に設定することが出来ます。
例えば、プレイヤーがダメージを受けたときに画面を揺らす、アイテム取得時に光やサウンドを発生させるなどがインスペクターから設定することが可能です。
#おそらくこの記事を読んでいる方はある程度Feedbacksの使い方を知っている人が多いかなと思うので、FEEL(Feedbakcsについて)の説明はこの程度にしておきます。
攻撃予測範囲を作るためにやること
前置きが長くなりましたが、攻撃予測範囲を作るためにやることとしては以下になります。
- 攻撃予測用の円を用意
- 攻撃のタイミングに合わせてフィードバックをトリガー
- MMFeedbacksに表示制御を追加(ここが一番重要)
簡単に書くと上記になりますが、一番重要なのはMMFeedbacksに表示制御を追加になります。では、それぞれについて説明していこうと思います。
攻撃予測用の円を用意
まずは攻撃予測用の円を用意しましょう。自分はUnityAssetにある円っぽいUIを使って攻撃予測範囲を表示しています。円の形は何でもいいのでお好みで作成してください。
上記の円をPrefabとして保存しておきましょう。
攻撃のタイミングに合わせてフィードバックをトリガー
続いてFeedbacksをいつ発動するかの設定になります。今回はMeleeWeaponを使って設定していますが、MeleeWeapon以外でも各種TopDownEngineが持っているキャラクタアビリティなどにも同じように“Feedbacks”という項目がありそこに今回作成するFeedbacksを設定することで発動タイミングをコントロールできます。
敵が攻撃を”開始した時”に攻撃予測範囲が表示してほしいため今回はWeapon Start MM Feedbackに設定します。
また、攻撃予測範囲を表示してから攻撃を行いたいため、攻撃予測範囲分の待ちを入れる必要があります。後ほどFeedbacksの設定でも待ちの時間を入れる必要がありその時間分以下のDelay Before Useに時間を設定する必要があります。
MeleeWeaponの構成としては以下のような形になっています。基本的にMeleeWeaponの子PrefabにFeedbacksを設定することが多いのですが以下は参考例ですのでお好みで配置してみてください。
MMFeedbacksに表示制御を追加
まずは円の表示ON/OFFをやってみる
まずは簡単に円の表示ON/OFFをやってみましょう。使用するFeedbacksは以下のWeaponStartMMFeedback_Testになります。
やり方としては単純で以下を行います。
- 円を初期状態を非活性状態にする
- Feedbacksで活性状態から非活性状態を設定する
- 活性状態から非活性状態の間に待ちを入れる
円を初期状態を非活性状態にする
Feedbacksが発動した時点で表示したい(常に赤い円は表示したくない)ので初期状態は赤い円(frame_iconframe_circle_00)は以下のように非活性状態にしておきましょう。
Feedbacksで活性状態から非活性状態を設定する
オブジェクトの活性、非活性を設定するにはFeedbacksのGameObjectから設定することが出来ます。
Add new feedback… -> GameObject -> SetActive
上記からFeedbackの項目を追加しましょう。活性と非活性で2つ追加する必要があります。
またFeedbacksは基本的に上から下の順番で実行されます(設定で下から上に実行することも可能です)。そのため、Set Activeの上が活性状態、下が非活性状態で今後設定していきます。順番が逆転してしまうと想定通りに動かないので注意してください。
続けて活性状態に設定する方法です。設定するところは2か所あり、
- Set Active Targetでどのオブジェクトを活性にするのかを設定することが出来ます。今回表示する赤い円のオブジェクトをアタッチしましょう。
- Set State On Playでどのタイミングで活性にするのかを設定することが出来ます。Feedbacksが実行された時に活性状態にしたいのでSet State On Playにチェックを入れて、State On Play をActiveにしましょう。
続けて非活性状態に設定する方法です。活性状態とほぼほぼ同じです。
- Set Active Targetでどのオブジェクトを非活性にするのかを設定することが出来ます。今回表示する赤い円のオブジェクトをアタッチしましょう。
- Set State On Playでどのタイミングで非活性にするのかを設定することが出来ます。Feedbacksが実行された時に活性状態にしたいのでSet State On Playにチェックを入れて、State On Play をInactiveにしましょう。
この状態で動かしてみても待ちも何もないので活性→非活性が一瞬で終わってしまい正しく動いているかどうかが確認できません。そのためSet Activeに待ちを入れる必要があります。
活性状態から非活性状態の間に待ちを入れる
Feedbacksの実行に待ちを設定するにはPauseから設定することが出来ます。
Add new feedback… -> Pause -> Pause
Pauseを追加するとPause項目の中にPause Durationがあるためここで処理を止めたい時間を設定します。この時間は最初の方に説明したMeleeWeaponのDelay Before Useとの兼ね合いで決まるためうまく調整して設定しましょう。
今回の例ではDelay Before Use=2.5sec、Pause Duration=2.0secにしています。
設定は以上になります。作成したFeedbacksは忘れずにMeleeWeaponのWeapon Start MM Feedbackに設定しておきましょう。
動作確認
先ほど作ったFeedbacksの動きを見てみましょう。動画の動きになりますが、
- 攻撃が開始されると一瞬で一番上のSet Activeが実行される
- 赤い円が表示される
- Pauseが2秒間実行されて赤い円が表示し続ける。
- Pause下の白いバーが処理の実行時間になります
- Pause終了後、一番下のSet Activeが実行される
- 赤い円が非表示になる
といった具合で動いています。
動画にはないですがこの後に敵キャラが攻撃するようになっています。
どうでしょう?皆さん想定通り動いているでしょうか?もしも動いていないのでしたら
- MeleeWeaponのDelay Before UseとFeedbacksのPauseの時間の兼ね合いが間違っている
- MeleeWeaponのWeapon Start MM Feedbackに今回作成したFeedbacksが設定されてない
- 赤い円のオブジェクトの活性、非活性の設定が抜けている
が考えられるかなと思います。
前提としてAI BrainでMeleeWeaponの攻撃ができることがありますので、そもそも攻撃をしていないとなるとAI Brainの設定から見直しが必要かなと思います。以下に敵キャラが攻撃する設定をまとめた記事がありますのでこちらもご確認ください。
まとめ
今回は、FEELのFeedbacksを活用して攻撃予測範囲を作成する方法について解説しました。攻撃の予兆をわかりやすく演出することで、プレイヤーに攻撃タイミングの駆け引きを生む重要な要素になるかなと思います。
主な流れとしては以下の3つになります:
- 攻撃予測用の円を用意する
- 赤い円のPrefabを用意し、非活性状態で設定しておきます。
- 攻撃タイミングに合わせてFeedbacksをトリガーする
- MeleeWeaponのWeapon Start MM Feedbackを活用し、攻撃開始時に予測範囲を表示させます。
- Feedbacksでタイミング調整を行い、Pauseを使用して予測円を一定時間表示します。
- Feedbacksに表示制御を追加する
- Set Activeを使ってオブジェクトの活性/非活性を制御し、Pauseで待機時間を設定することで正確なタイミングを実現します。
今回の記事を参考に、ぜひご自身のゲーム開発に活用してみてください!
コメント