(转载)NGUI研究院之为什么Scene视图中不显示Polygon Collider2D(十七)

Ploygon Collider2D 的意思是多边形碰撞。如果我们想做一些不规则的按钮点击事件,可能就要用到它。比如点击地图中的某个区域,因为地图的区域肯定是无规则如果还是用NGUI的矩形来监听按钮那么效果肯定不好。

NGUI研究院之为什么Scene视图中不显示Polygon Collider2D(十七) - 雨松MOMO程序研究院 - 1

如下图所示,我分别创建两个UITexture 一个添加了BoxCollider 一个添加了Polygon Collider2D 为毛 BoxCollider 就可以在Scene视图中看到绿色的矩形区域,而Polygon Collider却看不到Polygon Collider 的多边形区域?

NGUI研究院之为什么Scene视图中不显示Polygon Collider2D(十七) - 雨松MOMO程序研究院 - 2

经过一番检查发现,原来是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;
}
}
}
}
}



NGUI研究院之为什么Scene视图中不显示Polygon Collider2D(十七) - 雨松MOMO程序研究院 - 3

如下图所示,我们来编辑多边形碰撞器吧。我在mac系统上,按下Shift+鼠标 可以看到一个小绿点,用鼠标拖动它来编辑你的多边形,如果你想删除多边形的话,按下Command + 鼠标,这样会出现一个小红点,点击一下即可删除。总之多操作两下应该都能会,很简单。

NGUI研究院之为什么Scene视图中不显示Polygon Collider2D(十七) - 雨松MOMO程序研究院 - 4

 

你编辑的多边形,其实都是一堆顶点数组,如果你不像用上面的方式编辑,想通过数值直接编辑,那么如下图所示,在精灵的GameObject上,点击右上方的小按钮,选择Debug模式。

NGUI研究院之为什么Scene视图中不显示Polygon Collider2D(十七) - 雨松MOMO程序研究院 - 5

在下方,你就可以看到你所有多边形的顶点信息了,快快编辑它吧。

NGUI研究院之为什么Scene视图中不显示Polygon Collider2D(十七) - 雨松MOMO程序研究院 - 6

 

不过可惜的一点是NGUI现在的代码是不支持PolygonCollider2D的。原因是NGUI用的是3D射线,而PolygonCollider用的是2D射线,射线是需要每一帧Update都要去判断的,如果两个射线都要判断那么效率肯定会大打折扣,我觉得游戏里面对这种不规则按钮的需求本来就比较少,最好在特定的界面里单独的进行一次逻辑判断。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值