Unity 不规则按钮Custom2DCollider
来源:互联网 发布:linux安装软件sudo 编辑:程序博客网 时间:2024/06/10 23:24
有时候产品需求按钮不能是长方形,要三角形,五边形,甚至五角星行,这时你是不是方了,怎么做???
别鸡冻,其实unity有现成的哦!!!PolygonCollider2D!!!
给你的UI加上这个组件PolygonCollider2D,你就可以自定义形状了!
当然形状也可以代码控制,就是设置不规则图形的顶点位置,代码如下:
using UnityEngine;using System.Collections;using UnityEngine.EventSystems;public class CustonCollider2D : MonoBehaviour, IPointerClickHandler{ /// <summary> /// 多边形碰撞器 /// </summary> private PolygonCollider2D polygonCollider; private RectTransform rectTransform; void Start() { //获取多边形碰撞器 polygonCollider = transform.GetComponent<PolygonCollider2D>(); //获取RectTransform rectTransform = transform.GetComponent<RectTransform>(); Vector2[] v = new Vector2[6]; v[0] = new Vector2(-40, -15); v[1] = new Vector2(-20, 40); v[2] = new Vector2(25, 30); v[3] = new Vector2(40, 0); v[4] = new Vector2(40, -40); v[5] = new Vector2(-40, -40); SetPolygonColliderPoints(v); } public void OnPointerClick(PointerEventData eventData) { //这里做一些鼠标点击位置相对于Collider的位置处理 Vector2 local; local.x = eventData.position.x - (float)Screen.width / 2.0f - rectTransform.localPosition.x; local.y = eventData.position.y - (float)Screen.height / 2.0f - rectTransform.localPosition.y; bool isIn = IsPointInPolygon(local, polygonCollider.points); Debug.Log("看我有没有点击到你的Collider之内: " + isIn); } /// <summary> /// 设置PolyCollider2D的顶点的位置 /// </summary> /// <param name="vecs">Collider的顶点位置信息,最好按顺序编排,3个顶点以上才能构成一个平面哦</param> public void SetPolygonColliderPoints(Vector2[] vecs) { polygonCollider.points = vecs; } /// <summary> /// 判断鼠标点击点是否在PolygonCollider2D之内 /// </summary> /// <param name="point">鼠标点击位置</param> /// <param name="polygon">Collider的顶点位置信息</param> /// <returns></returns> public bool IsPointInPolygon(Vector2 point, Vector2[] polygon) { int polygonLength = polygon.Length; int i = 0; bool inside = false; float pointX = point.x; float pointY = point.y; float startX, startY, endX, endY; Vector2 endPoint = polygon[polygonLength - 1]; endX = endPoint.x; endY = endPoint.y; while (i < polygonLength) { startX = endX; startY = endY; endPoint = polygon[i++]; endX = endPoint.x; endY = endPoint.y; inside ^= (endY > pointY ^ startY > pointY) && ((pointX - endX) < (pointY - endY) * (startX - endX) / (startY - endY)); } return inside; }}
0 0
- Unity 不规则按钮Custom2DCollider
- unity不规则按钮点击
- Unity不规则按钮的实现
- 关于unity 不规则按钮的制作
- unity不规则按钮透明点击偏移问题
- Unity不规则碰撞
- unity不规则碰撞体
- Gtk显示不规则按钮
- c#使用不规则按钮
- android不规则图片按钮
- unity3d 不规则按钮
- Android 不规则按钮
- iOS不规则按钮实现
- cocos2d创建不规则按钮
- 制作出任意不规则按钮
- Android 实现不规则形状按钮
- cocos2dx 不规则按钮的实现
- Android不规则按钮实现方式
- centos7 mysql数据库安装和配置
- 两分钟实现安全完备的登录模块
- MongoDB自动删除过期数据--TTL索引
- Android native service实例(二)Healthd模块
- BottomNavigationView(底部导航)
- Unity 不规则按钮Custom2DCollider
- 易语言写DLL给C#调用读写注册表
- java线上定位总结
- qml所有属性
- linux系统管理中经常用到的几个命令
- JDK1.8源码阅读系列之二:LinkedList
- TextView添加下划线
- 初等数据结构之队列
- Java代码实现下载慕课网视频