diff --git a/Assets/Scripts/Interaction/TouchPositionHandler.cs b/Assets/Scripts/Interaction/TouchPositionHandler.cs index 2181811..1f7e632 100644 --- a/Assets/Scripts/Interaction/TouchPositionHandler.cs +++ b/Assets/Scripts/Interaction/TouchPositionHandler.cs @@ -2,7 +2,7 @@ using UnityEngine; /// /// 挂在 touchArray 的每个子球体上,点击时把 woman 移动到 womanPointArray 对应位置。 -/// 字段用 public 方便代码直接赋值。 +/// 自动关闭 MeshRenderer 只显示蓝描边,描边闪烁提示用户点击。 /// public class TouchPositionHandler : MonoBehaviour { @@ -10,37 +10,54 @@ public class TouchPositionHandler : MonoBehaviour public GameObject womanObject; public GameObject nextTouchObject; + private LineRenderer _outlineRenderer; + private void Start() { + // 关闭球体本身的 MeshRenderer,只留碰撞体 + 描边 + var mr = GetComponent(); + if (mr != null) mr.enabled = false; + CreateBlueOutline(); + StartCoroutine(BlinkOutline()); } private void CreateBlueOutline() { - // 用 LineRenderer 画一个水平圆环描边 var ringGo = new GameObject("BlueRing"); ringGo.transform.SetParent(transform, false); - ringGo.transform.localPosition = Vector3.zero; - ringGo.transform.localRotation = Quaternion.Euler(90f, 0, 0); // XZ 平面 + ringGo.transform.localPosition = new Vector3(0, 0.02f, 0); // 稍微抬高防穿地 + ringGo.transform.localRotation = Quaternion.Euler(90f, 0, 0); - var lr = ringGo.AddComponent(); - lr.useWorldSpace = false; - lr.loop = true; - lr.startWidth = 0.02f; - lr.endWidth = 0.02f; - lr.material = new Material(Shader.Find("Sprites/Default")); - lr.startColor = Color.blue; - lr.endColor = Color.blue; + _outlineRenderer = ringGo.AddComponent(); + _outlineRenderer.useWorldSpace = false; + _outlineRenderer.loop = true; + _outlineRenderer.startWidth = 0.06f; + _outlineRenderer.endWidth = 0.06f; + _outlineRenderer.material = new Material(Shader.Find("Unlit/Color")); + _outlineRenderer.material.color = new Color(0.2f, 0.5f, 1f); // 亮蓝 + _outlineRenderer.startColor = new Color(0.2f, 0.5f, 1f); + _outlineRenderer.endColor = new Color(0.2f, 0.5f, 1f); - float r = 0.12f; + float r = 0.15f; int segs = 32; - lr.positionCount = segs; + _outlineRenderer.positionCount = segs; for (int i = 0; i < segs; i++) { float a = i * 2f * Mathf.PI / segs; - lr.SetPosition(i, new Vector3(Mathf.Cos(a) * r, Mathf.Sin(a) * r, 0)); + _outlineRenderer.SetPosition(i, new Vector3(Mathf.Cos(a) * r, Mathf.Sin(a) * r, 0)); + } + Debug.Log($"[TouchPosition] {name}: 蓝描边已创建 (r={r}, Unlit/Color)"); + } + + private System.Collections.IEnumerator BlinkOutline() + { + while (true) + { + if (_outlineRenderer != null) + _outlineRenderer.enabled = !_outlineRenderer.enabled; + yield return new WaitForSeconds(0.4f); } - Debug.Log($"[TouchPosition] {name}: 蓝描边已创建"); } private void OnMouseDown() @@ -58,7 +75,11 @@ public class TouchPositionHandler : MonoBehaviour Debug.LogWarning($"[TouchPosition] {name}: womanObject 或 targetPosition 为空"); } - // 顺序显示:隐藏自己,显示下一个 + // 停止闪烁,隐藏描边 + StopAllCoroutines(); + if (_outlineRenderer != null) + _outlineRenderer.enabled = false; + gameObject.SetActive(false); if (nextTouchObject != null) {