From 01787e9c34330863ae4d562b39c0f848d8ec1e0a Mon Sep 17 00:00:00 2001 From: Joywayer Date: Fri, 12 Jun 2026 11:16:08 +0800 Subject: [PATCH] =?UTF-8?q?fix(world):=20=E6=A3=80=E6=9F=A5=E7=82=B9?= =?UTF-8?q?=E6=A0=87=E8=AE=B0=E9=97=A9=E9=94=81=E9=9A=8F=E6=8E=A5=E8=A7=A6?= =?UTF-8?q?=E5=91=A8=E6=9C=9F=E9=87=8D=E7=BD=AE=E2=80=94=E2=80=94=E6=8A=98?= =?UTF-8?q?=E8=BF=94=E9=87=8D=E7=BB=8F=E6=A0=87=E8=AE=B0=E5=8F=AF=E8=A6=86?= =?UTF-8?q?=E7=9B=96=E6=B3=A8=E5=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CheckpointMarker._isActivated 此前一次性置位,玩家折返重新经过 早先的标记不会再注册,"最近经过的为准"对回头路失效。改为 OnTriggerExit2D 重置闩锁:每次重新进入触发区都覆盖注册最近 检查点,同一次接触内仍只注册/广播一次。 Co-Authored-By: Claude Fable 5 --- Assets/_Game/Scripts/World/CheckpointMarker.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) 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