Files
VFSUnity/Assets/Scripts/Interaction/TouchPositionHandler.cs
T

120 lines
3.9 KiB
C#
Raw Normal View History

using UnityEngine;
/// <summary>
/// 挂在 touchArray 子球体上。球体用双Pass膨胀描边shaderCustom/OutlineUnlit),
/// 闪烁提示用户点击。点击后移动到对应位置并顺序显示下一个。
/// </summary>
public class TouchPositionHandler : MonoBehaviour
{
public Transform targetPosition;
public GameObject womanObject;
public GameObject nextTouchObject;
public AudioClip voiceClip;
private MeshRenderer _meshRenderer;
private void Start()
{
_meshRenderer = GetComponent<MeshRenderer>();
StartCoroutine(BlinkMesh());
}
private void OnEnable()
{
_meshRenderer = GetComponent<MeshRenderer>();
if (_meshRenderer != null)
{
_meshRenderer.enabled = true;
var col = GetComponent<Collider>(); if (col == null) { var sc = gameObject.AddComponent<SphereCollider>(); sc.radius = 0.3f; } // 只显示描边,填充透明
var mat = _meshRenderer.material;
if (mat != null && mat.HasProperty("_MainColor"))
{
var c = mat.GetColor("_MainColor");
c.a = 0f;
mat.SetColor("_MainColor", c);
}
}
StopAllCoroutines();
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}");
}
if (voiceClip != null)
{
PlaySharedVoice();
Debug.Log($"[TouchPosition] 播放语音: {voiceClip.name}");
}
// 点击point1时平滑切换到camera3
if (transform.GetSiblingIndex() == 0)
{
var amCam = FindObjectOfType<AudioManager>();
if (amCam != null) amCam.SwitchToCamera3();
}
int stepIndex = transform.GetSiblingIndex() + 1;
var sm = FindObjectOfType<StepManager>();
if (sm != null) sm.RecordWomanStep(stepIndex);
// point1 点击后先激活 chanraotuibu
Debug.Log("[TouchPosition] stepIndex=" + stepIndex);
if (stepIndex == 1)
{
var mi = GameObject.Find("manInjury");
Debug.Log("[TouchPosition] manInjury found=" + (mi != null));
if (mi != null)
{
var ct = mi.transform.Find("chanraotuibu");
Debug.Log("[TouchPosition] chanraotuibu found=" + (ct != null));
if (ct != null) { ct.gameObject.SetActive(true); Debug.Log("[TouchPosition] chanraotuibu 已激活");
FindObjectOfType<StepManager>()?.InitPingSteps(); }
}
}
StopAllCoroutines();
if (_meshRenderer != null) _meshRenderer.enabled = false;
gameObject.SetActive(false);
if (nextTouchObject != null)
{
nextTouchObject.SetActive(true);
Debug.Log($"[TouchPosition] {name} → {nextTouchObject.name} 显示");
}
}
private static AudioSource _sharedVoice;
private void PlaySharedVoice()
{
if (voiceClip == null) return;
if (_sharedVoice == null)
{
var go = GameObject.Find("[Managers]");
if (go != null) _sharedVoice = go.AddComponent<AudioSource>();
else { var g = new GameObject("SharedVoice"); _sharedVoice = g.AddComponent<AudioSource>(); }
}
_sharedVoice.Stop();
_sharedVoice.clip = voiceClip;
_sharedVoice.Play();
}
}