戦闘
戦闘は個別のシステムというより抽象的なシステムです。複数の異なるシステムが複雑に相互作用し、実装の複雑さは設計の複雑さに大きく依存します。
このゲームでは、設計の範囲は非常にシンプルです。 プレイヤーの攻撃手段は敵の上にジャンプすることだけです。 敵は、敵の種類に応じて、近接攻撃と接触攻撃の 2 種類の方法でプレイヤーを攻撃します。
プレイヤーの攻撃と敵の近接攻撃の基本はほぼ同じです。 キャラクターのスケルタルメッシュには、近接攻撃の方法に基づいて 1 つ以上のヒットボックスを配置し、ヒットテストを行う領域を概算するために 1 つ以上のダメージ ボックスを配置します。
敵の接触攻撃では、敵のカプセル コライダーを使用してプレイヤーが敵に接触したかどうかを確認し、近接攻撃と同じヒット アクションを実行します。 キャラクターが攻撃されたときに起こる内容の実装は、次のキャラクター基本クラスで確認できます:Parrot\Source\Parrot\Public\Character\ParrotCharacterBase.h。 機能ロジックは、このクラスとサブクラス (ParrotPlayerCharacter.h と ParrotEnemyCharacterBase.h) に含まれています。
プレイヤー キャラクター
プレイヤーの設定は、敵を攻撃するときにどのように機能するかという点で独特です。 プレイヤーが敵のダメージ ボックスに重なると、敵はその情報をプレイヤーに伝え、攻撃が有効かどうかを尋ねます。 この場合、敵はプレイヤーがダメージボックスの上部より上にいるかどうかを確認し、プレイヤーがその上に着地し、横や下から攻撃していないことを確認します。 攻撃が有効であれば、敵はプレイヤーにジャンプを指示します。 プレイヤーがダメージボックスに接触した際にジャンプ ボタンを押し続けている場合は、より高くジャンプします。 ダメージボックスに接触する前にボタンを離すと、より低くジャンプします。
敵キャラクター
敵の設定は、いくつかの理由から少し複雑です。 近接攻撃をリアルに表現したいため、敵のダメージボックスは武器の端に配置されています。 ヒットボックス、ダメージボックス、カプセル コライダーの設定は、敵キャラクター ブループリントのビューポートで確認できます。たとえば、次の場所にあります:Blueprints > Enemy > Skeleton > BP_EnemyCharacter_Skeleton。
この例では、頭部のダメージボックス、武器のヒットボックス、そしてカプセル コライダーを確認できます。 これらのトリガーはそれぞれ、キャラクター基本クラスの親関数にオーバーラップ イベントを駆動します。
さらに、攻撃アニメーションは、武器を振り回しているアニメーション部分でのみ武器のヒットボックスを有効にする通知イベントを送信します。 これにより、プレイヤーが敵と接触してランダムなタイミングでダメージを受けるのではなく、実際に武器で攻撃されているかのような様子と感覚が得られます。 これらのアニメーション通知は、攻撃アニメーションの特定のポイントに挿入され、ダメージボックスの有効化と無効化をトリガーします。 アニメーション通知は、「Blueprints > Enemy/EnemyBase > BP_AnimNotify_EnemyAttackBegin」と「Blueprints > Enemy > EnemyBase > BP_AnimNotify_EnemyAttackEnd」で「Assets> Quaternius > PirateKit > Characters > Headless_Skeleton > Animations > Characters_Skeleton_Headless_Anim_CharacterArmature_Sword」などの特定の敵キャラクターの攻撃アニメーションの設定とともに確認できます。
敵キャラクターは、オーバーラップをチェックしてイベントをトリガーします。つまり、適切なオーバーラップが検出されると、敵は自身の HitCharacter() 関数とプレイヤーの HitCharacter() 関数の両方をトリガーします。
ヒットボックスとダメージボックスのアクションがオーバーラップするコードは、「Parrot\Source\Parrot\Public\Character\ParrotEnemyCharacterBase.h」の HitBeginOverlap() 関数と HurtBeginOverlap() 関数で確認できます。
ボスとの戦闘
ボス戦では、プレイヤーがボスを攻撃した際に「激怒」シーケンスを再生する機能が追加されています。 ボスの反応をトリガーするブループリント コードは、「Blueprints > Enemy > BossShark > BP_EnemyCharacter_BossShark」で確認できます。
「激怒」シーケンスは、ボスの歩行速度を上げ、VFX 用の緑色の炎のナイアガラ コンポーネントを有効にする前に、事前に通知された「頭を振る」アニメーションを再生するシンプルなタイム シーケンスです。 このシーケンス中は、ダメージボックスも無効化されるため、ボスは無敵になります。