| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- 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<GameObject>("StandbyVideoManager"));
- DontDestroyOnLoad(o);
- _ins = o.GetComponent<StandbyVideoManager>();
- //添加一个父物体
- o.transform.SetParent(ViewMgr.Instance.transform.Find("1").transform);
- CanvasScaler canvasScaler = o.transform.Find("Canvas").GetComponent<CanvasScaler>();
- if (canvasScaler != null)
- {
- Destroy(canvasScaler);
- }
- RectTransform rectTransform = canvasScaler.GetComponent<RectTransform>();
- 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();
- }
- }
|