Unity不规则按钮点击区域(UGUI)
一. 前言
游戏开发中,可能有一些不规则按钮,而且必须严格检测不规则区域是否被点击到。一个常见的例子就是地图板块按钮。
二. 最终效果
注:有同学私信说没做出来,所以我把Demo
工程上传到GitHub
中了,感兴趣的同学可以下载来学习。
GitHub
地址:https://github.com/linxinfa/Unity-UIPolygon-Demo
三. 实现
1、创建UICamera
创建一个Camera
,重命名为UICamera
,设置Culling Mask
为UI
,设置相机的投射模式(Projection
)为正交模式(Orthographic
),注意主摄像机的Culling Mask
去掉UI
层。
Canvas
使用Screen Space - Camera
模式,并赋值UICamera
。
注意,UICamera
不需要Audio Listener
,直接去掉。
2. UIPolygon节点
在Button
的子节点创建一个空节点(这里重命名为UIPolygon
),挂上UIPolygon
脚本(脚本代码见文章最下面),会自动挂上Polygon Collider 2D
组件,将坐标归零。
3. 编辑碰撞区域
选中UIPolygon
节点,点击Polygon Collider 2D
组件中的Edit Collider
旁边的按钮,即可直接编辑多边形碰撞形状。
最后要调节Width
和Height
,确保包住整个不规则碰撞区域。
5. 运行测试
运行效果见文章开头。
6. UIPolygon代码
1 using UnityEngine;
2 using UnityEngine.UI;
3 #if UNITY_EDITOR
4 using UnityEditor;
5 #endif
6
7 [RequireComponent(typeof(PolygonCollider2D))]
8 public class UIPolygon : Image
9 {
10 private PolygonCollider2D _polygon = null;
11 private PolygonCollider2D polygon
12 {
13 get{
14 if(_polygon == null )
15 _polygon = GetComponent<PolygonCollider2D>();
16 return _polygon;
17 }
18 }
19
20 //设置只响应点击,不进行渲染
21 protected UIPolygon()
22 {
23 useLegacyMeshGeneration = true;
24 }
25
26 protected override void OnPopulateMesh(VertexHelper vh)
27 {
28 vh.Clear();
29 }
30
31 public override bool IsRaycastLocationValid(Vector2 screenPoint, Camera eventCamera)
32 {
33 return polygon.OverlapPoint( eventCamera.ScreenToWorldPoint(screenPoint));
34 }
35
36 #if UNITY_EDITOR
37 protected override void Reset()
38 {
39 //重置不规则区域
40 base.Reset();
41 transform.position = Vector3.zero;
42 float w = (rectTransform.sizeDelta.x *0.5f) + 0.1f;
43 float h = (rectTransform.sizeDelta.y *0.5f) + 0.1f;
44 polygon.points = new Vector2[]
45 {
46 new Vector2(-w,-h),
47 new Vector2(w,-h),
48 new Vector2(w,h),
49 new Vector2(-w,h)
50 };
51 }
52 #endif
53 }
54
55 #if UNITY_EDITOR
56 [CustomEditor(typeof(UIPolygon), true)]
57 public class UIPolygonInspector : Editor
58 {
59 public override void OnInspectorGUI()
60 {
61 //什么都不写用于隐藏面板的显示
62 }
63 }
64 #endif
Unity不规则按钮点击区域(UGUI)的更多相关文章
- ngui处理不规则按钮点击
吐个槽 棋牌类游戏做什么中国地图!!! 然后就要用到不规则按钮点击了 你懂的 213的unity虽然已经加入了polygoncollider 2d的支持 但是 但是 但是 是2d的 也就是说如果不 ...
- UGUI之不规则按钮的响应区域
比如一些不规则按钮最好可以设置它的响应区域.如下图所示,用Polygon Collider2D组件圈出精灵响应事件的区域. 注意 IsRaycastLocationValid 的判断区域是RectTr ...
- Unity 不规则按钮实现
1.先重写Image类,实现对Image图形范围的重写: 2.对不规则按钮添加Polygon Collider2D组件,调整大小圈中要点击的范围: 3.将重写的Image类添加到不规则按钮上时,需要移 ...
- unity不规则按钮解决方案
一种是alpha检测 一种是设置collider 参考: https://zhuanlan.zhihu.com/p/34204396 下面给出第二种方案代码 ///按钮多边形点击方案,注意Canvas ...
- 关于使用Html5 canvas、 map、jquery构造不规则变色点击区域 热点区域
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Android不规则点击区域详解
Android不规则点击区域详解 摘要 今天要和大家分享的是Android不规则点击区域,准确说是在视觉上不规则的图像点击响应区域分发. 其实这个问题比较简单,对于很多人来说根本不值得做为一篇博文写出 ...
- iOS 增加UIButton按钮的可点击区域
在很多时候,按钮可能看起来那么大,但是在它周围进行点击时,都能够触发事件,是因为它的可点击区域比我们看到的button要大. 在使用AutoLayout的时候,我们处理的是按钮的image属性,所以这 ...
- 第七篇、hitTest UITabbar中间突出按钮额外增加可点击区域
简介: 以前UITabbar使用中间有一个凸起按钮时,常常就需要用到hitTest来处理可点击的范围. 示例代码: - (UIView *)hitTest:(CGPoint)point withEve ...
- iOS扩大UIButton按钮的可点击区域
一.开发中遇到的问题 我们在开发时有时遇到这中情况:UI给的图片很小,button的点击区域要求比较大.如果用 setBackgroundImage: 方式设置图片会导致图片也跟着button的fra ...
随机推荐
- [云计算] OpenStack 发展史
传统数据中心面临的问题 无法管理,资源利用率不高 资源分配不合理 初始成本高 发展阶段 IDC 托管/租用 VPS(虚拟专用主机/OpenVZ/XEN) 虚拟主机 云主机 虚拟化 服务器虚拟化 KVM ...
- [刷题] PTA 03-树1 树的同构
程序: 1 #include <stdio.h> 2 #define MaxTree 10 3 #define ElementType char 4 #define Tree int 5 ...
- 云计算OpenStack核心组件---glance镜像服务(6)
一.glance介绍: Glance是Openstack项目中负责镜像管理的模块,其功能包括虚拟机镜像的查找.注册和检索等. Glance提供Restful API可以查询虚拟机镜像的metadata ...
- exec函数族实例解析-(转自blankqdb)
fork()函数通过系统调用创建一个与原来进程(父进程)几乎完全相同的进程(子进程是父进程的副本,它将获得父进程数据空间.堆.栈等资源的副本.注意,子进程持有的是上述存储空间的"副本&quo ...
- 关于Ajax 的 cache 属性 (Day_34)
最近做项目,在某些页面显示,ajax刷新总是拿不到新内容,时常需要清除缓存,才能到达想要的效果. 经过再次查看文档,最后加了一行属性:cache:false 即可解决问题 我们先看下文档的说明: 可以 ...
- Spring 是什么?
概述 Spring 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好.易于测试.可重用的代码. Spring 框架是一个开源的 Ja ...
- rocketmq常见问题及使用 新手篇
一 部署阶段 1.启动命令 nameServer启动:nohup sh bin/mqnamesrv -n ip地址:9876 & broker启动:nohup sh bin/mqbroker ...
- Redis限制一键登录次数
一.产生背景 之前的随笔提到过项目中写了一键登录功能.上线后除了有时候网络波动会导致登陆失败,其他情况一直稳如老狗 しかし,邮件看到有人恶意刷一键登录,这年头闲的人可真闲啊, 只能思考如何搞一搞 二. ...
- 80个Python练手项目列表
80个Python练手项目列表 我若将死,给孩子留遗言,只留一句话:Repetition is the mother of all learning重复是学习之母.他们将来长大,学知识,技巧.爱情 ...
- Docker学习(14) Docker容器的数据管理
Docker容器的数据管理 Docker容器的数据卷 重要: Docker的数据卷容器 Docker数据卷的备份和还原