fix: resolve Next/Previous step and UI skipping bugs

This commit is contained in:
yangbear
2026-07-08 09:38:42 +08:00
parent 2018c6813e
commit a33435a827
9 changed files with 553 additions and 83 deletions
+129 -13
View File
@@ -49,6 +49,9 @@ public class PageController : MonoBehaviour
{
Debug.Log("=== PageController 初始化开始 ===");
// 一开始就隐藏鞋子,以免在主页或开场动画时穿帮
HideShose();
// 关掉多余AudioListener(只留Main Camera的)
var cam2 = GameObject.Find("camera2"); if (cam2 != null) { var al = cam2.GetComponent<AudioListener>(); if (al != null) al.enabled = false; }
var cam3 = GameObject.Find("camera3"); if (cam3 != null) { var al = cam3.GetComponent<AudioListener>(); if (al != null) al.enabled = false; }
@@ -294,17 +297,27 @@ public class PageController : MonoBehaviour
if (go.name == "medicalBox") { go.SetActive(true); Debug.Log("PageController: medicalBox 已显示"); break; }
}
var touch = GameObject.Find("touchArray");
if (touch != null && touch.transform.childCount > 0) { touch.transform.GetChild(0).gameObject.SetActive(true); Debug.Log("PageController: touchArray/point1 已显示");
// 自动播放第一段 woman 语音
var am = FindObjectOfType<AudioManager>();
if (am != null) {
#if UNITY_EDITOR
var autoClip = UnityEditor.AssetDatabase.LoadAssetAtPath<AudioClip>("Assets/Audio/people/周围环境安全,我是救护志愿者,我可以帮助您吗.mp3");
if (autoClip != null) am.PlayVoice(autoClip);
#endif
} }
// 隐藏所有的 point1, 2, 3,不要让它们显示出来
var touchArray = GameObject.Find("touchArray");
if (touchArray != null)
{
foreach (Transform child in touchArray.transform)
{
child.gameObject.SetActive(false);
}
}
// 把 woman 直接放到 point1 的位置
var woman = GameObject.Find("woman");
var point1 = GameObject.Find("womanPointArray/point1");
if (woman != null && point1 != null)
{
woman.transform.position = point1.transform.position;
woman.transform.rotation = point1.transform.rotation;
}
// 启动语音、等待及切换摄像机并激活鞋子的流程
StartCoroutine(StartInitialVoiceAndCameraRoutine());
var tipPanel = GameObject.Find("TipPanel");
if (tipPanel != null) tipPanel.SetActive(true);
@@ -316,6 +329,8 @@ public class PageController : MonoBehaviour
{
Debug.Log("PageController: [ReturnToHome] 返回首页并重置场景");
HideShose();
var man = GameObject.Find("man");
if (man != null) man.SetActive(true);
var man2 = GameObject.Find("man2");
@@ -341,16 +356,117 @@ public class PageController : MonoBehaviour
if (mainGo != null) { var c = mainGo.GetComponent<Camera>(); if (c != null) c.enabled = true; }
var cam2Go = GameObject.Find("camera2");
if (cam2Go != null) { var c = cam2Go.GetComponent<Camera>(); if (c != null) c.enabled = false; }
var cam3Go = GameObject.Find("camera3");
if (cam3Go != null) { var c = cam3Go.GetComponent<Camera>(); if (c != null) c.enabled = false; }
var manAnim = man != null ? man.GetComponent<Animator>() : null;
if (manAnim != null) { manAnim.SetBool("IsStart", false); manAnim.SetBool("IsFull", false); manAnim.Play("manIdle", 0, 0f); }
// 重置 woman 动画
if (woman != null)
{
var wAnim = woman.GetComponent<Animator>();
if (wAnim != null)
{
wAnim.SetBool("isCrouch", false);
wAnim.Play("Idle", 0, 0f); // 假设其默认闲置动画为 Idle 或类似名称
}
}
// 重置 manInjury 动画
if (mi != null)
{
var mAnim = mi.GetComponent<Animator>();
if (mAnim != null)
{
mAnim.SetBool("CheckFoot", false);
mAnim.Play("manInjury", 0, 0f); // 默认动画
}
// 重置所有的 Handler 状态
foreach (var handler in mi.GetComponentsInChildren<PingClickHandler>(true)) handler.ResetState();
foreach (var handler in mi.GetComponentsInChildren<ChanraoTuibuHandler>(true)) handler.ResetState();
}
// 找到 Shose 重置点击状态
var shose = GameObject.Find("Shose");
if (shose == null)
{
var allTransforms = Resources.FindObjectsOfTypeAll<Transform>();
foreach(var t in allTransforms) { if (t.parent == null && t.name == "Shose") { shose = t.gameObject; break; } }
}
if (shose != null)
{
var h = shose.GetComponent<ShoseClickHandler>();
if (h != null) h.ResetState();
}
ShowPage(Page.Home);
}
private System.Collections.IEnumerator StartInitialVoiceAndCameraRoutine()
{
float waitTime = 1f; // 默认等1秒
var am = FindObjectOfType<AudioManager>();
// 实验刚开始,立刻激活鞋子,不等语音播完
var shose = GameObject.Find("Shose");
if (shose == null)
{
// 如果被禁用了,找它的最顶层引用
var allTransforms = Resources.FindObjectsOfTypeAll<Transform>();
foreach(var t in allTransforms) { if (t.parent == null && t.name == "Shose") { shose = t.gameObject; break; } }
}
if (shose != null)
{
var h = shose.GetComponent<ShoseClickHandler>();
if (h == null) h = shose.AddComponent<ShoseClickHandler>();
h.targetPoint = GameObject.Find("ShosePoint")?.transform;
if (h.nextObject == null)
{
var chanraotuibu = GameObject.Find("chanraotuibu");
if (chanraotuibu == null)
{
var mi = GameObject.Find("manInjury");
if (mi != null) chanraotuibu = mi.transform.Find("chanraotuibu")?.gameObject;
}
h.nextObject = chanraotuibu;
}
shose.SetActive(false);
shose.SetActive(true);
Debug.Log("PageController: 开场动画结束,Shose 已立刻激活");
}
// 1. 强制播放第一句语音:“周围环境安全,我是救护志愿者,我可以帮助您吗”
if (am != null)
{
#if UNITY_EDITOR
var autoClip = UnityEditor.AssetDatabase.LoadAssetAtPath<AudioClip>("Assets/Audio/people/周围环境安全,我是救护志愿者,我可以帮助您吗.mp3");
if (autoClip != null)
{
am.PlayVoice(autoClip);
waitTime = autoClip.length + 1f;
}
#endif
}
Debug.Log($"PageController: 开始等待 {waitTime} 秒以切换摄像机并激活鞋子");
yield return new WaitForSeconds(waitTime);
// 2. 切换到 camera3
if (am != null) am.SwitchToCamera3();
}
private void HideShose()
{
var shose = GameObject.Find("Shose");
if (shose != null)
{
shose.SetActive(false);
}
}
#endregion
}