feat: Add HurtBoxOwnerGuard to prevent multiple damage registrations from the same HitBox activation

- Implemented HurtBoxOwnerGuard to ensure that multiple HurtBoxes on the same character do not register damage multiple times during a single HitBox activation.
- Added custom editor for HitBox to facilitate the creation of shape colliders with HitBoxColliderProxy.
- Introduced PhysicsPerceptionSystem for enemy perception, supporting multiple detection modes including RangeCircle, BatchLOS, FanCast, and BoxCast.
- Created EnemyPatrolZone to define patrol and chase areas for enemies, allowing for shared zones among multiple enemies.
- Added BD_IsOutsideZone conditional task for Behavior Designer to check if an enemy or player is outside a defined patrol zone.
This commit is contained in:
2026-06-02 16:10:44 +08:00
parent bcd8b0e90b
commit 06048c966a
47 changed files with 1912 additions and 1195 deletions

View File

@@ -47,11 +47,14 @@ namespace BaseGames.Input
// ── Polling ───────────────────────────────────────────────────────────
public Vector2 MoveInput { get; private set; }
/// <summary>跳跃键当前是否处于按下状态。供 JumpState 在进入时检测短按是否已松开。</summary>
public bool IsJumpHeld => _jumpAction != null && _jumpAction.IsPressed();
// ── Runtime state ─────────────────────────────────────────────────────
private InputActionMap _gameplay;
private InputActionMap _ui;
private bool _isBound;
private InputAction _jumpAction;
private void EnsureInitialized()
{
@@ -92,6 +95,7 @@ namespace BaseGames.Input
_gameplay = null;
_ui = null;
_isBound = false;
_jumpAction = null;
EnsureInitialized();
}
@@ -171,6 +175,7 @@ namespace BaseGames.Input
BindStarted(_gameplay, "Jump", () => JumpStartedEvent?.Invoke());
BindCanceled(_gameplay, "Jump", () => JumpCancelledEvent?.Invoke());
_jumpAction = _gameplay.FindAction("Jump", throwIfNotFound: false);
BindStarted(_gameplay, "Attack", () => AttackEvent?.Invoke());
BindStarted(_gameplay, "Parry", () => ParryEvent?.Invoke());
BindStarted(_gameplay, "Dash", () => DashEvent?.Invoke());