From cd482fde08a470295bab4a7096b26aa5d826da75 Mon Sep 17 00:00:00 2001 From: shenjianxing <”315615051@qq.com“> Date: Thu, 20 Mar 2025 13:21:32 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=82=E9=85=8DVR=E4=B8=80=E4=BD=93=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GCSeries/Core/Scripts/Input/ZPointer.cs | 14 ++++++++++++ .../UIKit/Scripts/Resources/VRUIRoot.prefab | 10 +++++++-- Assets/Scripts/Actions/HighLightAction.cs | 3 +++ Assets/Scripts/Actions/MoveAction.cs | 4 ++-- .../Scripts/Conditions/ObjClickCondition.cs | 22 ++++++++++++++++++- Assets/Scripts/Conditions/UIClickCondition.cs | 10 +++++++++ Assets/Scripts/Item/DeviceItem.cs | 3 +++ 7 files changed, 61 insertions(+), 5 deletions(-) diff --git a/Assets/GCSeries/Core/Scripts/Input/ZPointer.cs b/Assets/GCSeries/Core/Scripts/Input/ZPointer.cs index 17473a8a..c7e7ff06 100644 --- a/Assets/GCSeries/Core/Scripts/Input/ZPointer.cs +++ b/Assets/GCSeries/Core/Scripts/Input/ZPointer.cs @@ -49,6 +49,11 @@ namespace GCSeries.Core.Input { } + + [Serializable] + public class CollisionClickEvent : UnityEvent + { + } //////////////////////////////////////////////////////////////////////// // Inspector Fields //////////////////////////////////////////////////////////////////////// @@ -170,6 +175,11 @@ namespace GCSeries.Core.Input [Tooltip("Event dispatched when the pointer exits an object.")] public CollisionEvent OnObjectExited = new CollisionEvent(); + + [Tooltip("")] + public CollisionClickEvent OnClick = new CollisionClickEvent(); + + /// /// Event dispatched when a pointer button becomes pressed. /// @@ -726,6 +736,10 @@ namespace GCSeries.Core.Input if (this._buttonState[i].BecamePressed) { this.OnButtonPressed.Invoke(this, i); + if (_hitInfo.gameObject != null) + { + this.OnClick.Invoke(this, i, _hitInfo.gameObject); + } } if (this._buttonState[i].BecameReleased) diff --git a/Assets/QFramework/Toolkits/UIKit/Scripts/Resources/VRUIRoot.prefab b/Assets/QFramework/Toolkits/UIKit/Scripts/Resources/VRUIRoot.prefab index 8e102a18..43361eab 100644 --- a/Assets/QFramework/Toolkits/UIKit/Scripts/Resources/VRUIRoot.prefab +++ b/Assets/QFramework/Toolkits/UIKit/Scripts/Resources/VRUIRoot.prefab @@ -372,7 +372,7 @@ MonoBehaviour: m_EditorClassIdentifier: EventCamera: {fileID: 263436429275714491} Visualization: {fileID: 7822688151064336048} - MaxHitDistance: 0.75 + MaxHitDistance: 1.5 MaxHitRadius: 0 IgnoreMask: serializedVersion: 2 @@ -392,6 +392,9 @@ MonoBehaviour: OnObjectExited: m_PersistentCalls: m_Calls: [] + OnClick: + m_PersistentCalls: + m_Calls: [] OnButtonPressed: m_PersistentCalls: m_Calls: [] @@ -1583,7 +1586,7 @@ MonoBehaviour: m_EditorClassIdentifier: EventCamera: {fileID: 263436429275714491} Visualization: {fileID: 6603607056250446267} - MaxHitDistance: 0.3 + MaxHitDistance: 1.5 MaxHitRadius: 0 IgnoreMask: serializedVersion: 2 @@ -1603,6 +1606,9 @@ MonoBehaviour: OnObjectExited: m_PersistentCalls: m_Calls: [] + OnClick: + m_PersistentCalls: + m_Calls: [] OnButtonPressed: m_PersistentCalls: m_Calls: [] diff --git a/Assets/Scripts/Actions/HighLightAction.cs b/Assets/Scripts/Actions/HighLightAction.cs index 03ae7af9..ba7e7ca3 100644 --- a/Assets/Scripts/Actions/HighLightAction.cs +++ b/Assets/Scripts/Actions/HighLightAction.cs @@ -90,6 +90,9 @@ namespace QFramework break; } } +#if VR + effect.constantWidth = false; +#endif } else { diff --git a/Assets/Scripts/Actions/MoveAction.cs b/Assets/Scripts/Actions/MoveAction.cs index 6507bcfe..67316669 100644 --- a/Assets/Scripts/Actions/MoveAction.cs +++ b/Assets/Scripts/Actions/MoveAction.cs @@ -58,9 +58,9 @@ public class MoveAction : IAction { obj = UIRoot.Instance.transform.Find("ZFrame").gameObject; } -#else - obj = Utility.FindObj(path); #endif + obj = Utility.FindObj(path); + if (obj == null) { Debug.LogError($"ûҵ·{path}"); diff --git a/Assets/Scripts/Conditions/ObjClickCondition.cs b/Assets/Scripts/Conditions/ObjClickCondition.cs index 91d073b8..cd0c2e89 100644 --- a/Assets/Scripts/Conditions/ObjClickCondition.cs +++ b/Assets/Scripts/Conditions/ObjClickCondition.cs @@ -1,3 +1,4 @@ +using GCSeries.Core.Input; using System; using System.Collections.Generic; using System.IO; @@ -17,6 +18,7 @@ namespace QFramework string path; string deviceName; bool isRight; + public static ObjClickCondition Allocate(string path, Dictionary datas) { var conditionAction = mSimpleObjectPool.Allocate(); @@ -49,6 +51,9 @@ namespace QFramework } } } +#if VR + +#else if (Input.GetMouseButtonUp(0) && EventSystem.current.IsPointerOverGameObject() == false) { Vector3 mousePos = Input.mousePosition; @@ -66,7 +71,7 @@ namespace QFramework } } } - +#endif return false; } @@ -76,7 +81,22 @@ namespace QFramework public ActionStatus Status { get; set; } public void OnStart() { +#if VR + UIRoot.Instance.transform.Find("ZMouse").GetComponent().OnClick.AddListener(OnClick); + UIRoot.Instance.transform.Find("ZStylus").GetComponent().OnClick.AddListener(OnClick); +#endif } +#if VR + public void OnClick(ZPointer pointer, int index, GameObject obj) + { + if (this.obj != null && obj == this.obj) + { + this.Finish(); + UIRoot.Instance.transform.Find("ZMouse").GetComponent().OnClick.RemoveListener(OnClick); + UIRoot.Instance.transform.Find("ZStylus").GetComponent().OnClick.RemoveListener(OnClick); + } + } +#endif public void OnExecute(float dt) { diff --git a/Assets/Scripts/Conditions/UIClickCondition.cs b/Assets/Scripts/Conditions/UIClickCondition.cs index 2f705764..7e93e35a 100644 --- a/Assets/Scripts/Conditions/UIClickCondition.cs +++ b/Assets/Scripts/Conditions/UIClickCondition.cs @@ -28,9 +28,19 @@ namespace QFramework { if (obj == null) { +#if VR + if (uiPath.Contains("UIRoot/")) + { + uiPath = uiPath.Replace("UIRoot/", "UIRoot/ZCameraRig/ZCanvas/"); + } +#endif obj = Utility.FindObj(uiPath); } +#if VR + if (obj != null && Input.GetMouseButtonUp(0)) +#else if (obj != null && Input.GetMouseButtonUp(0) && EventSystem.current.IsPointerOverGameObject()) +#endif { return obj == EventSystem.current.currentSelectedGameObject; } diff --git a/Assets/Scripts/Item/DeviceItem.cs b/Assets/Scripts/Item/DeviceItem.cs index 144067df..678b4030 100644 --- a/Assets/Scripts/Item/DeviceItem.cs +++ b/Assets/Scripts/Item/DeviceItem.cs @@ -22,6 +22,9 @@ public class DeviceItem : MonoBehaviour effect.outlineColor = Utility.ToColor(device.HighColor); StringEventSystem.Global.Register(Global.HighLightTrigger, OnHighLightTriggerEvent); TypeEventSystem.Global.Register(OnStepChanged); +#if VR + effect.constantWidth = false; +#endif } if (device.MeshCollider) {