using UnityEngine; /// /// 挂在 touchArray 子球体上。球体用双Pass膨胀描边shader(Custom/OutlineUnlit), /// 闪烁提示用户点击。点击后移动到对应位置并顺序显示下一个。 /// public class TouchPositionHandler : MonoBehaviour { public Transform targetPosition; public GameObject womanObject; public GameObject nextTouchObject; private MeshRenderer _meshRenderer; private void Start() { _meshRenderer = GetComponent(); StartCoroutine(BlinkMesh()); } private System.Collections.IEnumerator BlinkMesh() { while (true) { if (_meshRenderer != null) _meshRenderer.enabled = !_meshRenderer.enabled; yield return new WaitForSeconds(0.4f); } } private void OnMouseDown() { Debug.Log($"[TouchPosition] {name}: 被点击"); if (womanObject != null && targetPosition != null) { womanObject.transform.position = targetPosition.position; womanObject.transform.rotation = targetPosition.rotation; Debug.Log($"[TouchPosition] woman 移动到 {targetPosition.name}"); } // 通知 StepManager 记录步骤 int stepIndex = transform.GetSiblingIndex() + 1; var sm = FindObjectOfType(); if (sm != null) sm.RecordWomanStep(stepIndex); StopAllCoroutines(); if (_meshRenderer != null) _meshRenderer.enabled = false; gameObject.SetActive(false); if (nextTouchObject != null) { nextTouchObject.SetActive(true); Debug.Log($"[TouchPosition] {name} → {nextTouchObject.name} 显示"); } } private void OnEnable() { _meshRenderer = GetComponent(); if (_meshRenderer != null) _meshRenderer.enabled = true; StopAllCoroutines(); StartCoroutine(BlinkMesh()); } }