104 lines
2.9 KiB
C#
104 lines
2.9 KiB
C#
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}");
|
|
}
|
|
}
|
|
} |