Sfoglia il codice sorgente

1.视频流程修改操作

slambb 9 mesi fa
parent
commit
f2e4593c33

+ 4 - 0
Assets/BowArrow/InfraredCamera/InfraredDemo.cs

@@ -10,6 +10,7 @@ using System;
 using SmartBowSDK;
 using ZIM.Unity;
 using o0InfraredLocate.ZIM;
+using MyInfraredInsertcoin;
 
 public class InfraredDemo : JCUnityLib.ViewBase
 {
@@ -659,6 +660,9 @@ public class InfraredDemo : JCUnityLib.ViewBase
 
             infraredCameraHelper.OnPositionUpdate += (Vector2 point) =>
             {
+                //处理待机视频部分
+                StandbyVideoManager._ins?.DetectPointerMovement(point);
+
                 //跑九轴时候,不处理这里位置
                 if (AimHandler.ins && AimHandler.ins.bRuning9Axis()) return;
                 if (Camera.main == null) return;

+ 1 - 0
Assets/BowArrow/Scripts/Manager/HomeMgr.cs

@@ -3,6 +3,7 @@ using System.Collections.Generic;
 using UnityEngine;
 using JCUnityLib;
 using UnityEngine.SceneManagement;
+using MyInfraredInsertcoin;
 
 /* Home场景管理者 */
 public class HomeMgr : MonoBehaviour

+ 9 - 1
Assets/BowArrow/Scripts/SerialPortExample.cs

@@ -6,6 +6,7 @@ using Unity.VisualScripting;
 using UnityEngine;
 using UnityEngine.SceneManagement;
 using MySerialPortInterface;
+using MyInfraredInsertcoin;
 
 public class SerialPortExample : MonoBehaviour
 {
@@ -390,7 +391,14 @@ public class SerialPortExample : MonoBehaviour
                     {
                         Debug.Log("确认按下按键");
                         // AimHandler.ins.ExitIntoEvent();
-                        SceneManager.LoadScene("Home", LoadSceneMode.Single);
+                        if (SceneManager.GetActiveScene().name == "Home")
+                        {
+                            StandbyVideoManager._ins?.StopVideo();
+                        }
+                        else {
+                            SceneManager.LoadScene("Home", LoadSceneMode.Single);
+                        }
+
                         SendMessage(bytes, 3);
                         return;
                     }

File diff suppressed because it is too large
+ 7 - 89
Assets/Game_Hyperspace/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset


+ 100 - 7
Assets/Insertcoin/Resources/StandbyVideoManager.prefab

@@ -1,5 +1,82 @@
 %YAML 1.1
 %TAG !u! tag:unity3d.com,2011:
+--- !u!1 &2377874302249620802
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 3612269862244861106}
+  - component: {fileID: 5518230677289457925}
+  - component: {fileID: 6087639559172762629}
+  m_Layer: 0
+  m_Name: Panel
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &3612269862244861106
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2377874302249620802}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 5707355226056441729}
+  m_Father: {fileID: 3645032955081934617}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &5518230677289457925
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2377874302249620802}
+  m_CullTransparentMesh: 1
+--- !u!114 &6087639559172762629
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2377874302249620802}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0, g: 0, b: 0, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
 --- !u!1 &4861144799134537695
 GameObject:
   m_ObjectHideFlags: 0
@@ -12,6 +89,7 @@ GameObject:
   - component: {fileID: 2962409999273835233}
   - component: {fileID: 1035248642793421658}
   - component: {fileID: 1907543398391466497}
+  - component: {fileID: 7611668222533635398}
   m_Layer: 5
   m_Name: VideoDisplay
   m_TagString: Untagged
@@ -31,11 +109,11 @@ RectTransform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children: []
-  m_Father: {fileID: 3645032955081934617}
+  m_Father: {fileID: 3612269862244861106}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 1, y: 1}
+  m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 0, y: 0}
   m_Pivot: {x: 0.5, y: 0.5}
@@ -91,7 +169,7 @@ VideoPlayer:
   m_TargetMaterialRenderer: {fileID: 0}
   m_TargetMaterialProperty: <noninit>
   m_RenderMode: 2
-  m_AspectRatio: 2
+  m_AspectRatio: 1
   m_DataSource: 0
   m_PlaybackSpeed: 1
   m_AudioOutputMode: 2
@@ -109,6 +187,20 @@ VideoPlayer:
   m_WaitForFirstFrame: 1
   m_FrameReadyEventEnabled: 0
   m_VideoShaders: []
+--- !u!114 &7611668222533635398
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4861144799134537695}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 86710e43de46f6f4bac7c8e50813a599, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_AspectMode: 3
+  m_AspectRatio: 2.1641026
 --- !u!1 &7519419907736105347
 GameObject:
   m_ObjectHideFlags: 0
@@ -141,7 +233,7 @@ RectTransform:
   m_LocalScale: {x: 0, y: 0, z: 0}
   m_ConstrainProportionsScale: 0
   m_Children:
-  - {fileID: 5707355226056441729}
+  - {fileID: 3612269862244861106}
   m_Father: {fileID: 0}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -170,7 +262,7 @@ Canvas:
   m_VertexColorAlwaysGammaSpace: 0
   m_AdditionalShaderChannelsFlag: 0
   m_SortingLayerID: 0
-  m_SortingOrder: 99
+  m_SortingOrder: 1001
   m_TargetDisplay: 0
 --- !u!114 &4032723751134035338
 MonoBehaviour:
@@ -226,6 +318,7 @@ MonoBehaviour:
   m_EditorClassIdentifier: 
   videoDisplay: {fileID: 1035248642793421658}
   videoPlayer: {fileID: 1907543398391466497}
-  uiPanel: {fileID: 0}
-  standbyTime: 10
+  uiPanel: {fileID: 2377874302249620802}
+  standbyTime: 180
   renderTexture: {fileID: 8400000, guid: 3892396f702a81048ac5dc04f4be88f3, type: 2}
+  isUserInputEnabled: 1

+ 165 - 89
Assets/Insertcoin/Script/StandbyVideoManager.cs

@@ -1,125 +1,201 @@
 using UnityEngine;
 using UnityEngine.UI;
 using UnityEngine.Video;
+using UnityEngine.SceneManagement;
 
-public class StandbyVideoManager : MonoBehaviour
+namespace MyInfraredInsertcoin
 {
-    public RawImage videoDisplay;  // UI上的RawImage
-    public VideoPlayer videoPlayer; // VideoPlayer 组件
-    public GameObject uiPanel;  // UI 界面的根面板
-    public float standbyTime = 10f;  // 待机时间(秒)
-    public RenderTexture renderTexture;  // 用于渲染视频的 RenderTexture
+    public class StandbyVideoManager : MonoBehaviour
+    {
+        public RawImage videoDisplay;  // UI上的RawImage
+        public VideoPlayer videoPlayer; // VideoPlayer 组件
+        public GameObject uiPanel;  // UI 界面的根面板
+        public float standbyTime = 180f;  // 待机时间(秒)
+        public RenderTexture renderTexture;  // 用于渲染视频的 RenderTexture
 
-    private bool isVideoPlaying = false;
-    private float lastInputTime;
+        private bool isVideoPlaying = false;
+        private float lastInputTime;
 
-    public static StandbyVideoManager _ins;
+        // 控制外部是否启用用户输入检测
+        public bool isUserInputEnabled = true;
 
-    public static void Create()
-    {
-        if (_ins) return;
+        private bool isHomeScene = false; // 标记是否在 Home 场景
 
-        GameObject o = Instantiate(Resources.Load<GameObject>("StandbyVideoManager"));
-        DontDestroyOnLoad(o);
-        _ins = o.GetComponent<StandbyVideoManager>();
+        public static StandbyVideoManager _ins;
 
-        //添加一个父物体
-        o.transform.SetParent(ViewMgr.Instance.transform.Find("1").transform);
-        CanvasScaler canvasScaler = o.GetComponent<CanvasScaler>();
-        if (canvasScaler != null)
+        public static void Create()
         {
-            Destroy(canvasScaler);
+            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.GetComponent<CanvasScaler>();
+            if (canvasScaler != null)
+            {
+                Destroy(canvasScaler);
+            }
+            Canvas canvas = o.GetComponent<Canvas>();
+            canvas.overrideSorting = true;
+
+            RectTransform rectTransform = o.GetComponent<RectTransform>();
+            rectTransform.anchorMin = Vector2.zero;      // 左下角对齐父级
+            rectTransform.anchorMax = Vector2.one;       // 右上角对齐父级
+            rectTransform.offsetMin = Vector2.zero;      // 移除左下角偏移
+            rectTransform.offsetMax = Vector2.zero;      // 移除右上角偏移
+            rectTransform.localScale = Vector3.one;      // 确保缩放为 1
+
+            // 激活 videoDisplay 并开始播放视频
+            _ins.PlayStandbyVideo();
         }
 
-        RectTransform rectTransform = o.GetComponent<RectTransform>();
-        rectTransform.anchorMin = Vector2.zero;      // 左下角对齐父级
-        rectTransform.anchorMax = Vector2.one;       // 右上角对齐父级
-        rectTransform.offsetMin = Vector2.zero;      // 移除左下角偏移
-        rectTransform.offsetMax = Vector2.zero;      // 移除右上角偏移
-        rectTransform.localScale = Vector3.one;      // 确保缩放为 1
-
-        // 激活 videoDisplay 并开始播放视频
-        _ins.TriggerStandbyMode();
-    }
+        void Awake()
+        {
+            // 订阅场景加载事件
+            SceneManager.sceneLoaded += OnSceneLoaded;
+        }
 
-    void Start()
-    {
-        // 确保 RawImage 的纹理是设置为 RenderTexture
-        videoDisplay.texture = renderTexture;
+        void OnDisable()
+        {
+            // 取消订阅场景加载事件
+            SceneManager.sceneLoaded -= OnSceneLoaded;
+        }
 
-        // 确保 VideoPlayer 的 targetTexture 正确设置
-        videoPlayer.targetTexture = renderTexture;
+        private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
+        {
+            ResetIdleTimer();
+            // 如果加载的场景是 "Home" 场景,标记为 true
+            if (scene.name == "Home")
+            {
+                isHomeScene = true;
+            }
+            else
+            {
+                isHomeScene = false;
+            }
+        }
 
-        // 初始时隐藏视频
-       // videoDisplay.gameObject.SetActive(false);
-        videoPlayer.loopPointReached += OnVideoEnd;  // 监听视频播放完毕
-        videoPlayer.isLooping = true;  // 设置视频循环播放
+        void Start()
+        {
+            // 确保 RawImage 的纹理是设置为 RenderTexture
+            videoDisplay.texture = renderTexture;
 
-        ResetIdleTimer();  // 初始化计时器
-    }
+            // 确保 VideoPlayer 的 targetTexture 正确设置
+            videoPlayer.targetTexture = renderTexture;
+            videoPlayer.loopPointReached += OnVideoEnd;  // 监听视频播放完毕
+            videoPlayer.isLooping = true;  // 设置视频循环播放
 
-    public void PlayStandbyVideo()
-    {
-        // 先确保 videoDisplay 可见
-        videoDisplay.gameObject.SetActive(true);  // 显示视频
-        videoPlayer.Play();
-        isVideoPlaying = true;
-    }
+            // 获取视频的宽高比并应用到 AspectRatioFitter
+            AspectRatioFitter aspectFitter = videoDisplay.GetComponent<AspectRatioFitter>();
+            float aspectRatio = (float)videoPlayer.width / videoPlayer.height;
+            aspectFitter.aspectRatio = aspectRatio;
 
-    public void StopVideo()
-    {
-        videoPlayer.Stop();
-        videoDisplay.gameObject.SetActive(false);  // 隐藏视频
-        isVideoPlaying = false;
-        ResetIdleTimer();
-    }
+            ResetIdleTimer();  // 初始化计时器
+        }
 
+        // 进入待机视频
+        public void PlayStandbyVideo()
+        {
+            uiPanel.SetActive(true);  // 显示视频
+            videoPlayer.Play();
+            isVideoPlaying = true;
+        }
 
-    void Update()
-    {
-        DetectUserInput();
+        // 停止视频并重置定时器
+        public void StopAndReset()
+        {
+            videoPlayer.Stop();
+            uiPanel.SetActive(false);  // 隐藏视频
+            isVideoPlaying = false;
+            ResetIdleTimer();
+        }
 
-        // 判断是否达到待机时间
-        if (!isVideoPlaying && Time.time - lastInputTime > standbyTime)
+        void Update()
         {
-            PlayStandbyVideo();
+            // 只有在 Home 场景下才检测待机时间
+            if (isHomeScene)
+            {
+                // 判断是否达到待机时间,进入待机视频
+                if (!isVideoPlaying && Time.time - lastInputTime > standbyTime)
+                {
+                    PlayStandbyVideo();
+                }
+
+                // 模拟调用 DetectPointerMovement 检测光标移动
+                if (Input.GetAxis("Mouse X") != 0 || Input.GetAxis("Mouse Y") != 0)
+                {
+                    DetectPointerMovement(new Vector2(Input.mousePosition.x, Input.mousePosition.y));
+                }
+
+                // 模拟调用 SetUserInputEnabled 检测按键按下
+                //if (Input.anyKeyDown)
+                //{
+                //    StopVideo();
+                //}
+            }
+
         }
 
-        // 监听鼠标或键盘输入退出视频
-        if (isVideoPlaying && (Input.anyKeyDown || Input.GetAxis("Mouse X") != 0 || Input.GetAxis("Mouse Y") != 0))
+        // 重置待机计时器
+        private void ResetIdleTimer()
         {
-            StopVideo();
+            lastInputTime = Time.time;
         }
-    }
 
-    // 检测用户交互重置计时器
-    private void DetectUserInput()
-    {
-        if (Input.anyKeyDown || Input.GetAxis("Mouse X") != 0 || Input.GetAxis("Mouse Y") != 0)
+        // 视频播放结束后自动回到UI
+        private void OnVideoEnd(VideoPlayer vp)
         {
-            ResetIdleTimer();
+            // 仅当视频没有被手动停止时才执行
+            if (isVideoPlaying)
+            {
+                videoPlayer.Play();  // 重新开始播放
+            }
         }
-    }
 
-    // 重置待机计时器
-    private void ResetIdleTimer()
-    {
-        lastInputTime = Time.time;
-    }
+        #region 光标移动,触发关闭视频video
+        private Vector2 lastPoint = Vector2.zero;  // 记录上一次光点位置
+        private float movementThreshold = 10f;  // 设定的移动触发阈值
 
-    // 视频播放结束后自动回到UI
-    private void OnVideoEnd(VideoPlayer vp)
-    {
-        // 仅当视频没有被手动停止时才执行
-        if (isVideoPlaying)
+        // 检测光点(光标)移动并调用 EnableUserInput
+        /// <summary>
+        /// 输入当前移动的ui点
+        /// </summary>
+        /// <param name="currentPoint"></param>
+        public void DetectPointerMovement(Vector2 currentPoint)
         {
-            videoPlayer.Play();  // 重新开始播放
+            if (lastPoint == Vector2.zero)
+            {
+                lastPoint = currentPoint;  // 初始化位置
+                return;
+            }
+
+            // 计算光点移动的距离
+            float distance = Vector2.Distance(lastPoint, currentPoint);
+
+            if (distance > movementThreshold)
+            {
+                StopVideo();
+                lastPoint = currentPoint;  // 更新上次光点位置
+            }
         }
-    }
-
-    // 手动调用进入待机状态
-    public void TriggerStandbyMode()
-    {
-        PlayStandbyVideo();
+        /// <summary>
+        /// 外部手动调用停止视频
+        /// </summary>
+        public void StopVideo()
+        {
+            // 监听退出视频
+            if (isVideoPlaying)
+            {
+                StopAndReset();  // 调用优化后的停止并重置函数
+            }
+            else {
+
+                ResetIdleTimer();
+            }
+        }
+        #endregion
     }
 }

+ 1 - 1
Assets/Resources/SerialPortTest.prefab

@@ -956,7 +956,7 @@ Canvas:
   m_VertexColorAlwaysGammaSpace: 0
   m_AdditionalShaderChannelsFlag: 25
   m_SortingLayerID: 0
-  m_SortingOrder: 2
+  m_SortingOrder: 1005
   m_TargetDisplay: 0
 --- !u!114 &2905901602838462610
 MonoBehaviour:

File diff suppressed because it is too large
+ 7 - 89
Assets/ThirdAssets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset


Some files were not shown because too many files changed in this diff