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