UGUI_不规则按钮的响应区域
1.用Polygon Collider2D組件圈出精靈響應事件的區域。
?
注意?IsRaycastLocationValid 的判斷區域是RectTransform的區域。 如果 polygon Collider編輯出來的區域大于RectTransform , 必須調節RectTransform的區域。
例子:比如想把按鈕的點擊區域改成不規則的。
1.把按鈕的image的RaycastTarget關閉勾選
2.在子節點創建新的gameObject掛上下面UIPolygon腳本。
3.編輯Polygon的區域即可。
?
C#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | using UnityEngine; using System.Collections; using UnityEngine.UI; #if UNITY_EDITOR using UnityEditor; #endif [RequireComponent(typeof(PolygonCollider2D))] public class UIPolygon : Image { ????private PolygonCollider2D _polygon = null; ????private PolygonCollider2D polygon ????{ ????????get{ ????????????if(_polygon == null ) ????????????????_polygon = GetComponent<PolygonCollider2D>(); ????????????return _polygon; ????????} ????} ????protected UIPolygon() ????{ ????????useLegacyMeshGeneration = true; ????} ????protected override void OnPopulateMesh(VertexHelper vh) ????{ ????????vh.Clear(); ????} ????public override bool IsRaycastLocationValid(Vector2 screenPoint, Camera eventCamera) ????{ ????????return polygon.OverlapPoint( eventCamera.ScreenToWorldPoint(screenPoint)); ????} ? ? #if UNITY_EDITOR ????protected override void Reset() ????{ ????????base.Reset(); ????????transform.localPosition = Vector3.zero; ????????float w = (rectTransform.sizeDelta.x *0.5f) + 0.1f; ????????float h = (rectTransform.sizeDelta.y*0.5f)??+ 0.1f; ????????polygon.points = new Vector2[] ????????{ ????????????new Vector2(-w,-h), ????????????new Vector2(w,-h), ????????????new Vector2(w,h), ????????????new Vector2(-w,h) ??????????}; ????} #endif } #if UNITY_EDITOR [CustomEditor(typeof(UIPolygon), true)] public class UIPolygonInspector : Editor { ????public override void OnInspectorGUI() ????{ ????} } #endif |
? ?
總結
以上是生活随笔為你收集整理的UGUI_不规则按钮的响应区域的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UGUI_UGUI事件系统简述及使用方法
- 下一篇: UGUI_不添加摄像机解决UI与UI特效