From 6650540dde8ca1d4327bf124262247325f40d05e Mon Sep 17 00:00:00 2001 From: yangbear Date: Fri, 3 Jul 2026 00:59:20 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20PingClickHandler=E9=87=8D=E5=BB=BA+touch?= =?UTF-8?q?Array=E4=BC=98=E5=85=88=E7=BA=A7+=E7=A1=AE=E8=AE=A4=E6=97=A0?= =?UTF-8?q?=E7=BC=93=E5=85=A5=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - PingClickHandler.OnMouseDown开头Physics.RaycastAll检查touchArray优先 - 删除重建避免多次替换导致的括号不平衡 - AudioManager确认无fade/缓入代码,音频直接播放 --- .../Scripts/Interaction/PingClickHandler.cs | 46 +++++++++++-------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/Assets/Scripts/Interaction/PingClickHandler.cs b/Assets/Scripts/Interaction/PingClickHandler.cs index 55437d3..9c1eb32 100644 --- a/Assets/Scripts/Interaction/PingClickHandler.cs +++ b/Assets/Scripts/Interaction/PingClickHandler.cs @@ -1,21 +1,21 @@ using UnityEngine; /// -/// 挂在每个 ping 对象上。蓝色圆环闪烁描边,两步点击: -/// 1. 第一次点击 → 停止闪烁,显示 ping 模型 -/// 2. 第二次点击 → 显示对应 chanrao,隐藏自己,激活下个 ping -/// 点击通知 StepManager 记录步骤。 +/// 挂在每个 ping 对象上。蓝色圆环闪烁描边,两阶段点击: +/// 阶段0: 依次首次点击4个ping显示模型(全部显示后才进入阶段1) +/// 阶段1: 点击ping显示对应chanrao并隐藏自己 +/// touchArray 点击优先级更高。 /// public class PingClickHandler : MonoBehaviour { public GameObject chanraoObject; public GameObject nextPing; - public int pingIndex; // ping.004=0, ping.003=1, ping.002=2, ping.001=3 + public int pingIndex; private MeshRenderer _meshRenderer; private LineRenderer _outlineRenderer; - private static int _firstClickCount = 0; private bool _clickedOnce; + private static int _firstClickCount = 0; void Start() { @@ -29,7 +29,7 @@ public class PingClickHandler : MonoBehaviour { _meshRenderer = GetComponent(); if (_meshRenderer == null) _meshRenderer = GetComponentInChildren(); - if (_meshRenderer != null) _meshRenderer.enabled = false; // 初始隐藏模型,只留描边 + if (_meshRenderer != null) _meshRenderer.enabled = false; CreateBlueOutline(); _clickedOnce = false; StopAllCoroutines(); @@ -68,15 +68,31 @@ public class PingClickHandler : MonoBehaviour { while (true) { - if (_outlineRenderer != null) - _outlineRenderer.enabled = !_outlineRenderer.enabled; + if (_outlineRenderer != null) _outlineRenderer.enabled = !_outlineRenderer.enabled; yield return new WaitForSeconds(0.4f); } } void OnMouseDown() { - // 阶段 0:4个ping依次首次点击(只显示模型) + // touchArray 优先:如果同时命中 touchArray point,跳过 + bool blocked = false; + var allCams = Object.FindObjectsOfType(); + foreach (var c in allCams) + { + if (!c.enabled) continue; + var r = c.ScreenPointToRay(Input.mousePosition); + foreach (var h in Physics.RaycastAll(r)) + { + if (h.collider != null && h.collider.transform.parent != null + && h.collider.transform.parent.name == "touchArray") + { blocked = true; break; } + } + if (blocked) break; + } + if (blocked) return; + + // 阶段0: 依次首次点击4个ping if (_firstClickCount < 4) { if (_clickedOnce) return; @@ -85,13 +101,12 @@ public class PingClickHandler : MonoBehaviour StopAllCoroutines(); if (_meshRenderer != null) _meshRenderer.enabled = true; if (_outlineRenderer != null) _outlineRenderer.enabled = true; - // 激活下个 ping if (nextPing != null) { nextPing.SetActive(true); Debug.Log($"[PingClick] {name} → {nextPing.name} 激活"); } Debug.Log($"[PingClick] {name} 第1击 (model显示, {_firstClickCount}/4)"); var sm = FindObjectOfType(); if (sm != null) sm.RecordPingStep(pingIndex, false); } - // 阶段 1:4个全部首次点击后,第二击显示chanrao + // 阶段1: 全部显示后第二击显示chanrao else { if (!_clickedOnce) return; @@ -106,7 +121,6 @@ public class PingClickHandler : MonoBehaviour } } - /// 上一步撤销:恢复到first-click状态 public void UndoSecondClick() { if (!_clickedOnce) return; @@ -118,9 +132,5 @@ public class PingClickHandler : MonoBehaviour StartCoroutine(BlinkOutline()); } - /// 上一步撤销:隐藏自己,恢复前一个ping - public void UndoShow() - { - gameObject.SetActive(false); - } + public void UndoShow() { gameObject.SetActive(false); } }