NGUI -- UICamera(监听输入事件,鼠标,键盘等)

注意:本文翻译时NGUI版本已经更新到3.0.7

原文地址:http://www.tasharen.com/forum/index.php?topic=6711


总览

UICamera是一个命名不太好的组件。实际上,它的名字某种原因只是为了保持向后兼容。

UICamera脚本实际做的事是发送NGUI事件给所有被它所附加的摄像机所看见的对象。除此之外,它不对UI做任何事情了。实际上,如果你想要你的游戏中的对象能接收NGUI类似OnPress,OnClick等事件,那么你需要做的是附加UICamera脚本到你的main camera上。

你能在场景里拥有多个UICamera脚本。大多游戏会有一个camera绘制挂件,另一个camera绘制游戏对象。



UICamera的第一个选项,Event Type决定了脚本怎样排列它下面鼠标和触摸事件的顺序。如果设置为UI模式,那么它将一直基于挂件的depth--就和绘制顺序一样。改变选项为World模式,只有在你添加UICamera到你的MainCamera上面的时候才应该这么做。这样做将通过点击到的对象到摄像机的距离排序。


EventMask决定了哪个游戏对象的层能用于接收事件。大多数情况下,由于这个值和UnityEngine.Camera的CullingMask混合,你能让这个值为“Everything”,当然你也能在你想要的时候调整它。如果你改变了包含UI层级的游戏对象的Layer,请确认调整Event Mask,不然你会发现你的UI再也不能接受到事件。(译者言,简单的说,就是保持这个值和你UI对象的Layer名字一样)


Debug选项能用于调试当前鼠标下面是什么。如果当你点击一些按钮的时候,你不知道当前和鼠标事件交互的是什么对象,只要打开这个选项,你就能在顶部看到它。


允许Multi-Touch选项控制是否支持多点触摸。如果关闭,多点触摸将被视为单点触摸。


Stick Tooltip选项用于调整tooltip的行为。如果关闭,tooltip将会在鼠标再次移动的时候立刻隐藏。如果打开,tooltip将保持打开,知道鼠标离开同一个对象。


Tooltip  Delay控制鼠标悬停在某个对象上而且在OnTooltip通知发送到那个对象之前的事件间隔。这个值的单位是秒。


Raycast Range控制了射线的长度,大部分情况下这个值可以无视。这个值是使用世界单位的,所以如果你摄像机的near clip是0.3而far clipping是1000,你可能发现一些很远的对象没有响应点击,不妨设置这个值为2000试试(要比你camera的摄像机的far和near平面之差更大)



Event Sources部分控制着NGUI将处理什么事件类型。如果某个选项被关闭,这些事件将不被处理。一些平台通过hood强制关闭了一些特定事件。例如控制台会自动关闭鼠标和触摸事件。



Thresholds部分让你调整鼠标和触摸事件的点击、拖、轻拍行为。这些值的单位是像素



Axes and Keys部分让你选择哪个轴决定移动哪里。这些轴应该和你项目的Input Manager里面的名字匹配。


Pro-Tip

UICamera发送下面的事件给碰撞器:

  • OnHover(isOver) 当鼠标移动到一个碰撞器或者移出一个碰撞器时触发
  • OnPress(isDown) 当鼠标按键在一个碰撞器上按下时触发
  • OnSelect(selected) 当鼠标按键在他按下的那个对象上松开时触发
  • OnClick() 和OnSelect的触发条件一样,还能通过额外检查鼠标是否还没移开。UICamera.currentTouchID告诉你按下了哪个按钮。
  • OnDoubleClick() 当在一个短时间内点击两次的时候触发。UICamera.currentTouchID告诉你点下了哪个按钮。
  • OnDragStart() 在发送OnDrag()通知之前触发
  • OnDrag(delta) 发送到正在被拖动的对象
  • OnDragOver(draggedObject) 发送给一个对象,当另一个对象被拖到它的区域时
  • OnDragOut(draggedObject) 发送给一个对象,当另一个对象被拖出它的区域时
  • OnDragEnd() 当拖动事件结束时被发送到一个dragged对象
  • OnInput(text) 当输入的时候触发(在通过点击选择一个碰撞器之后)
  • OnTooltip(show) 当鼠标滑过一个collider而且一段时间没移开的时候
  • OnKey(KeyCode key) 当按下键盘或控制器的输入
把它们加入到你的自定义脚本,只要简单创建一个脚本使用对应的方法,例如:

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. void OnPress(bool isPressed){  
  2.   if(isPressed) Debug.Log("ressed on!");  
  3.   else Debug.Log("unpressed");  
  4. }  

类文档



如果你有一些和这个组件相关的问题,也可以在下面讨论。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值