fix(world): 检查点标记闩锁随接触周期重置——折返重经标记可覆盖注册
CheckpointMarker._isActivated 此前一次性置位,玩家折返重新经过 早先的标记不会再注册,"最近经过的为准"对回头路失效。改为 OnTriggerExit2D 重置闩锁:每次重新进入触发区都覆盖注册最近 检查点,同一次接触内仍只注册/广播一次。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -9,9 +9,10 @@ namespace BaseGames.World
|
||||
/// 玩家经过时自动激活,成为 LethalTrap 回溯的目标位置。
|
||||
///
|
||||
/// 设计要点:
|
||||
/// - 同一房间可放置多个,取最近经过的一个
|
||||
/// - 同一房间可放置多个,取最近经过的一个(折返重新经过早先的标记同样覆盖注册)
|
||||
/// - 激活状态仅存于运行时,不持久化,换房间后重置
|
||||
/// - 每个 CheckpointMarker 仅激活一次(重复进入同一触发区无效)
|
||||
/// - 闩锁按接触周期:进入时注册并广播一次,离开触发区后重置,
|
||||
/// 同一次接触内不重复结算
|
||||
/// </summary>
|
||||
[RequireComponent(typeof(Collider2D))]
|
||||
public class CheckpointMarker : MonoBehaviour
|
||||
@@ -26,7 +27,7 @@ namespace BaseGames.World
|
||||
|
||||
private bool _isActivated;
|
||||
|
||||
/// <summary>当前运行时是否已被激活。</summary>
|
||||
/// <summary>本次接触是否已注册过(玩家离开触发区后重置)。</summary>
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user