<解決Q30>

This commit is contained in:
qup35p 2025-11-19 21:07:17 +08:00
parent d0f3e2e70b
commit 1fe6a92210
2 changed files with 43 additions and 8 deletions

View File

@ -1,4 +1,4 @@
using System.Collections; using System.Collections;
using UnityEngine; using UnityEngine;
using UnityEngine.SceneManagement; using UnityEngine.SceneManagement;
using UnityEngine.UI; using UnityEngine.UI;
@ -11,6 +11,10 @@ public class ClientGameBackToRealSceneController : MonoBehaviour
public VideoPlayer videoPlayer; public VideoPlayer videoPlayer;
public RawImage videoDisplay; public RawImage videoDisplay;
// --- 【新增變數】用於追蹤兩個條件是否滿足 ---
private bool isVideoFinished = false;
private bool isSignalReceived = false;
private void Awake() private void Awake()
{ {
Instance = this; Instance = this;
@ -35,7 +39,7 @@ public class ClientGameBackToRealSceneController : MonoBehaviour
// 設置影片結束事件 // 設置影片結束事件
videoPlayer.loopPointReached += OnVideoFinished; videoPlayer.loopPointReached += OnVideoFinished;
// 設置影片顯示 // 設置影片顯示 (略)
if (videoDisplay != null) if (videoDisplay != null)
{ {
videoPlayer.targetTexture = null; videoPlayer.targetTexture = null;
@ -47,13 +51,43 @@ public class ClientGameBackToRealSceneController : MonoBehaviour
} }
} }
// 影片播放結束時呼叫
void OnVideoFinished(VideoPlayer vp) void OnVideoFinished(VideoPlayer vp)
{ {
Debug.Log("影片播放完成,準備跳轉"); Debug.Log("影片播放完成。");
if (!string.IsNullOrEmpty(ClientLastWordsSceneController.words)) isVideoFinished = true; // 影片結束標記設為 true
CheckAndLoadScene(); // 檢查是否可以跳轉
}
// --- 【新增方法】供 ClientMessageHandler 呼叫,標記訊號已收到 ---
public void ReceiveSignalFromPlayerB()
{
Debug.Log("收到玩家B的訊號 (gameFinalWords)。");
isSignalReceived = true; // 訊號接收標記設為 true
CheckAndLoadScene(); // 檢查是否可以跳轉
}
// --- 【新增方法】核心檢查跳轉邏輯 ---
private void CheckAndLoadScene()
{
// 確保 ClientLastWordsSceneController.words 已經有值
bool hasWords = !string.IsNullOrEmpty(ClientLastWordsSceneController.words);
if (isVideoFinished && isSignalReceived && hasWords)
{ {
Debug.Log("🎉 影片和訊號條件滿足,準備跳轉到下一場景...");
StartCoroutine(LoadNextScene()); StartCoroutine(LoadNextScene());
} }
else if (isVideoFinished && !isSignalReceived)
{
// 影片已結束,等待訊號
Debug.Log("影片已結束正在等待玩家B訊號...");
}
else if (!isVideoFinished && isSignalReceived)
{
// 訊號已收到,等待影片結束
Debug.Log("已收到玩家B訊號正在等待影片播放完成...");
}
} }
public IEnumerator LoadNextScene() public IEnumerator LoadNextScene()
@ -61,4 +95,4 @@ public class ClientGameBackToRealSceneController : MonoBehaviour
yield return new WaitForSeconds(0f); yield return new WaitForSeconds(0f);
SceneManager.LoadScene("ClientLastWordsScene"); SceneManager.LoadScene("ClientLastWordsScene");
} }
} }

View File

@ -1,4 +1,4 @@
using UnityEngine; using UnityEngine;
using Mirror; using Mirror;
using System; using System;
@ -81,10 +81,11 @@ public class ClientMessageHandler : MonoBehaviour
ClientLastWordsSceneController.words = msg.payload; ClientLastWordsSceneController.words = msg.payload;
if (ClientGameBackToRealSceneController.Instance) if (ClientGameBackToRealSceneController.Instance)
{ {
StartCoroutine( ClientGameBackToRealSceneController.Instance.LoadNextScene());                                 // ✅ 將直接跳轉的程式碼,改為呼叫新的檢查函式
                                ClientGameBackToRealSceneController.Instance.ReceiveSignalFromPlayerB();
} }
} }
} }
break; break;
case "gameTalkingStart": case "gameTalkingStart":