diff --git a/Assets/_Game/Scripts/World/CheckpointMarker.cs b/Assets/_Game/Scripts/World/CheckpointMarker.cs index 9259999..7aeb0a1 100644 --- a/Assets/_Game/Scripts/World/CheckpointMarker.cs +++ b/Assets/_Game/Scripts/World/CheckpointMarker.cs @@ -9,9 +9,10 @@ namespace BaseGames.World /// 玩家经过时自动激活,成为 LethalTrap 回溯的目标位置。 /// /// 设计要点: - /// - 同一房间可放置多个,取最近经过的一个 + /// - 同一房间可放置多个,取最近经过的一个(折返重新经过早先的标记同样覆盖注册) /// - 激活状态仅存于运行时,不持久化,换房间后重置 - /// - 每个 CheckpointMarker 仅激活一次(重复进入同一触发区无效) + /// - 闩锁按接触周期:进入时注册并广播一次,离开触发区后重置, + /// 同一次接触内不重复结算 /// [RequireComponent(typeof(Collider2D))] public class CheckpointMarker : MonoBehaviour @@ -26,7 +27,7 @@ namespace BaseGames.World private bool _isActivated; - /// 当前运行时是否已被激活。 + /// 本次接触是否已注册过(玩家离开触发区后重置)。 public bool IsActivated => _isActivated; private void Awake() @@ -49,6 +50,12 @@ namespace BaseGames.World _onCheckpointReached?.Raise(); } + private void OnTriggerExit2D(Collider2D other) + { + if ((_playerLayers.value & (1 << other.gameObject.layer)) == 0) return; + _isActivated = false; + } + private void OnDrawGizmos() { Gizmos.color = _isActivated