From a9d97d4b17b577204e8f60f8fe015e054309c25e Mon Sep 17 00:00:00 2001 From: yangbear Date: Thu, 9 Jul 2026 03:51:55 +0800 Subject: [PATCH] fix: replace isBlinking logic with proper isFinished state to fix Ping first-click advancing --- .../Interaction/ChanraoTuibuHandler.cs | 16 ++++++++++------ .../Scripts/Interaction/PingClickHandler.cs | 19 +++++++++++-------- .../Scripts/Interaction/ShoseClickHandler.cs | 3 +++ .../Interaction/TouchPositionHandler.cs | 4 ++++ 4 files changed, 28 insertions(+), 14 deletions(-) diff --git a/Assets/Scripts/Interaction/ChanraoTuibuHandler.cs b/Assets/Scripts/Interaction/ChanraoTuibuHandler.cs index 0430cd6..59f1d72 100644 --- a/Assets/Scripts/Interaction/ChanraoTuibuHandler.cs +++ b/Assets/Scripts/Interaction/ChanraoTuibuHandler.cs @@ -4,15 +4,16 @@ public class ChanraoTuibuHandler : MonoBehaviour { public GameObject nextObject; private MeshRenderer _outlineMesh; - private bool _isBlinking; + private float _lastClickTime; + private bool _isFinished; - public bool CanBeClicked() { return _isBlinking; } + public bool CanBeClicked() { return !_isFinished; } void OnEnable() { if (GetComponent() == null) gameObject.AddComponent().radius = 0.5f; foreach (var r in GetComponentsInChildren(true)) r.enabled = false; CreateOutlineMesh(); - _isBlinking = true; + _isFinished = false; StopAllCoroutines(); StartCoroutine(BlinkOutline()); Debug.Log($"[ChanraoTuibu] OnEnable outline={_outlineMesh!=null}"); @@ -63,10 +64,13 @@ public class ChanraoTuibuHandler : MonoBehaviour public void PerformClick() { - if (!_isBlinking) return; // 防止重复点击 + if (Time.time - _lastClickTime < 0.3f) return; // 防止重复点击 + _lastClickTime = Time.time; + if (_isFinished) return; + Debug.Log($"[ChanraoTuibu] {name} 被点击"); ActionHistory.Push(ActionHistory.ActionType.ChanraoTuibu, this); - _isBlinking = false; + _isFinished = true; StopAllCoroutines(); if (_outlineMesh != null) _outlineMesh.enabled = false; var mr = GetComponent(); if (mr != null) mr.enabled = true; @@ -90,7 +94,7 @@ public class ChanraoTuibuHandler : MonoBehaviour public void ResetState() { - _isBlinking = true; + _isFinished = false; var mr = GetComponent(); if (mr != null) mr.enabled = false; var smr = GetComponent(); if (smr != null) smr.enabled = false; foreach (var r in GetComponentsInChildren(true)) { if (_outlineMesh != null && r == _outlineMesh) continue; r.enabled = false; } diff --git a/Assets/Scripts/Interaction/PingClickHandler.cs b/Assets/Scripts/Interaction/PingClickHandler.cs index 8968509..5814bc9 100644 --- a/Assets/Scripts/Interaction/PingClickHandler.cs +++ b/Assets/Scripts/Interaction/PingClickHandler.cs @@ -6,9 +6,10 @@ public class PingClickHandler : MonoBehaviour public int pingIndex; private MeshRenderer _modelRenderer, _outlineMesh; private bool _modelShown; - private bool _isBlinking; + private float _lastClickTime; + private bool _isFinished; - public bool CanBeClicked() { return _isBlinking; } + public bool CanBeClicked() { return !_isFinished; } void OnEnable() { @@ -18,7 +19,7 @@ public class PingClickHandler : MonoBehaviour if (GetComponent() == null) gameObject.AddComponent().radius = 0.5f; CreateOutlineMesh(); _modelShown = false; - _isBlinking = true; + _isFinished = false; StopAllCoroutines(); StartCoroutine(BlinkOutline()); } @@ -58,7 +59,10 @@ public class PingClickHandler : MonoBehaviour public void PerformClick() { - if (!_isBlinking) return; // 防止重复点击 + if (Time.time - _lastClickTime < 0.3f) return; // 防连击 + _lastClickTime = Time.time; + if (_isFinished) return; + foreach (var c in Object.FindObjectsOfType()) { if (!c.enabled) continue; @@ -69,7 +73,6 @@ public class PingClickHandler : MonoBehaviour if (!_modelShown) { _modelShown = true; - _isBlinking = false; ActionHistory.Push(ActionHistory.ActionType.PingFirst, this); StopAllCoroutines(); if (_modelRenderer != null) _modelRenderer.enabled = true; @@ -129,7 +132,7 @@ public class PingClickHandler : MonoBehaviour if (chanraoObject != null) chanraoObject.SetActive(false); ShowSelf(); _modelShown = true; - _isBlinking = false; + _isFinished = false; } public void UndoShow() { HideSelf(); } @@ -137,7 +140,7 @@ public class PingClickHandler : MonoBehaviour { foreach (var r in GetComponentsInChildren(true)) r.enabled = false; var col = GetComponent(); if (col != null) col.enabled = false; - _isBlinking = false; + _isFinished = true; StopAllCoroutines(); } @@ -151,7 +154,7 @@ public class PingClickHandler : MonoBehaviour public void ResetState() { _modelShown = false; - _isBlinking = true; + _isFinished = false; if (_modelRenderer != null) _modelRenderer.enabled = false; // 隐藏自身模型 foreach (var r in GetComponentsInChildren(true)) { if (_outlineMesh != null && r == _outlineMesh) continue; r.enabled = false; } diff --git a/Assets/Scripts/Interaction/ShoseClickHandler.cs b/Assets/Scripts/Interaction/ShoseClickHandler.cs index f0d5faa..7a3b5bf 100644 --- a/Assets/Scripts/Interaction/ShoseClickHandler.cs +++ b/Assets/Scripts/Interaction/ShoseClickHandler.cs @@ -6,6 +6,7 @@ public class ShoseClickHandler : MonoBehaviour public Transform targetPoint; private MeshRenderer _outlineMesh; private bool _clicked; + private float _lastClickTime; public bool CanBeClicked() { return !_clicked; } @@ -76,6 +77,8 @@ public class ShoseClickHandler : MonoBehaviour public void PerformClick() { + if (Time.time - _lastClickTime < 0.3f) return; + _lastClickTime = Time.time; if (_clicked) return; _clicked = true; Debug.Log("[ShoseClick] ★ 被点击 ★"); diff --git a/Assets/Scripts/Interaction/TouchPositionHandler.cs b/Assets/Scripts/Interaction/TouchPositionHandler.cs index c1ae74d..412b38b 100644 --- a/Assets/Scripts/Interaction/TouchPositionHandler.cs +++ b/Assets/Scripts/Interaction/TouchPositionHandler.cs @@ -10,6 +10,7 @@ public class TouchPositionHandler : MonoBehaviour public GameObject womanObject; public GameObject nextTouchObject; public AudioClip voiceClip; + private float _lastClickTime; private MeshRenderer _meshRenderer; @@ -59,6 +60,9 @@ public class TouchPositionHandler : MonoBehaviour private void OnMouseDown() { if (_meshRenderer == null || !_meshRenderer.enabled) return; // 防止重复点击 + if (Time.time - _lastClickTime < 0.3f) return; + _lastClickTime = Time.time; + Debug.Log($"[TouchPosition] {name}: 被点击"); if (womanObject != null && targetPosition != null)