GAS で3連コンボを作った時のメモ

2年くらい前にコンボを作るために GAS を使ったのだが、やり方を忘れてしまったので復習した時のメモ。


タグ構成

  • Attack – Activate する時に渡すタグ。現状、攻撃ボタンは1つにしている。
  • Attack.AcceptInput – コンボの入力受付。Montage Notify Window で付与している。理由はコンボ入力受付を締め切りたいから。
  • Attack.Combo1 – コンボ初段
  • Attack.Combo2 – コンボ二段目
  • Attack.Combo3 – コンボ三段目
  • Attack.ToNextCombo – コンボの次の攻撃に移行する。Montage Notify で付与している。移行させたいフレームを指定するだけなので、Window にする必要はない。

構成

各 Gameplay Ability のクラスは以下の通り。

Combo1Combo2Combo3
AssetTagsAttackAttackAttack
Activation Owned TagsAttack.Combo1Attack.Combo2Attack.Combo3
Activation Required Tags(Empty)Attack.AcceptInput
Attack.Combo1
Attack.AcceptInput
Attack.Combo2
Activation Blocked TagsAttack.Combo1
Attack.Combo2
Attack.Combo3
(Empty)(Empty)
Activation Blocked Tags = これらのタグが付いている間は、この Ability のタグを追加しない、と理解している

期待するコンボ遷移

実行している様子

画面に Gameplay Tag の情報を表示したり、実行速度を遅くする方法は後述する。

コンボのベースクラス

コンボのベースクラスとなる、Gameplay Ability を継承したクラス。各コンボのためのクラスはこれを継承して作る。派生クラスの方に重複した処理を書きたくないため、このクラスにすべての処理を集中させている。Wait Gameplay Tag Add to Actor ノードの引数 Only Trigger Once にチェックを入れることに注意。これにチェックを入れなかったためにかなり調べることになった。これにチェックが入っていない場合は、コンボの2段目が2回実行されてしまう。
コンボの一段目かどうかを判定する関数。今回のコンボではこれでよいが、作り方によって一段目かどうかの判定条件は変わる。Gameplay Ability に設定値としてフラグを持たせてもよいと思うが、設定をミスしそうなので関数にした。
Gameplay Tag をつけたりはずしたりする関数。いろいろな記事では Loose Gameplay Tag を使っているが、Gameplay Tag で構わない。Gameplay Tag と Loose Gameplay Tag で何が違うのかは、調べたがわからなかった。

工夫: Tag の情報を画面に出力する

現在の Gameplay Tag の状況をリアルタイムで画面に表示する関数。GAS をアクティベートするアクタの Tick から呼び出す。ポイントとなる点は赤い角丸で囲っている。Ability System -> Get Owned Gameplay Tags -> Get Debug String from Gameplay Tag Container でも大まかな情報を文字列で取得できるが、それでは情報が足りないと思ったので作った。

工夫: 実行を遅くしてよく観察する

Console Command の slomo コマンド、もしくは Set Global Time Dilation ノードを実行して処理を遅くし、挙動をよく観察する。


参考資料: GAS の基本的な仕組み

GAS の基本的な仕組み(実行・入力受付可否の切り替え・次のアニメーションへの移行を待つ)は以下の記事を参照した。


攻撃判定のためのカスタム アニメーション通知を受け取る

攻撃判定の通知を受けて攻撃処理を実行するために使う。カスタムアニメーション通知から Blueprint Interface を通じてオーナーアクタにカスタム通知を送る方法について書かれている。GAS を使っている時は Gameplay Ability Blueprint からモンタージュを再生しているため、タグをアクティベートしたアクタで直接アニメーション通知を受け取ることができない。その問題を解決する。

コメントする

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


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。