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

Unity 不规则按钮实现的更多相关文章

  1. Unity不规则按钮点击区域(UGUI)

    文章目录 一. 前言 二. 最终效果 三. 实现 1.创建UICamera 2. UIPolygon节点 3. 编辑碰撞区域 5. 运行测试 6. UIPolygon代码 一. 前言 游戏开发中,可能 ...

  2. unity不规则按钮解决方案

    一种是alpha检测 一种是设置collider 参考: https://zhuanlan.zhihu.com/p/34204396 下面给出第二种方案代码 ///按钮多边形点击方案,注意Canvas ...

  3. ngui处理不规则按钮点击

    吐个槽  棋牌类游戏做什么中国地图!!!  然后就要用到不规则按钮点击了 你懂的 213的unity虽然已经加入了polygoncollider 2d的支持 但是 但是 但是 是2d的 也就是说如果不 ...

  4. [示例] Firemonkey 不规则按钮实做

    利用 Firemonkey 控件的组合及可塑性,可以做出千变万化的效果及功能,下面展示一个不规则按钮的实做: 效果图: 实做方法: 开一个新工程 Multi-Device Application 放一 ...

  5. 源码推荐(7.17):不规则按钮类似于遥控器按钮,一个可以最大程度简化PageView与TabView切换的第三方框架

    不规则按钮,类似于遥控器按钮,可以单独控制按钮的上下左右(作者:masa_chu) 不规则按钮,类似于遥控器按钮,可以单独控制按钮的上下左右 测试环境:Xcode 6.2,iOS 6.0以上 Lazy ...

  6. Qt5:不规则按钮的实现---通过贴图实现

    在应用开发中,有时候为了美观会在UI界面中增加不规则的按钮 现在我们就来看看Qt中是怎么实现不规则按钮的 /////////////////////////////////////////////// ...

  7. iOS 开源一个高度可定制支持各种动画效果,支持单击双击,小红点,支持自定义不规则按钮的tabbar

    TYTabbarAnimationDemo 业务需求导致需要做一个tabbar,里面的按钮点击带有动画效果,tabbar中间的按钮凸出,凸出部分可以点击,支持badge 小红点等,为此封装了一个高度可 ...

  8. UGUI之不规则按钮的响应区域

    比如一些不规则按钮最好可以设置它的响应区域.如下图所示,用Polygon Collider2D组件圈出精灵响应事件的区域. 注意 IsRaycastLocationValid 的判断区域是RectTr ...

  9. 在UNITY中按钮的高亮用POINT灯实现,效果别具一番风味

    在UNITY中按钮的高亮用POINT灯实现,效果别具一番风味

随机推荐

  1. python之set集合,基础篇

    集合:set 特点:1>.无序 ,因为集合是无序的,所以不可用下标值查询,也不可切片2>.去重 ,一个集合内不能有两个相同的元素3>.可添加,可删除,不可修改等等4>.集合内的 ...

  2. Linux基础 -03

    2.2.3 head-tail 命令 #------head #head pass #查看头部内容,默认前10行 #head -n5 pass #查看头部前5行,使用-n指定 #-------tail ...

  3. Linux(CentOS)下安装docker

    Linux(CentOS)安装Docker 查看当前内核版本 [docker@localhost ~]$ uname -r 确保yum包更新到最新 [docker@localhost ~]$ sudo ...

  4. Linux:linux网路路由命令

    查看路由 #查看所有路由信息 route -n 删除路由 #删除路由 route del default 修改路由 #修改路由 #先删除路由 route del default #在新建 route ...

  5. python自定义异常,使用raise引发异常

    1.自定义异常类,自定义的异常类必须是Exception或者Error的子类! 1 #!/usr/bin/env python 2 # encoding: utf-8 3 4 class Illega ...

  6. Redis中的布隆过滤器及其应用

    什么是布隆过滤器 布隆过滤器(Bloom Filter)是由Howard Bloom在1970年提出的一种比较巧妙的概率型数据结构,它可以告诉你某种东西一定不存在或者可能存在.当布隆过滤器说,某种东西 ...

  7. linux命令-------find命令之exec

    p.p1 { margin: 0; font: 18px "Hannotate SC"; color: rgba(4, 51, 255, 1); -webkit-text-stro ...

  8. centos7 之 设置环境变量(转载)

    设置centos环境变量,可以用export命令,也可以通过修改文件形式实现,本文以lavavel需要设置环境变量为例,将 /root/.config/composer/vendor/bin 路径加到 ...

  9. Java实验项目二——二维数组实现九九乘法表

    Program:打印乘法口诀表 (1)编写一个方法,参数(二维数组),完成将二维数组中的数据按照行列显示的工作. (2)编写一个测试方法,给出99乘法表,放入到二维数组中,调用(1)中的方法,显示乘法 ...

  10. Shell常用工具find,grep,sed,awk,xargs命令

    最近学习shell命令,对grep,sed,awk命令有点混乱,故小结一下,巩固一遍. 注意:find , grep , sed, awk可使用基本正则表达式字符,find,grep,awk也支持扩展 ...