『FOAMSTARS』におけるGameplay Ability Systemを利用したキャラクタースキル作成について
こんにちは、トイロジックのプログラマーY.Oと申します。本記事では、『FOAMSTARS』のキャラクタースキル作成に用いられているUE4のフレームワークGameplay Ability Sytemの仕組みの一部と、その利点について解説します。
目次
『FOAMSTARS』とは?
『FOAMSTARS』は4人1組でチームを組み、相手チームと様々なゲームルールで競う3人称視点のアクションシューティングゲームです。プレイヤーは特徴的な個性を持つキャラクターの中から1人選び、試合中に操作します。
キャラクター1人につき基本射撃の他に、プライマリースキル・セカンダリースキル・スーパースタースキルの計3つを扱う事ができ、そのユニークなスキルを駆使して仲間と連携して勝利を目指します!(1人で遊ぶゲームモードもあります。対戦ゲームが苦手でも遊べますね。)
そして『FOAMSTARS』はEpicGames社のゲームエンジン「アンリアルエンジン4(以下UE4)」で作られており、キャラクターのスキル作成にはUE4のフレームワーク「Gameplay Ability Sytem」が用いられています。
こんな感じでキャラクターは射撃とスキルを使う事ができます。
「Gameplay Ability Sytem」について
UE4の公式ドキュメントを読むと何だか難しそうに書かれていますが(実際慣れるまでは要素が多くて難しいです)、マルチプレイに対応したキャラクターのスキル(アビリティ)を実装するために用意された枠組み(フレームワーク)です。
キャラクタークラスにGameplay Ability Sytem
を制御するためのコンポーネント(AbilitySystemComponent)を1つ持たせて、スキル1つを1つのアビリティ(GameplayAbility)として作成・実行します(複数のアビリティで制御する場合もあります)。
GameplayAbilitySystemは「GameplayTag」、「GameplayEffect」、「GameplayCue」、「AttributeSet」などの要素が組み合わさって構成されています。
そしてネットワークゲームには「予測」と「ロールバック」という考え方があり、Gameplay Ability Sytem
にもアビリティを制御する仕組みとして取り入れられています。
Gameplay Ability Sytemにおける「予測」について
各プレイヤーはサーバーにクライアントとして接続してゲームに参加しますが、ボタンを入力してスキルを発動する時、サーバーからのスキル使用許可の通信を待たずにスキルを実行して自由にキャラクターを操作する事ができます。
この時クライアントの世界ではスキルのクールダウンが完了していて、キャラクターが死亡状態ではなく、ダメージで空中に吹き飛ばされていない等スキルを正常に実行できる状態にあります。クライアントはサーバーの世界でも同じように自分の操作するキャラクターがスキルを正常に使用できる状態にあるだろうと予測してサーバーよりも先にスキルを実行します。
そして、サーバーの世界でも同じようにスキルを実行して欲しいので通信を送ります。スキルを予測して実行することにより、クライアントはアクションのレスポンスを損なうことなくゲームプレイを行う事ができます。
※予測の仕組みを使うためにはGameplayAbilityクラスの設定「NetExecutionPolicy」を「Local Predicted」にしておく必要があります
Gameplay Ability Sytemにおける「ロールバック」について
サーバーの世界にクライアントからスキル実行の通信が届く少し前に、別のプレイヤーからの攻撃でスキルを実行したいキャラクターが空中に吹き飛ばされ、スキルを使用できない状態になっているかもしれません。その状態でクライアントからの要求通りにスキルを実行してしまうとゲームのルールを無視することになり、ゲームとして破綻してしまいます。そうならないように、サーバーはスキル実行前にキャラクターが正しくスキルを実行できる状態にあるかチェックします。
もし実行できない状態になっていたらサーバーはクライアントからのスキル実行の要求を拒否してキャンセルし、その事をクライアントに伝える通信を送ります。クライアントはサーバーからスキル実行キャンセルの通信を受けとった後、自分の世界でもスキルの実行をキャンセルし、スキルを実行する前の状態に巻き戻します(ロールバックします)。
まとめ
まとめると、この「予測」と「ロールバック」の仕組みでキャラクターのスキルが制御されているおかげで各クライアントはアクションのレスポンスを損なわずにスキルを実行してキャラクターを動かす事ができ、またサーバーはゲームルールの破綻を未然に防ぐことができています。
Gameplay Ability Sytem
はUEにフレームワークとして用意されているので、どうやってマルチプレイに対応したキャラクターのスキルを実装するべきか迷った時は非常に参考になるのではないでしょうか。
 
© SQUARE ENIX