こんにちは、Sumo Digital のシニアプログラマー Nick Edwards と同じく Sumo Digital のシニアプログラマー Andy Chapman です。 Sumo Digital では、定期的に社内ゲームジャムが実施されます。受賞した作品には、開発時間をもっと投入することによって、そのコンセプトをさらに発展させることができるようにしています。これまでのゲームジャムの優勝作品には、Unreal Engine で制作された『Snake Pass』があります。これは、実際に製品化され、マルチプラットフォームでのローンチに成功しました。
外側のコーナーにじっと立っている場合ならば、Agent 8 の足の正しい IK 位置を見つけることは比較的簡単です。しかし、移動となると、問題は大きくなります。それぞれの足を置く位置を推定することによって、歩行サイクルの動きをワープさせて、カーブを描きながら壁を登ったり、エッジをまたいだりする必要があるのです。そうしなければ、キャラクターは、その上を歩く壁やまたがるコーナーの中に足をめり込ませながら引きずってしまいます。
すべてのスパイダーの足に対してこのプロセスを実行した後に、それらの計算結果を一連の Virtual Bone に入れると、Virtual Bone がそれらを LegIK ノードに渡します。FABRIK IK ソルバーはこれにより実装されています。LegIK ノードは、すぐにスパイダーと私たちの役に立ち、脚 1本につき 4 本のボーン チェーンが備わりました。
アンテナに動きがつき、脚の IK が十分に改善されたので、Agent 8 の本体に物理的な反応をもたらす方法について検討してみました。まず、スパイダー本体への重力の影響を再現してみようということになりました。逆さまにすると、地面から離れたところにぶら下がっているようにしてみるのです。そのためには、本体のボーンのトランスフォームを変更することによって、トランスレーションとローテーションのオフセットを供給しなければなりません。他にシステムがない場合は、脚を含めてメッシュ全体がオフセットされることになります。しかし、コンポーネント スペース IK があれば、これは問題になりません。ボディの移動先に合わせて脚の向きが変わるからです。
各ガジェットは、それに関連付けられた Actor クラスをもち、そこにはそのガジェットの物理的表現が含まれています。各ガジェットは少なくとも 2 つのスケルタル メッシュ コンポーネント (1 つは腕用、もう 1 つはガジェット ヘッド用) で構成されています。腕のスケルトンはすべてのガジェットで共有されていますが、各ヘッドは固有のスケルトンをもちます。私たちは、Copy Pose From Mesh AnimGraph ノードを活用して、共有されているボーンのトランスフォームを Agent 8 から腕に、そして腕からヘッドへと伝えます。ほとんどのガジェットでは、アニメーション ブループリントを使って、手動計算されたさまざまなタイプの IK を実装し、目指している効果を作り出します。
感情的な応答
Agent 8 のアニメーションを完全に制御できるようになったので、感情的反応のためのシステムを開発することによって、キャラクタライズをさらに推し進めようと考えました。特定の動作をとったり、ゲームの特定の場所にいると、感情を呼び起こし、それによって、歩き回っているときのさまざまな表情や、じっとしているときの待機/そわそわのアニメーションがトリガーされるようにすることが可能です。ゲームには、12 個の感情それぞれについて、少なくとも 1 つの待機/そわそわのアニメーションが用意されています。これらのアニメーションは、AnimGraph のカスタム ノードのインスタンスを介して再生されます。このカスタム ノードは Random Sequence Player ノードに似ていますが、偶然に基づいてリストから 1 個のアニメーションを選択し、ランダムな再生速度でランダムな回数ループしてから、再生を停止します。これにより、ノードの 2 つのインスタンス間を遷移できるようになります。それぞれのインスタンスには、アニメーション、確率、ループ時間、再生速度が入っている異なるバケットがあります。
待機状態の各アニメーションで IK を十分に機能させることが鍵となりました。これらは、IK システムを開発した時にテストした移動のアニメーションとは大きく異なります。幸いにも、私たちが作成したソリューションは、いくつかの調整と修正を行うだけで、これらの新しいアニメーションをうまく動かすことができました。
Agent 8 の 12 の感情をすべてご覧になれます。
移動
360 度のナビゲーションと移動の自由をもたせる、ということは、素晴らしいことであるとともに、忌むべきことでもあります。これによって、従来の 3D ゲームでは必ずしもプレイヤーに提供されていなかった多くの自由がプレイヤーにもたらされますが、デベロッパーには、頭痛の種となるかもしれません。プレーヤーが壁や天井の上を歩き始めると、コントロールやカメラといった、オーソドックスなファーストパーソンやサードパーソンのゲームで使用されている一般的なシステムが破綻してしまうのです。
この Floating Pawn のソリューションは、急遽作成したテストレベルで有望な結果を出しました。そのトレースの呼び出しからかなり多くの情報が得られていたのです。今にして思えば、これは、そのレベルが多数の個別のキューブから構築されていたために起こったことです。Multi Sphere Trace は、トレースに対して複数の Hit Result を返しますが、オブジェクト 1 個につき、1 つの Hit Result しか返しません。これは、最初のテスト レベルでは問題ありませんでした。
単一のスタティック メッシュでこのアプローチを試してみると、すぐに、トレースからの Hit Result が 1 つに下がってしまい、十分な情報が得られなくなりました。
私たちは、スパイダーの動きのシステムを、Floating Pawn Movement のサンプル コードを基にして作成したように、キネマティックなキャラクターの制作にかなり注力しました。元々のゲームデザインでは、物理的なトリックは何も必要ありませんでした。重力は、私たちがその上を歩いているサーフェスに常に作用していたものです。
そのスパイダーはブループリントで書かれていて、社内で開催された Sumo Digital ゲームジャムに出品されたブループリントのプロトタイプから進化したものです。スパイダーは物理オブジェクト上に構築されていて、すべての動き/回転/表面引力がキャラクターに物理的力を加えることによって実装されていました。そして当時それを使ったことがある誰もが、楽しくて魅力的なゲームプレイにするためには、物理的に正確なシミュレーションのバランスを取ることが相当難しいと言っていました。