using UnityEngine; using UnityEngine.UI; using UnityEngine.Video; public class StandbyVideoManager : MonoBehaviour { public RawImage videoDisplay; // UI上的RawImage public VideoPlayer videoPlayer; // VideoPlayer 组件 public GameObject uiPanel; // UI 界面的根面板 public float standbyTime = 10f; // 待机时间(秒) private bool isVideoPlaying = false; private float lastInputTime; public static StandbyVideoManager _ins; public static void Create() { if (_ins) return; GameObject o = Instantiate(Resources.Load("StandbyVideoManager")); DontDestroyOnLoad(o); _ins = o.GetComponent(); //添加一个父物体 o.transform.SetParent(ViewMgr.Instance.transform.Find("1").transform); CanvasScaler canvasScaler = o.transform.Find("Canvas").GetComponent(); if (canvasScaler != null) { Destroy(canvasScaler); } RectTransform rectTransform = canvasScaler.GetComponent(); rectTransform.anchorMin = Vector2.zero; // 左下角对齐父级 rectTransform.anchorMax = Vector2.one; // 右上角对齐父级 rectTransform.offsetMin = Vector2.zero; // 移除左下角偏移 rectTransform.offsetMax = Vector2.zero; // 移除右上角偏移 rectTransform.localScale = Vector3.one; // 确保缩放为 1 _ins.TriggerStandbyMode(); } void Start() { videoDisplay.gameObject.SetActive(false); // 初始时隐藏视频 videoPlayer.loopPointReached += OnVideoEnd; // 监听视频播放完毕 videoPlayer.isLooping = true; // 设置视频循环播放 ResetIdleTimer(); // 初始化计时器 } void Update() { DetectUserInput(); // 判断是否达到待机时间 if (!isVideoPlaying && Time.time - lastInputTime > standbyTime) { PlayStandbyVideo(); } // 监听鼠标或键盘输入退出视频 if (isVideoPlaying && (Input.anyKeyDown || Input.GetAxis("Mouse X") != 0 || Input.GetAxis("Mouse Y") != 0)) { StopVideo(); } } // 检测用户交互重置计时器 private void DetectUserInput() { // 用户输入重置计时器 if (Input.anyKeyDown || Input.GetAxis("Mouse X") != 0 || Input.GetAxis("Mouse Y") != 0) { ResetIdleTimer(); } } // 重置待机计时器 private void ResetIdleTimer() { lastInputTime = Time.time; } // 进入待机视频 public void PlayStandbyVideo() { videoDisplay.gameObject.SetActive(true); // 显示视频 videoPlayer.Play(); isVideoPlaying = true; } // 停止视频,回到 UI public void StopVideo() { videoPlayer.Stop(); videoDisplay.gameObject.SetActive(false); // 隐藏视频 isVideoPlaying = false; ResetIdleTimer(); } // 视频播放结束后自动回到UI private void OnVideoEnd(VideoPlayer vp) { // 仅当视频没有被手动停止时才执行 if (isVideoPlaying) { videoPlayer.Play(); // 重新开始播放 } } // 手动调用进入待机状态 public void TriggerStandbyMode() { PlayStandbyVideo(); } }