Sfoglia il codice sorgente

13、控制鼠标点到相应的按键上时,相应的功能按键要高亮

lvjincheng 3 anni fa
parent
commit
1d96de93f7

+ 28 - 16
Assets/BowArrow/Scripts/Expand/SB_EventSystem.cs

@@ -23,7 +23,8 @@ public class SB_EventSystem : MonoBehaviour
 
     void Start() {
         mouseTest = new MouseTest(this);
-        InitListenerForMouseClickHightColor();
+        // InitListenerForMouseClickHightColor();
+        InitListenerForMouseHoverHightColor();
     }
 
     void Update() {
@@ -34,23 +35,34 @@ public class SB_EventSystem : MonoBehaviour
     [SerializeField] SimulateMouse simulateMouse;
 
     #region  客户要求鼠标点到按钮时,按钮高亮
-        Graphic lockGraphic = null;
-        Color pointerClickColor = Color.yellow;
-        void InitListenerForMouseClickHightColor() {
-            simulateMouse.OnPointerClick += (Selectable target) => {
-                if (lockGraphic) return;
+        // Graphic lockGraphic = null;
+        // Color pointerClickColor = Color.yellow;
+        // void InitListenerForMouseClickHightColor() {
+        //     simulateMouse.OnPointerClick += (Selectable target) => {
+        //         if (lockGraphic) return;
+        //         Button btn = target.GetComponent<Button>();
+        //         if (btn.transition != Selectable.Transition.ColorTint) return;
+        //         if (btn.targetGraphic) {
+        //             Graphic graphic = btn.targetGraphic;
+        //             lockGraphic = graphic;
+        //             Color oldColor = graphic.color;
+        //             graphic.color = pointerClickColor;
+        //             DoTweenUtil.CallDelay(0.3f, () => {
+        //                 lockGraphic = null;
+        //                 graphic.color = oldColor;    
+        //             });
+        //         }
+        //     };
+        // }
+        Color pointerHoverColor = Color.yellow;
+        void InitListenerForMouseHoverHightColor() {
+            simulateMouse.OnPointerEnter += (Selectable target) => {
                 Button btn = target.GetComponent<Button>();
+                if (!btn) return;
                 if (btn.transition != Selectable.Transition.ColorTint) return;
-                if (btn.targetGraphic) {
-                    Graphic graphic = btn.targetGraphic;
-                    lockGraphic = graphic;
-                    Color oldColor = graphic.color;
-                    graphic.color = pointerClickColor;
-                    DoTweenUtil.CallDelay(0.3f, () => {
-                        lockGraphic = null;
-                        graphic.color = oldColor;    
-                    });
-                }
+                ColorBlock colorBlock = btn.colors;
+                colorBlock.highlightedColor = pointerHoverColor;
+                btn.colors = colorBlock;
             };
         }
     #endregion

+ 8 - 6
Assets/JC/Untiy/SimulateMouse/SimulateMouse.cs

@@ -135,6 +135,8 @@ namespace JC.Unity {
             m_eventSystem.RaycastAll(m_pointerEvent, raycastResults);
  
             // Detect selectable
+            bool hasRaycastSelectable = false;
+            
             if (raycastResults.Count > 0)
             {
                 foreach (var result in raycastResults)
@@ -143,6 +145,7 @@ namespace JC.Unity {
  
                     if (newSelectable)
                     {
+                        hasRaycastSelectable = true;
                         if (newSelectable != m_currentSelectable)
                         {
                             Select(newSelectable);
@@ -152,7 +155,8 @@ namespace JC.Unity {
                     }
                 }
             }
-            else
+
+            if (!hasRaycastSelectable) 
             {
                 if (m_currentSelectable)
                 {
@@ -176,10 +180,6 @@ namespace JC.Unity {
                     m_dragHandler.OnDrag(m_pointerEvent);
                 }
             }
-            else
-            {
-                Select(null);
-            }
 
             mIsClick = false;
         }
@@ -188,7 +188,9 @@ namespace JC.Unity {
         {
             if (mIsDrag == true) return;
  
-            if (m_currentSelectable) m_currentSelectable.OnPointerExit(m_pointerEvent);
+            if (m_currentSelectable) {
+                m_currentSelectable.OnPointerExit(m_pointerEvent);
+            }
 
             m_currentSelectable = s;