【Unity3D】【NGUI】UICamera
2013-12-11 11:01
387 查看
原文:http://www.tasharen.com/forum/index.php?topic=6711.0
NGUI讨论群:333417608
概述
UICamera这个名字不是很合适,保留的原因仅仅是为了兼容以前的版本。
UICamera真正做的事情是发送NGUI事件给所有被当前camera渲染的object,camera是UICamera脚本所在的那个。 其实这个脚本做的事情和UI无关。事实上如果你想让游戏里面的object接收OnPress、OnClick、OnDrag等这类事件,你需要把UICamera挂在你的主相机上。
游戏场景里面可以有多个UICamera。大多数游戏一个挂在渲染widget的相机上,一个挂在渲染游戏的相机上。
UICamera的选项Event Type用来决定脚本如何排序mouse或者touch触发的事件。如果是UI模式,这些事件顺序基于widget的depth——和渲染顺序一样。如果UICamera挂到了Main Camera上,那么就需要把这个选项修改成World模式。这样就会根据与相机的距离来排序点击到的object。
Event Mask用来决定哪些层会接收事件。大多数情况下你需要的就是“Everything”,这个值会与UnityEngine.Camera's Culling Mask进行逻辑与运算,有需要的话你可以微调这个值。如果你修改了UI的game object的Layer,记得调整Event Mask,否则你可能会发现UI不响应事件。
Debug选项用来显示当前在鼠标下面的是什么。如果你不知道是什么东西接收了鼠标事件,勾选上这个选项你就可以在右上角看到了。
Allow Multi-Touch选项用来控制是否支持多点触碰。如果勾选掉,多点触碰也会当做单点触碰。
Sticky Tooltip选项用来微调tooltip的行为。如果关掉,当鼠标再次移动的时候就会立即关掉tooltip。如果打开,只要鼠标一直在这个game object上,tooltip就会移至显示。
Tooltip Delay用来控制当鼠标停在某个object上时,经过多长时间OnTooltip消息会被发送到这个object上。以秒为单位。
Raycast Range控制raycast的长度,大多数情况下这个值可以被忽略。这个值是世界坐标系的值,所以如果你的摄像机的near clip是0.3、far clipping是 1000,比较远的物体可能不会响应click事件,比如可以把这个值设置为2000(比far和near clipping大的值。)
Event Sources用来确定哪些事件类型会被处理。被勾选掉的事件就不会被处理。有些平台会强制关闭一些事件。比如使用手柄时会自动关掉鼠标和touch时事件。
Thresholds可以调整click、drag和tap事件的阀值来微调鼠标和touch事件的行为。以像素为单位。
Axes和Keys部分用来控制哪个轴控制哪个方向的移动。这些名字需要和Input Manager里面的一致。
小贴士
UICamera发送以下事件给collider:
OnHover (isOver) 发送时机为鼠标悬停(只触发一次)或者离开collider。
OnPress (isDown) 发送时机为鼠标在collider上按下。
OnSelect (selected)发送时机为鼠标点击和松开的时候都在同一个object上。
OnClick ()发送时机和OnSelect一样,但是要求鼠标没有移动特别多。UICamera.currentTouchID表示按下的鼠标哪个键。
OnDoubleClick ()发送时机为当在四分之一秒内click两次的时候。UICamera.currentTouchID表示按下的鼠标哪个键。
OnDragStart ()发送时机为OnDrag()事件之前。
OnDrag (delta) 发送时机为一个object被拖拽。
OnDragOver (draggedObject)发送时机为其他的object拖拽到他的上面。
OnDragOut (draggedObject)发送时机为其他的object拖拽出他的上面。
OnDragEnd ()发送时机为drag事件结束。发送给被拖拽的object。
OnInput (text)发送时机为输入的时候(在点击选择了一个collider之后)。
OnTooltip (show) 发送时机为鼠标悬停在一个collider上一段时间没有移动。
OnScroll (float delta)发送时机为鼠标滚轮滚动。
OnKey (KeyCode key)发送时机为键盘或者输入控制器被使用的时候。
用他们到自己的脚本里面,只要实现相应的函数即可:
类文档
http://tasharen.com/ngui/docs/class_u_i_camera.html
NGUI讨论群:333417608
概述
UICamera这个名字不是很合适,保留的原因仅仅是为了兼容以前的版本。
UICamera真正做的事情是发送NGUI事件给所有被当前camera渲染的object,camera是UICamera脚本所在的那个。 其实这个脚本做的事情和UI无关。事实上如果你想让游戏里面的object接收OnPress、OnClick、OnDrag等这类事件,你需要把UICamera挂在你的主相机上。
游戏场景里面可以有多个UICamera。大多数游戏一个挂在渲染widget的相机上,一个挂在渲染游戏的相机上。
UICamera的选项Event Type用来决定脚本如何排序mouse或者touch触发的事件。如果是UI模式,这些事件顺序基于widget的depth——和渲染顺序一样。如果UICamera挂到了Main Camera上,那么就需要把这个选项修改成World模式。这样就会根据与相机的距离来排序点击到的object。
Event Mask用来决定哪些层会接收事件。大多数情况下你需要的就是“Everything”,这个值会与UnityEngine.Camera's Culling Mask进行逻辑与运算,有需要的话你可以微调这个值。如果你修改了UI的game object的Layer,记得调整Event Mask,否则你可能会发现UI不响应事件。
Debug选项用来显示当前在鼠标下面的是什么。如果你不知道是什么东西接收了鼠标事件,勾选上这个选项你就可以在右上角看到了。
Allow Multi-Touch选项用来控制是否支持多点触碰。如果勾选掉,多点触碰也会当做单点触碰。
Sticky Tooltip选项用来微调tooltip的行为。如果关掉,当鼠标再次移动的时候就会立即关掉tooltip。如果打开,只要鼠标一直在这个game object上,tooltip就会移至显示。
Tooltip Delay用来控制当鼠标停在某个object上时,经过多长时间OnTooltip消息会被发送到这个object上。以秒为单位。
Raycast Range控制raycast的长度,大多数情况下这个值可以被忽略。这个值是世界坐标系的值,所以如果你的摄像机的near clip是0.3、far clipping是 1000,比较远的物体可能不会响应click事件,比如可以把这个值设置为2000(比far和near clipping大的值。)
Event Sources用来确定哪些事件类型会被处理。被勾选掉的事件就不会被处理。有些平台会强制关闭一些事件。比如使用手柄时会自动关掉鼠标和touch时事件。
Thresholds可以调整click、drag和tap事件的阀值来微调鼠标和touch事件的行为。以像素为单位。
Axes和Keys部分用来控制哪个轴控制哪个方向的移动。这些名字需要和Input Manager里面的一致。
小贴士
UICamera发送以下事件给collider:
OnHover (isOver) 发送时机为鼠标悬停(只触发一次)或者离开collider。
OnPress (isDown) 发送时机为鼠标在collider上按下。
OnSelect (selected)发送时机为鼠标点击和松开的时候都在同一个object上。
OnClick ()发送时机和OnSelect一样,但是要求鼠标没有移动特别多。UICamera.currentTouchID表示按下的鼠标哪个键。
OnDoubleClick ()发送时机为当在四分之一秒内click两次的时候。UICamera.currentTouchID表示按下的鼠标哪个键。
OnDragStart ()发送时机为OnDrag()事件之前。
OnDrag (delta) 发送时机为一个object被拖拽。
OnDragOver (draggedObject)发送时机为其他的object拖拽到他的上面。
OnDragOut (draggedObject)发送时机为其他的object拖拽出他的上面。
OnDragEnd ()发送时机为drag事件结束。发送给被拖拽的object。
OnInput (text)发送时机为输入的时候(在点击选择了一个collider之后)。
OnTooltip (show) 发送时机为鼠标悬停在一个collider上一段时间没有移动。
OnScroll (float delta)发送时机为鼠标滚轮滚动。
OnKey (KeyCode key)发送时机为键盘或者输入控制器被使用的时候。
用他们到自己的脚本里面,只要实现相应的函数即可:
void OnPress (bool isPressed) { if (isPressed) Debug.Log("I was pressed on!"); else Debug.Log("I was unpressed"); }
类文档
http://tasharen.com/ngui/docs/class_u_i_camera.html
相关文章推荐
- Unity3D开发(七):NGUI之UICamera控制触摸,鼠标事件
- Unity3D中Main Camera与NGUI的UICamera小插曲
- 【Unity3D】【NGUI】UICamera
- Unity3D开发(七):NGUI之UICamera控制触摸,鼠标事件
- 【Unity3D自学记录】NGUI控件说明(中文) UICamera
- 【Unity3D】【NGUI】UICamera
- Unity3D开发(七):NGUI之UICamera控制触摸,鼠标事件
- Unity3D 使用NGUI制作简易弹出窗口声音控制器
- 【Unity插件】NGUI核心组件之UICamera .
- [Unity3D]Unity3D叙利亚NGUI血液和技能的冷却效果
- UNITY3D使用NGUI制作自适应UI的总结
- Unity3d中FingerGesture与NGUI的事件响应问题
- 【unity3d之UI界面学习】NGUI插件的导入步骤
- Unity3D中NGUI的动态字体(TTF)制作方法!!!
- Unity3D开发(二):NGUI之UIButton"禁用"状态时置灰
- Unity3d NGUI 摇杆实现
- unity3d NGUI入门(描述和使用插件参数)
- Unity3D中利用NGUI实现简单的Tabview
- Unity3D:NGUI 深入剖析NGUI的游戏UI架构
- Unity3D-深入剖析NGUI的游戏UI架构 --主要讲了UIWiget,UIDrawCall,UINode,UIPanel