<解決Q7>
This commit is contained in:
parent
db145d5ba6
commit
5c37b03438
@ -90,12 +90,20 @@ public class NetworkMessageHandler : MonoBehaviour
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "workProcess":
|
case "workProcess":
|
||||||
{
|
{
|
||||||
switch(msg.payload)
|
switch (msg.payload)
|
||||||
{
|
{
|
||||||
case "exit":
|
case "exit":
|
||||||
if (ServerWorkSceneController.Instance)
|
// ⭐ 修正點 1: 處理 workProcess/exit
|
||||||
|
// 不再直接呼叫 processStep(9) 或 (10)。改為發送訊號給 Panel,讓 Panel 執行雙重檢查。
|
||||||
|
if (ServerWorkMessageReplyExitPanel.Instance)
|
||||||
{
|
{
|
||||||
|
Debug.Log("NetworkMessageHandler: 收到 workProcess/exit 訊號,通知影片面板。");
|
||||||
|
ServerWorkMessageReplyExitPanel.Instance.ReceiveClientSignal();
|
||||||
|
}
|
||||||
|
else if (ServerWorkSceneController.Instance)
|
||||||
|
{
|
||||||
|
// 備用機制:如果 Panel 不存在,則直接跳轉。
|
||||||
ServerWorkSceneController.Instance.processStep(9);
|
ServerWorkSceneController.Instance.processStep(9);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -109,7 +117,7 @@ public class NetworkMessageHandler : MonoBehaviour
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "gameSurvey":
|
case "gameSurvey":
|
||||||
{
|
{
|
||||||
GameMessageSurvey msgObj = JsonUtility.FromJson<GameMessageSurvey>(msg.payload);
|
GameMessageSurvey msgObj = JsonUtility.FromJson<GameMessageSurvey>(msg.payload);
|
||||||
|
|
||||||
if (msgObj != null)
|
if (msgObj != null)
|
||||||
@ -118,11 +126,27 @@ public class NetworkMessageHandler : MonoBehaviour
|
|||||||
GlobalData.SURVEY_STAR2 = msgObj.val2;
|
GlobalData.SURVEY_STAR2 = msgObj.val2;
|
||||||
GlobalData.SURVEY_STAR3 = msgObj.val3;
|
GlobalData.SURVEY_STAR3 = msgObj.val3;
|
||||||
GlobalData.SURVEY_TEXT = msgObj.text1;
|
GlobalData.SURVEY_TEXT = msgObj.text1;
|
||||||
|
|
||||||
|
// ⭐ 修正點 2: 處理 gameSurvey
|
||||||
|
// 收到問卷資料後,不再強制切換場景 (Step 10)。
|
||||||
|
// 我們讓 Panel 在影片播完後,再切換到 Step 10。
|
||||||
|
// 但是,如果 Client 先發送問卷 (gameSurvey),這代表 Client 已經通過了 exit 流程。
|
||||||
|
// 因此,我們將 gameSurvey 視為 Client 對整個 Exit 流程的確認。
|
||||||
|
|
||||||
if (ServerWorkSceneController.Instance)
|
if (ServerWorkSceneController.Instance)
|
||||||
{
|
{
|
||||||
//不用馬上跳場警,等到動畫結束自動跳場警
|
// 移除上次修正中新增的 processStep(10),改為呼叫雙重檢查。
|
||||||
//ServerWorkSceneController.Instance.processStep(10);
|
// 這是因為 gameSurvey 也是 Client 流程結束的訊號之一。
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 讓 ServerWorkMessageReplyExitPanel 執行雙重檢查
|
||||||
|
if (ServerWorkMessageReplyExitPanel.Instance)
|
||||||
|
{
|
||||||
|
Debug.Log("NetworkMessageHandler: 收到 gameSurvey 訊號,通知影片面板進行雙重檢查。");
|
||||||
|
ServerWorkMessageReplyExitPanel.Instance.ReceiveClientSignal();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 確保資料載入
|
||||||
if (ServerWorkMessageReplyExitSurveyPanel.Instance)
|
if (ServerWorkMessageReplyExitSurveyPanel.Instance)
|
||||||
{
|
{
|
||||||
ServerWorkMessageReplyExitSurveyPanel.Instance.loadSurveyData();
|
ServerWorkMessageReplyExitSurveyPanel.Instance.loadSurveyData();
|
||||||
|
|||||||
@ -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;
|
||||||
@ -12,14 +12,21 @@ public class ServerWorkMessageReplyExitPanel : 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Start()
|
void Start()
|
||||||
{
|
{
|
||||||
SetupVideoPlayer();
|
SetupVideoPlayer();
|
||||||
|
// ⭐ 重置狀態,確保每次啟動都是新的檢查
|
||||||
|
isVideoFinished = false;
|
||||||
|
isSignalReceived = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void play()
|
public void play()
|
||||||
@ -42,7 +49,8 @@ public class ServerWorkMessageReplyExitPanel : MonoBehaviour
|
|||||||
{
|
{
|
||||||
if (videoPlayer != null)
|
if (videoPlayer != null)
|
||||||
{
|
{
|
||||||
// 設置影片結束事件
|
// 設置影片結束事件,確保只訂閱一次
|
||||||
|
videoPlayer.loopPointReached -= OnVideoFinished;
|
||||||
videoPlayer.loopPointReached += OnVideoFinished;
|
videoPlayer.loopPointReached += OnVideoFinished;
|
||||||
|
|
||||||
// 設置影片顯示
|
// 設置影片顯示
|
||||||
@ -60,7 +68,37 @@ public class ServerWorkMessageReplyExitPanel : MonoBehaviour
|
|||||||
void OnVideoFinished(VideoPlayer vp)
|
void OnVideoFinished(VideoPlayer vp)
|
||||||
{
|
{
|
||||||
Debug.Log("影片播放完成");
|
Debug.Log("影片播放完成");
|
||||||
ServerWorkSceneController.Instance.processStep(10);
|
// ⭐ 設置影片完成旗標
|
||||||
|
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}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user