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)
{