NGUI之为什么Scene视图中不显示Polygon Collider2D
2015-01-27 20:14
399 查看
Ploygon Collider2D 的意思是多边形碰撞。如果我们想做一些不规则的按钮点击事件,可能就要用到它。比如点击地图中的某个区域,因为地图的区域肯定是无规则如果还是用NGUI的矩形来监听按钮那么效果肯定不好。
如下图所示,我分别创建两个UITexture 一个添加了BoxCollider 一个添加了Polygon Collider2D 为毛 BoxCollider
就可以在Scene视图中看到绿色的矩形区域,而Polygon Collider却看不到Polygon Collider 的多边形区域?
经过一番检查发现,原来是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像素,这样为了方便去编辑。文章出处狗刨学习网
如下图所示,我们来编辑多边形碰撞器吧。我在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吧。
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像素,这样为了方便去编辑。文章出处狗刨学习网
如下图所示,我们来编辑多边形碰撞器吧。我在mac系统上,按下Shift+鼠标 可以看到一个小绿点,用鼠标拖动它来编辑你的多边形,如果你想删除多边形的话,按下Command + 鼠标,这样会出现一个小红点,点击一下即可删除。总之多操作两下应该都能会,很简单。
你编辑的多边形,其实都是一堆顶点数组,如果你不像用上面的方式编辑,想通过数值直接编辑,那么如下图所示,在精灵的GameObject上,点击右上方的小按钮,选择Debug模式。
在下方,你就可以看到你所有多边形的顶点信息了,快快编辑它吧。
不过可惜的一点是NGUI现在的代码是不支持PolygonCollider2D的。原因是NGUI用的是3D射线,而PolygonCollider用的是2D射线,射线是需要每一帧Update都要去判断的,如果两个射线都要判断那么效率肯定会大打折扣,我觉得游戏里面对这种不规则按钮的需求本来就比较少,最好在特定的界面里单独的进行一次逻辑判断。
相关文章推荐
- (转载)NGUI研究院之为什么Scene视图中不显示Polygon Collider2D(十七)
- 【Unity&NGUI】为什么把NGUI的UI制作为预制体,再生成到新场景,UI无法正常在Game视图显示
- NGUI的BoxCollider与PolygonCollider2D共存的修改
- 终结解密XAML开发—vs设计视图为什么显示不出来?
- 【Unity3D自学记录】NGUI之显示2D游戏物体的名字
- 终结解密XAML开发—vs设计视图为什么显示不出来?
- 显示对象列表-为什么要使用list_detail.object_list(...)视图函数
- NGUI中2DSprite在苹果系统上显示出错的问题解决
- 添加了新的类以后 重新打开工程 类视图不显示新的类 为什么? 在线等 求大神指教
- NGUI或者TK2D显示图片显示为黑块问题原因
- [笔记]Unity5(5.1.2f1)中多边形碰撞器Polygon Collider 2D无法编辑
- single view application中删除默认的scene,创建导航视图不能显示
- 终结解密XAML开发―vs设计视图为什么显示不出来?
- Unity3D下修改Polygon Collider 2D
- Unity 之Bug - Scene视图的物体Game视图不显示
- 可以隐藏或显示某视图的CSplitterEx类
- win200 server+iis,为什么在网页上,有的中文htm链接路径可以显示,有的不行?
- 为什么偶的进度条的Value为100了 而显示出来进度条才走到中间
- 在spring MVC框架中显示xml视图
- 创建一个新的视图窗口来显示已打开的文档中的内容