9 Monkeys of Shaolin のデベロッパー、Sobaka Studio 氏が納得のいく戦闘システムの作成方法について語る

Sobaka Studio の創設者 Dmitry Kachkov 氏
Sobaka Studio のトップ Dmitry Kachkov 氏は、ロシアのバルチースクで生まれました。Kachkov 氏は、IT の学位を取得して大学を卒業した後、SmashCarsHamsterBall for PS3、Frontline Commando など様々なゲームの開発に携わりました。Creat Studio、Sperasoft、Glu Mobile などのビデオ ゲーム会社の勤務を経て、2016 年に Sobaka Studio を立ち上げました。デベロッパーとして最初に手がけたタイトルは、ビートゼムアップ シューティング ゲームの Redeemer でした。最初のタイトルの成功に続いて、Dimitry Kachkov 氏とそのチームは、2020 年秋にカンフー映画スタイルのビートゼムアップ ゲーム 9 Monkeys of Shaolin をリリースしました。
皆さん、こんにちは。Sobaka Studio の創設者 Dmitry Kachkov です。少数精鋭の Sobaka Studio チームは、5 年以上の期間を費やして、ビートゼムアップのインディーズ ゲームを開発してきました。このジャンルのゲームプレイは、多くの場合、ゲームの戦闘システムと深く結び付いています。多くの方がお気づきのように、代表的なビートゼムアップ ゲームでは、プロットや環境よりも、興味深く、バラエティに富み、そして迅速な戦闘の方がプレイヤーの心を掴みます。

このことは、Sobaka Studio のゲーム、Redeemer やさらに最近では 9 Monkeys of Shaolin にも当てはまります。この 2 つのゲームでは、優れた戦闘システムを批評家から高く評価されました。私は、このスタイルの戦闘システムを “真に迫る” 戦闘と定義しています。それでは、真に迫る戦闘とはどのようなものを指すのか、どのようにしてゲームでこれを実現するのかをについて定義していきたいと思います。

Redeemer では、屈強な僧侶バシーリが素手で敵を遠くまで投げとばすシーンがたくさんあります。また、9 Monkeys of Shaolin では、メイン キャラクターが棒術で多数の敵と戦い、ゲーム内のスキルアップ システムで戦闘能力を高めていきます。

両作のこのバイオレンス満載の "真に迫る" 戦闘感覚は、当チームが開発したコンボ攻撃によって実現されています。では、Sobaka Studio チームが Unreal Engine を使ってこのような真に迫る攻撃をどのように実現したかを見ていきましょう。
 


コンボ攻撃コンポーネントの設定

“コンボ攻撃'' コンポーネントは、最初は、攻撃/ヒット アニメーションを再生します。ただし、再生アニメーションの開始時に、依然としてその後に続く多くの追加条件、イベント、トリガーがある場合があります。こういった要素こそ、戦闘の真に迫る感覚を実現するために欠かせない要素です。チームはこの要素の開発に長い間取り組み、現在では、大きなシステムに成長し、膨大な量の追加設定を活用しています。現在では、オプションを 1 ~ 2 個調整するだけで、"汎用的な" アニメーション再生を一連の複合アクションに変換きるようになりました。

内部関数の説明に進む前に、UObject サブクラスでの各コンボ攻撃の設定方法を確認しましょう。
コンボ攻撃の調整例
コンボ攻撃を作成するために使用する設定は、次の複数のカテゴリに分類できます。
  • [Animation (アニメーション)]:キャラクターおよび武器アニメーション。
  • [Design (設計)]:これは、ダメージ、クリティカル ヒット チャンス、出血ダメージ、攻撃をブロックするチャンスなどのゲームプレイの設定です。また、進行中にプレイヤーが取得する攻撃の統計モディファイアのリストも保持しています。
  • [Attack (攻撃)]:有効ヒット半径、ヒット トレースを担うボーンの名前、敵までの距離 (キャラクターが攻撃を開始するには敵からどのくらいの距離にいる必要があるかなど) といった攻撃シーケンスおよび攻撃アニメーションに関連する設定です。これらの設定の調整内容はアニメーター次第です。
  • [Charged hit (チャージ ヒット)]:これは強力なヒット (プレイヤーがヒット ボタンを数秒間長押しして攻撃を実行する場合など) 向けの設定です。例えば、チャージ中にどのような特殊効果を再生するか、このヒットがチャージされた場合にどのヒットを使用するかを決定します。
  • [Combo (コンボ)]:攻撃アニメーションが再生されている間、プレイヤーがボタンを押し続けた場合に、現在のコンボを継続できる攻撃です。
  • [Hit (ヒット)]:この設定は、攻撃が成功した場合に敵が受けるダメージのレベルと、再生されるヒット アニメーションを定義します。つまり、この設定には、煙や火などのエフェクトのパーティクル設定、オーディオ ファイル、敵の点滅状態、カメラの揺れ、フリーズ、ヒットを受けた後の敵のリアクション (ダウンタイムのアニメーション) を記述したブループリントのリンクが格納されています。当チームのケースでは、この設定は、敵が地面に横たわっている期間などに該当します。
 

攻撃アニメーション

当チームはアニメーション通知 (以降、単に通知という) を広く活用しています。通知は、ゲームプレイ、ビジュアル、サウンドの変更などを調整したり、バランスを取ったりするためのものです。まずは、基本的なゲームプレイ通知から確認しましょう。基本的なゲームプレイ通知を使用すれば、ゲーム設計者もアニメーターも華麗なゲームプレイの 1 つ 1 つのディテールに至るまで設定することができます。

ダッシュ通知

攻撃中、プレイヤーは敵に向かってダッシュすることができます。この通知は、3 つのステージ、つまり、開始アニメーション、敵に向かっての移動、そしてストライクで示されます。敵がプレイヤーのそばにいる場合は、移動ステージが非常に短いか、あるいは存在しなくなります (プレイヤーがボタンを押して、キャラクターが敵をストライクしたなど)。そのシーケンスで敵が少し離れたところにいる場合は、開始アニメーションを再生して、アニメーションを一時停止し、プレイヤーを敵の方へ移動させ、アニメーションの一時停止を解除して、ストライクを再生します。アニメーションの一時停止/一時停止を解除するには、通知を使用します。これにより、プレイヤーと敵との距離を手動で計算する必要がなくなり、アニメーターがその作業から解放されます。

このことを考慮して、当チームはアニメーションを一時停止する必要のあるポイントに正確に通知を設定します。これは、まずダッシュして敵に到達するチャンスをプレイヤーに与えるために必要です。これらの通知のポイントは、キャラクターが長時間ハングしないように計算されます。にもかかわらず、この処理が有効になるまでプレイヤーは少しの間ハングした状態になります。ダッシュは、プレイヤーの最高速度の基本的な乗算と、ダッシュの目的ポイント (例えば、オートエイムされたターゲット) への方向への力のプッシュによってコンポーネント内で実現されます。
 

ヒットゾーン通知

攻撃アニメーションの特定の時点で、AOEAttackState 状態がオンになります。AOE は、範囲効果 (Area of Effect) の略です。AOE 状態では、敵にヒットしたかどうかを判断するために、武器のヒット ゾーンのほぼ内側 (このサイズを大きく上回ることもある) をレイ トレーシングしたヒットの計算が有効になります。    

AOEAttackState は敵へのヒットを登録するだけでなく、特別な個別の StrikeHit アニメーション通知も行います。この通知が有効になっていると、特定半径内のプレイヤー キャラクターの前にいる敵が強制的にダメージを受けます。すべてのヒット設定 (AOE 状態でのトレースや strikeHit の作動中のヒット ゾーンなど) は、現在のコンボ攻撃のブループリントに格納されます。ここで設計者は、様々なストライクのヒットを微調整できます。
 

次の攻撃通知への切り替え

ヒット アニメーションの間、ShortTick アニメーション通知 (インスタント ヒット) を表示することができます。ShortTick 通知がトリガーされると、現在の攻撃の開始時に攻撃ボタンが押されているかどうかが確認されます。押されている場合、この攻撃は次の攻撃に続きます。これはコンボ攻撃ブループリントでも設定されています。つまり、この攻撃のブループリントには、ShortTick の作動時にヒット ボタンの 1 つが押された場合に限りトリガーする他の攻撃のブループリントへのリンクが含まれています。なお、ShortTick はコンボのタイミングを微調整するために複数回設定できます。
 

キャンセル通知

キャンセル通知は攻撃アニメーションのセットアップを完了します。この通知グループは、新しいイベントが発生した場合にアニメーションをキャンセルできる場所を設定します。このようなイベントは、プレイヤーが移動ボタンを押したり、ダメージを受けたりした場合にトリガーされることがあります。例えば、スーパー ヒットがアクティブになっている場合、弱い敵はスーパー ヒットを攻撃で遮ることができません。ただし、アクティブなフェーズが終了し、キャラクターのモデルの美しいアニメーションが終了した瞬間に、受けたダメージにより、攻撃のアニメーションが中断され、代わりにヒット アニメーションが開始されます。
 

チャージ攻撃の通知

ゲーム内のほとんどの戦闘技には “チャージ” バージョンがあります (攻撃ボタンを長押しすると、キャラクターが強化された攻撃を行い、より多くのダメージを与えることができます)。このゲームのヒットは高速で、むしろ素早く実行する必要がありますが、攻撃ボタンを長押しすることで “チャージ” 攻撃を実行することができます。そこで、プレイヤーを受動的なチャージ状態にしないために、プレイヤーが攻撃ボタンを押しているときに起動するアニメーションの速度を低下させるカーブを作成しました。その場合、アニメーションの速度が低下し、必要なチャージ量が蓄積されると特殊なビジュアル エフェクトが表示され、ヒットでは 2 倍のダメージを与えることができます。
この画像は SFX 通知および VFX 通知を示します。

その他の通知

前述のゲームプレイ通知の他に、攻撃のサウンドとビジュアルのコンポーネントを担う通知もあります。これらの通知で全体像が完成します。
 
1 つの攻撃だけでも、一連のサウンド エフェクトが含まれています。例えば、武器のストローク、プレイヤーの足音、攻撃の爆音、攻撃後のプレイヤーの着地音等の多くのエフェクトです。当チームのゲームのすべての単一のキャラクターは同じ人型のスケルトンを備えているため、多くのキャラクターが同じ攻撃アニメーションを持つ可能性があります。ただし、サウンドとエフェクトの異なるセットで、攻撃の印象を大幅に変えることができます。
 

ヒット リアクション

敵へのヒットが検出された場合は、プレイヤーにフィードバックを与えるリアクションが必要です。通常、フィードバックは強力であるほど適切であるとされています。ただし、同時に、リアクションは設計者にとって管理しやすいものでなければなりません。
各コンボ攻撃には、ヒット時のリアクションを記述したブループリントが含まれています。
下のスクリーンショットでは、敵が軽装備、中装備、重装備の 3 タイプに分かれていることがわかります。そのため、異なる敵が使用する同じヒットに対して、異なるリアクションを設定することができます。
これはすぐに解決につながる方法ではありませんでした。最初は、チームでは各敵のブループリントでのヒットとそのヒットに対するリアクションの関連性を設定しようとしました。しかしながら、その場合、数百にもなることのある攻撃のクラスをすべて列挙しなければなりませんでした。これには時間がかかり、エラーにつながる可能性もあります。
 
その後、チームはヒット リアクションで敵のクラスを設定しようとしました。ただし、これには先程とは正反対の問題がありました。各ヒット リアクションに多くの敵を列挙すると同時に、新しいクラスを作成する際にそれらのクラスを忘れずに追加する必要があるのです。

このようなリンクを作成するプロセスを簡素化するため、敵を、軽装備、中装備、重装備、特殊装備の 4 タイプに分けました。特殊装備の敵は特殊な方法でヒットを処理し、通常の敵は、そのタイプに基づいて、アニメーションとその設定を選択します。それに関しては、リアクション アニメーションは持続時間が異なるだけでなく、敵の動きのブロックや攻撃に対する反撃によっても異なります。例えば、重装備の敵はヒット アニメーションを再生することができますが、この敵が攻撃を決定するといつでもこのアニメーションを中断することができます。以下のギャラリーの 3 つの GIF をスクロールしてみてください。

スペクタキュラリティとフィードバック

プレイヤーの印象をより鮮明にするための補助的なエフェクトがいくつかあります。
  • カメラの揺れ。敵に対するヒットとプレイヤーに対するヒットの両方にカメラの揺れを割り当てることができます。ほとんどの場合、揺れはほとんど目立たない程度のものですが、プレイヤーに対して本当に強力なヒットであると判断した瞬間には、より強く揺らすことができます。
  • パーティクル エフェクト。チームにとって、多種多様なエフェクトは重要です。ヒット エフェクト (棒攻撃、突風、気エネルギー) 以外にも、敵にヒットするエフェクトを複数設定しました。このゲームのケースでは、敵がダメージを受けた瞬間や、ヒットを受けた後に敵が死亡する時など、重要度の高いものに様々なヒット タイプを割り当てることに意味がありました。多くの場合、ゲームをより派手に演出するために、意図して複数の設定を誇張しています。
  • マイクロフリーズ。パーティクル エフェクトやカメラの揺れに加えて、マイクロフリーズはこのゲームの戦闘システムの非常に重要な部分です。実際、マイクロフリーズは多数のトップ スラッシュ (上強攻撃) で使用されています。マイクロフリーズとは、キャラクターと敵のアニメーションが停止する短い時間のことを指します。これは、各ヒットに追加の重みを付与します。もちろん、各ヒットに、慎重に計算されたこのエフェクトの独自の持続時間があります。敵をしとめるときは、単純なヒットよりもエフェクトが長く持続し、戦闘中の最後の敵を殺すときは、まるで完全に停止したかのようにさらに長くマイクロフリーズが持続します。

9 Monkeys of Shaolin の新機能

9 Monkeys of Shaolin の設計の特長を強調するために、戦闘システムに複数のイノベーションを適用しました。
  • 武器アニメーション:アニメーターが武器アニメーションをキャラクターのヒット アニメーションと同期させます。
  • 武器の移動軌跡を計算するヒット トレース。:多くの場合、Sobaka Studio のゲームでは、ヒットが非常に高速で、数フレームしか持続しない場合があります。同時に、武器はそれ以上に進み、敵を貫通する場合さえあります。このようなビヘイビアを防止するため、武器の進路を計算し、その進路をセグメントに分割します。次に、各セグメントで、武器が敵と交わっているかどうかを確認します。
  • ヒットの強化:攻撃ブースター:攻撃には多くの設定が含まれています。また、そのような設定の中には基本的なダメージ処理とは大きく異なるものもあるため、そのような特性を改善して、プレイヤーにその制御を渡す方法を装備しています。例えば、プレイヤーのオートエイムや、プレイヤーと敵との距離を計算して攻撃を行う設定があります。この値を大きくすると、非常に興味深い結果が得られ、戦闘感覚をさらに強化できます。

以下は、基本的なキックです。
 
さらに、こちらは改善されたキックです。

まとめ

攻撃や攻撃状態、敵のタイプ分類、個々のアニメーション設定などに取り組んだことで、チームが開発を試みた真に迫る戦闘を実現することができました。Sobaka Studio チームのこの経験が、皆さんと皆さんのゲームに少しでもお役に立てれば幸いです。最後までお読みいただきありがとうございました。
 

    今すぐ Unreal Engine を入手しましょう!

    Unreal Engine は、世界で最もオープンで高度な制作ツールです。
    あらゆる機能とソース コード アクセスを完備している Unreal Engine を使用すれば、すぐに制作に取り掛かることができます。