diff --git a/CHANGELOG.md b/CHANGELOG.md index 31ec167..47dd774 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 0.1.4 + +- `ClickTarget` 对 UI Button 和显式 `ShrinkTutorialAnchor` 改为点击事件驱动,不再依赖轮询鼠标按下、抬起的帧时序;非 UI 目标保留原有指针检测。 + ## 0.1.3 - 修复 `ClickTarget` 在目标按钮点击后立即打开、关闭或替换 UI 时误判未命中的问题;现在按下时确认原目标,松开时按按下时的目标区域完成步骤。 diff --git a/Runtime/Core/ShrinkTutorialManager.cs b/Runtime/Core/ShrinkTutorialManager.cs index 3140467..ff8b31f 100644 --- a/Runtime/Core/ShrinkTutorialManager.cs +++ b/Runtime/Core/ShrinkTutorialManager.cs @@ -43,6 +43,8 @@ namespace ShrinkTutorial private ShrinkTutorialMaskShape _clickTargetArmedShape; private int _clickTargetArmedFrame; private bool _clickTargetArmedWithTouch; + private Button _clickTargetButton; + private ShrinkTutorialAnchor _clickTargetAnchor; private float _stepAutoTimer; private string _receivedCustomEvent = string.Empty; @@ -214,6 +216,7 @@ namespace ShrinkTutorial _stepCompleted = false; _stepCompletionQueued = false; _clickTargetArmed = false; + UnbindClickTargetEvents(); _stepAutoTimer = tutorial.steps[stepIndex].autoDelay; _receivedCustomEvent = string.Empty; @@ -237,6 +240,8 @@ namespace ShrinkTutorial if (targetTransform) LogDebug($"Resolved target for step {stepIndex}: {GetTransformPath(targetTransform)}"); + BindClickTargetEvents(step, targetTransform); + EmitSignal(step.enterSignal); _dialog.SetSkipVisible(ResolveSettings().showSkipButton); @@ -249,6 +254,7 @@ namespace ShrinkTutorial yield return null; } + UnbindClickTargetEvents(); EmitSignal(step.exitSignal); _dialog.Hide(); @@ -364,6 +370,9 @@ namespace ShrinkTutorial private void TickClickTargetCompletion(ShrinkTutorialStep step, Transform targetTransform) { + if (_clickTargetButton || _clickTargetAnchor) + return; + if (!_clickTargetArmed && targetTransform && ShrinkTutorialTargetUtility.TryBuildScreenRect(targetTransform, out var targetRect) && @@ -427,6 +436,58 @@ namespace ShrinkTutorial QueueStepCompletion(); } + private void BindClickTargetEvents(ShrinkTutorialStep step, Transform targetTransform) + { + if (step.completeCondition != ShrinkTutorialCompleteCondition.ClickTarget || !targetTransform) + return; + + _clickTargetButton = targetTransform.GetComponent