首页 >Unity3D频道 >【Unity杂文】 > NGUI研究院之为什么Scene视图中不显示Polygon Collider2D(十七)
2014
09-10

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

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

20081030111332764

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

Foxmail20140910_1

经过一番检查发现,原来是NGUI默认创建的贴图和精灵的scale 都是1, 而所有的Collider都是根据GameObject的scale去算的。所以它太小了,小到了你的眼睛都完全看不到。为了方便编辑还是写一条简单的脚本来创建Polygon Collider2D吧。

using UnityEngine;
using System.Collections;
using UnityEditor;

public class NewBehaviourScript : Editor {

	[MenuItem ("NGUI/Attach/PolygonCollider2D")]
	static void AddPolygonCollider2D () 
	{
		if(Selection.activeObject != null)
		{
			foreach(GameObject go in Selection.gameObjects)
			{
				UIWidget widget = go.GetComponent<UIWidget>();
				if(widget != null)
				{
					PolygonCollider2D polygonCollider = 	go.GetComponent<PolygonCollider2D>();
					if(polygonCollider == null)
					{
						 polygonCollider = 	go.AddComponent<PolygonCollider2D>();
					}
					Vector2 []vectors = new Vector2[4]; 
					int widthHalf = (widget.width >>1) + 20;
					int heightHalf = (widget.height >>1) + 20;
					vectors[0] = new Vector2 (-widthHalf,-heightHalf);
					vectors[1] = new Vector2 (widthHalf,-heightHalf);
					vectors[2] = new Vector2 (widthHalf,heightHalf);
					vectors[3] = new Vector2 (-widthHalf,heightHalf);
					polygonCollider.points = vectors;
				}
			}
		}
	}
}

添加碰撞器的时候,选择一个或者多个UISprite 或者 UITexture 然后 NGUI->Attack->PolyonCollider2D。碰撞器增加完毕后,我故意宽高各多增加20像素,这样为了方便去编辑。

Foxmail20140910_2

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

Foxmail20140910_3

 

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

Foxmail20140910_4

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

Foxmail20140910_5

 

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

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

NGUI研究院之为什么Scene视图中不显示Polygon Collider2D(十七)》有 13 条评论

  1. 嗨 momo Polygon Collider2D不支持OnClick()是么???

  2. 师傅你的NGUI是哪个版本的?

  3. 冰河烈风说:

    可以用Spere Collider ,或者几个Collder组成的多边形,一样能达到效果

  4. Franciscan说:

    momo大神,我想问一下你们的项目是使用几个scene呢,我们是一个界面一个scene,每个人负责自己的scene,整合的时候不用svn,用import package,这种方法可取吗?

  5. 李小鱼说:

    为什么build都成功了 ,安装也成功了,运行出来却是一片蓝,什么都没看到呢?

  6. 金奇说:

    用张mask图 射线 取alpha值做吧!我是打算这么做

  7. 金奇说:

    用张mask图 + 射线 取alpha值做吧!我是打算这么做

  8. 金奇说:

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

留下一个回复

你的email不会被公开。 必填项已用 * 标注。