using System.Collections; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; using UnityEngine.Video; public class ServerWorkMessageReplyExitPanel : MonoBehaviour { public static ServerWorkMessageReplyExitPanel Instance; [Header("影片播放")] public VideoPlayer videoPlayer; public RawImage videoDisplay; // ⭐ 新增:雙重檢查旗標 private bool isVideoFinished = false; private bool isSignalReceived = false; private void Awake() { Instance = this; } void Start() { SetupVideoPlayer(); // ⭐ 重置狀態,確保每次啟動都是新的檢查 isVideoFinished = false; isSignalReceived = false; } public void play() { if (videoPlayer != null) { videoPlayer.Play(); } } public void stop() { if (videoPlayer != null) { videoPlayer.Stop(); } } void SetupVideoPlayer() { if (videoPlayer != null) { // 設置影片結束事件,確保只訂閱一次 videoPlayer.loopPointReached -= OnVideoFinished; videoPlayer.loopPointReached += OnVideoFinished; // 設置影片顯示 if (videoDisplay != null) { videoPlayer.targetTexture = null; videoPlayer.renderMode = VideoRenderMode.RenderTexture; RenderTexture rt = new RenderTexture(1920, 1080, 24); videoPlayer.targetTexture = rt; videoDisplay.texture = rt; } } } void OnVideoFinished(VideoPlayer vp) { Debug.Log("影片播放完成"); // ⭐ 設置影片完成旗標 isVideoFinished = true; // ⭐ 嘗試切換場景 TryProceedToNextStep(); } // ⭐ 新增:接收 Client 訊號的方法 (由 NetworkMessageHandler 呼叫) public void ReceiveClientSignal() { Debug.Log("收到 Client 的 Exit 訊號。"); // ⭐ 設置訊號接收旗標 isSignalReceived = true; // ⭐ 嘗試切換場景 TryProceedToNextStep(); } // ⭐ 核心邏輯:只有在兩個條件都滿足時才切換場景 private void TryProceedToNextStep() { // 只有當影片播放完成 (isVideoFinished) 且 Client 訊號已收到 (isSignalReceived) 時,才執行下一步驟。 if (isVideoFinished && isSignalReceived) { Debug.Log("雙重檢查通過:影片和訊號皆已完成,切換到 Step 10。"); if (ServerWorkSceneController.Instance != null) { ServerWorkSceneController.Instance.processStep(10); } } else { Debug.Log($"等待另一個條件完成。狀態:影片完成={isVideoFinished}, 訊號接收={isSignalReceived}"); } } }