unity不规则按钮透明点击偏移问题
来源:互联网 发布:eva分析软件 编辑:程序博客网 时间:2024/05/29 15:52
因为最近做的东西需要不规则的UI,或者不规则的热点区域
使用eventAlphaThreshold(用的是5.3当然之后版本这个换成了alphaHitTestMinimumThreshold)
首先就想到了以前看过的使用alpha透明点击的方法(图片比较复杂,不适合画线)如下图
简单的代码如下,然后图片设置勾一个read/write,放在按钮上一般就可以了
using UnityEngine;using System.Collections;using UnityEngine.UI;using UnityEngine.EventSystems;public class alphaClick : MonoBehaviour, IPointerClickHandler{// Use this for initializationvoid Start () { GetComponent<Image>().eventAlphaThreshold = 0.5f; } public void OnPointerClick(PointerEventData eventData) { Debug.Log("这是一个圆形!"); } // Update is called once per frame void Update () {}}
但后来发现有的图片居然点击位置居然会不是很准确,一般点击区域会偏下
透明地方会响应,上面不透明的地方反而没反应
一开始还以为阈值设置问题或者是ps保存png的问题
后来才发现是unity图片设置问题
因为这样图片没有问题
而下面周边为了调整空间位置和大小故意留空白的图就有问题
从而发现了unity图片sprite设置里一般教程都没提到的一个问题
那就是mesh type设置
简单说用Tight模式如果你的图片周围有空白像素,它会帮你压缩掉减小面积(大量半透明绘制就减少drawcall啦),但是使用sprite的时候会增加面数;
如果用Full Rect模式不会压缩,也不会增加面数,其实就是一个quad,但是东西很多时候在渲染的时候空白的地方会产生大量drawcall,你把可以放到场景里看下就知道了面数了,但这个也造成了偏移,要注意了。
这个功能很像2D物理碰撞的碰撞体的边界,不同的是这个是影响drawcall的(和碰撞没关系,要是有关系的话就是算法比较类似吧,但这个不能手动调,只能通过Extrude Edges里面参数调整),就像其他3d物体的渲染边界框(bounds)一样
绿色是2d碰撞体
黑色是mesh type 里tight模式分割结果
当然这个设置,unity本身也并不能处理很好,就像polygon collider 2d一样有其他生成方法
比如SpriteSharp https://www.assetstore.unity3d.com/en/#!/content/37599
参考
https://docs.unity3d.com/ScriptReference/UI.Image-eventAlphaThreshold.html
https://forum.unity3d.com/threads/wip-tight-mesh-sprites-configurable-and-optimized.319608/
- unity不规则按钮透明点击偏移问题
- unity不规则按钮点击
- Android中不规则图片按钮透明区域的点击效果
- Unity 不规则按钮Custom2DCollider
- Unity不规则按钮的实现
- UGUI 不规则按钮的点击
- Unity 透明通道按钮
- gtk透明背景和不规则按钮
- Linux GTK+ 透明 不规则 按钮 Glade3
- 关于unity 不规则按钮的制作
- Unity UGUI不规则图片点击事件处理
- 自定义返回按钮偏移问题
- Unity导出的Android项目按钮无法点击问题
- 通过检测png图片透明区实现不规则按钮
- Android ImageView图片透明区域不响应点击事件,不规则图片透明区域响应点击事件
- unity 点击事件 点击 按钮还是屏幕
- cocos2d-x 不规则形状按钮的点击判定
- cocos2d-x中实现不规则按钮的点击效果
- linux命令大全——X WINDOWS SYSTEM
- nyoj496巡回赛-拓扑排序-拓扑序列
- 在java中调用weka聚类方法并显示相应的类标签+weka中创建arff数据
- Delphi自带的字符串分割函数Split
- 一般过去时
- unity不规则按钮透明点击偏移问题
- 分割字符串 ExtractStrings
- Unity 安卓手机 AssetBundle.LoadFromFile() SerializedFile占用大量内存
- Java复习总结——框架篇(三)
- 造轮子去了
- Vmware桥接模式下主机和和虚机间为何互相ping不通
- 基本数据类型以及变量的定义
- 复选框ChekcBox
- bootstrap里面的radio怎么写