unity不规则按钮透明点击偏移问题
2016-12-07 15:24
676 查看
因为最近做的东西需要不规则的UI,或者不规则的热点区域
使用eventAlphaThreshold(用的是5.3当然之后版本这个换成了alphaHitTestMinimumThreshold)
首先就想到了以前看过的使用alpha透明点击的方法(图片比较复杂,不适合画线)如下图
简单的代码如下,然后图片设置勾一个read/write,放在按钮上一般就可以了
但后来发现有的图片居然点击位置居然会不是很准确,一般点击区域会偏下
透明地方会响应,上面不透明的地方反而没反应
一开始还以为阈值设置问题或者是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/
使用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 initialization void 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/
相关文章推荐
- VGScene 学习日志一:关于TvgScene设置为透明后,里面的按钮不能点击的问题记录
- Android中不规则图片按钮透明区域的点击效果
- Unity导出的Android项目按钮无法点击问题
- 【酷熊科技】工作积累 ----------- unity scrollview 点击后会有偏移问题(有图片)
- WPF按钮清空自带样式,以及透明按钮时,Grid的Background属性设置引起"点击"问题.
- Android代码片段二:不规则图形按钮非透明区的点击
- dojo grid遇到的问题 点击按钮“全选”'删除"无法实现
- Android Alert Dialog解决点击按钮对话框不关闭的问题
- android中ListView点击和里边按钮点击不能同时生效问题解决
- 解决点击回车触发按钮的问题
- CButtonST的tooltip在点击按钮后消失的问题~~~
- 关于页面之间传参时有空格,中文及点击页面后退按钮的问题
- FCKEditor 验证为空需要点击两次提交按钮的问题
- 解决:防止页面按钮被重复点击,导致页面重复提交的问题
- moss中点击发布按钮出现webpartxxx问题。不能发布。
- 关于多提交按钮的表单提交问题(用客户端代码判断被点击的按钮)
- 通过检测png图片透明区实现不规则按钮
- gtk透明背景和不规则按钮
- 禁用页面缓存。目的:用户登录后退出。点击浏览器后退按钮造成的问题
- 一个容易误解的小问题:TextBox的EnableViewState为false后,为什么点击按钮PostBack,TextBox的内容还是会保持(Persist)?