标签:cat 一个 脚本 原来 text 正交 system event 不规则
1.先重写Image类,实现对Image图形范围的重写;
2.对不规则按钮添加Polygon Collider2D组件,调整大小圈中要点击的范围;
3.将重写的Image类添加到不规则按钮上时,需要移除不规则按钮上原来的Image组件,因为这个是继承Image,一个物体上不能同时有两个Image组件,并取消注释下面不绘制图片的代码;
或者在不规则按钮下新建个空物体添加脚本,此时需要注意取消勾选父物体的Image组件的Raycast Target属性,并且不规则按钮下的Image、Text等都需要取消勾选该属性。
4.注意 IsRaycastLocationValid(判断点击是否生效的范围) 的判断区域是RectTransform的区域。 如果 polygon Collider编辑出来的区域大于RectTransform , 必须调节RectTransform的区域。
using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine; using UnityEngine.UI; [RequireComponent(typeof(PolygonCollider2D))] public class MyUIPolygon : Image { // Polygon -- 多边形 private PolygonCollider2D polygon = null; public PolygonCollider2D Polygon { get { if (polygon == null) polygon = transform.GetComponent<PolygonCollider2D>(); return polygon; } } #region 不绘制图片 //protected MyUIPolygon() //{ // useLegacyMeshGeneration = true; //} ////UI元素需要生成顶点时的回调函数 ////由 Text、Image 和 RawImage 使用,例如用于生成特定于其用例的顶点 ////VertexHelper:可辅助为 UI 生成网格的 Utility 类。 //protected override void OnPopulateMesh(VertexHelper vh) //{ // vh.Clear(); //} #endregion //检测点击到的图片位置是否生效 //相机必须为正交视角。具体不知道 //IsRaycastLocationValid 给定一个点和一个摄像机,判断射线投射是否有效。 //重载该方法 该方法会在父类中调用 //重新该方法还可以阻断子物体接收射线检测 public override bool IsRaycastLocationValid(Vector2 screenPoint, Camera eventCamera) { //point 世界空间中的点。 bool isResult = Polygon.OverlapPoint(eventCamera.ScreenToWorldPoint(screenPoint)); print(isResult); return isResult; } #if UNITY_EDITOR //重置PolygonCollider2D大小和图片位置 protected override void Reset() { base.Reset(); transform.localPosition = Vector3.zero; var w = rectTransform.sizeDelta.x * 0.5f + 0.1f; var h = rectTransform.sizeDelta.y * 0.5f + 0.1f; Polygon.points = new[] { new Vector2(-w, -h), new Vector2(w, -h), new Vector2(w, h), new Vector2(-w, h) }; } [CustomEditor(typeof(MyUIPolygon), true)] public class MyUIPolygonInspector : Editor { public override void OnInspectorGUI() { } } #endif }
详细的可以看雨松大大的文章 https://www.xuanyusong.com/archives/3492
标签:cat 一个 脚本 原来 text 正交 system event 不规则
原文地址:https://www.cnblogs.com/PanPan21/p/14928517.html