(转载)NGUI研究院之为什么Scene视图中不显示Polygon Collider2D(十七)
2016-05-19 17:10
801 查看
Ploygon Collider2D 的意思是多边形碰撞。如果我们想做一些不规则的按钮点击事件,可能就要用到它。比如点击地图中的某个区域,因为地图的区域肯定是无规则如果还是用NGUI的矩形来监听按钮那么效果肯定不好。
如下图所示,我分别创建两个UITexture 一个添加了BoxCollider 一个添加了Polygon Collider2D 为毛 BoxCollider 就可以在Scene视图中看到绿色的矩形区域,而Polygon Collider却看不到Polygon Collider 的多边形区域?
经过一番检查发现,原来是NGUI默认创建的贴图和精灵的scale 都是1, 而所有的Collider都是根据GameObject的scale去算的。所以它太小了,小到了你的眼睛都完全看不到。为了方便编辑还是写一条简单的脚本来创建Polygon Collider2D吧。
添加碰撞器的时候,选择一个或者多个UISprite
或者 UITexture 然后 NGUI->Attack->PolyonCollider2D。碰撞器增加完毕后,我故意宽高各多增加20像素,这样为了方便去编辑。
如下图所示,我们来编辑多边形碰撞器吧。我在mac系统上,按下Shift+鼠标 可以看到一个小绿点,用鼠标拖动它来编辑你的多边形,如果你想删除多边形的话,按下Command + 鼠标,这样会出现一个小红点,点击一下即可删除。总之多操作两下应该都能会,很简单。
你编辑的多边形,其实都是一堆顶点数组,如果你不像用上面的方式编辑,想通过数值直接编辑,那么如下图所示,在精灵的GameObject上,点击右上方的小按钮,选择Debug模式。
在下方,你就可以看到你所有多边形的顶点信息了,快快编辑它吧。
不过可惜的一点是NGUI现在的代码是不支持PolygonCollider2D的。原因是NGUI用的是3D射线,而PolygonCollider用的是2D射线,射线是需要每一帧Update都要去判断的,如果两个射线都要判断那么效率肯定会大打折扣,我觉得游戏里面对这种不规则按钮的需求本来就比较少,最好在特定的界面里单独的进行一次逻辑判断。
如下图所示,我分别创建两个UITexture 一个添加了BoxCollider 一个添加了Polygon Collider2D 为毛 BoxCollider 就可以在Scene视图中看到绿色的矩形区域,而Polygon Collider却看不到Polygon Collider 的多边形区域?
经过一番检查发现,原来是NGUI默认创建的贴图和精灵的scale 都是1, 而所有的Collider都是根据GameObject的scale去算的。所以它太小了,小到了你的眼睛都完全看不到。为了方便编辑还是写一条简单的脚本来创建Polygon Collider2D吧。
usingUnityEngine; usingSystem.Collections; usingUnityEditor; publicclassNewBehaviourScript:Editor{ [MenuItem("NGUI/Attach/PolygonCollider2D")] staticvoidAddPolygonCollider2D() { if(Selection.activeObject!=null) { foreach(GameObjectgoinSelection.gameObjects) { UIWidgetwidget=go.GetComponent<UIWidget>(); if(widget!=null) { PolygonCollider2DpolygonCollider=go.GetComponent<PolygonCollider2D>(); if(polygonCollider==null) { polygonCollider=go.AddComponent<PolygonCollider2D>(); } Vector2[]vectors=newVector2[4]; intwidthHalf=(widget.width>>1)+20; intheightHalf=(widget.height>>1)+20; vectors[0]=newVector2(-widthHalf,-heightHalf); vectors[1]=newVector2(widthHalf,-heightHalf); vectors[2]=newVector2(widthHalf,heightHalf); vectors[3]=newVector2(-widthHalf,heightHalf); polygonCollider.points=vectors; } } } } }
添加碰撞器的时候,选择一个或者多个UISprite
或者 UITexture 然后 NGUI->Attack->PolyonCollider2D。碰撞器增加完毕后,我故意宽高各多增加20像素,这样为了方便去编辑。
如下图所示,我们来编辑多边形碰撞器吧。我在mac系统上,按下Shift+鼠标 可以看到一个小绿点,用鼠标拖动它来编辑你的多边形,如果你想删除多边形的话,按下Command + 鼠标,这样会出现一个小红点,点击一下即可删除。总之多操作两下应该都能会,很简单。
你编辑的多边形,其实都是一堆顶点数组,如果你不像用上面的方式编辑,想通过数值直接编辑,那么如下图所示,在精灵的GameObject上,点击右上方的小按钮,选择Debug模式。
在下方,你就可以看到你所有多边形的顶点信息了,快快编辑它吧。
不过可惜的一点是NGUI现在的代码是不支持PolygonCollider2D的。原因是NGUI用的是3D射线,而PolygonCollider用的是2D射线,射线是需要每一帧Update都要去判断的,如果两个射线都要判断那么效率肯定会大打折扣,我觉得游戏里面对这种不规则按钮的需求本来就比较少,最好在特定的界面里单独的进行一次逻辑判断。
相关文章推荐
- SDUT 2169 Sequence dp减枝区间划分
- IOS UIButton使用详解
- 深入掌握include_once与require_once的区别
- Hue安装指南
- Cxf开发webservice时遇到Can't find the request for xx's Observer
- UISegmenControl 的字体颜色的修改
- uevent 分析
- iOS AFNetworking “Request failed: unacceptable content-type: text/html”问题
- ubuntu 下 super build Orfeo toobox和开发
- UICollectionView使用方法
- JDBC连接池、监控组件 Druid
- 如何把UIView转成UIImage,解决模糊失真问题
- Hue中给BI分配的权限
- iOS学习笔记之六--图片移动的基本界面 UIBotton的应用
- jeasyUI popWindow插件,适用jeasyui1.4.x
- UIScrollView 学习
- UICollectionView学习
- ToStringBuilder学习(一):常用方法介绍
- POJ 3061 Subsequence(尺取法)
- 用easyui动态创建一个对话框