NGUI中UICamera的EventType详解

来源:互联网 发布:蚁群算法应用 编辑:程序博客网 时间:2024/05/16 16:08

NGUI版本:3.10.2

实践中遇到的问题

新建一个空工程,拖动一个Colored Button到场景中,此时是可以点的。
如果将UICamera的Event Type改为2D UI或2D World,则之前那个Colored Button变成不可以点了。

疑问

  1. 这个Colored Button不应该是2D的吗?所以EventType应该是2D UI才合理啊。
  2. UICamera的EventType为啥默认是3D World而不是2D UI呢?
  3. 怎样设置会比较合理?

原理分析

首先说明,Event Type这个命名是容易让人误解的。UICamera中响应触摸或者鼠标事件的中心,按理说Event Type应该是指点击、拖动什么的,但是实际上这个Event Type是指事件响应对象查找方式。分别有4种:

enum EventType{    World_3D,   // 使用Physics.Raycast查找响应对象,并选择距点点距离最近的    UI_3D,      // 使用Physics.Raycast查找对象,并选择Depth最大的    World_2D,   // 使用Physics2D.OverlapPoint查找对象,并选择最前面的    UI_2D,      // 使用Physics2D.OverlapPoint查找对象,并选择Depth最大的}

其次,那个Colored Button有个Component是Box Collider,可以被Physics.Raycast所找到,而不会被Physics2D.OverlapPoint找到。

答案揭晓

这个Colored Button不应该是2D的吗?所以EventType应该是2D UI才合理啊。
NGUI默认的Colored Button对于UICamera来说并不是2D的,而是一个3D的Box Collider。


UICamera的EventType为啥默认是3D World而不是2D UI呢?
这样设置让2D和3D都可以用,使用上更加方便。


怎样设置会比较合理?
因为Physics.Raycast比Physics2D.OverlapPoint的计算量要大得多,如果是只用到2D特性的话,将UICamera.EventType设置为2D的并将控件的Box Collider替换成Box Collider 2D。

1 0