Ngui 五种点击事件实现方式及在3d场景点透事件
2016-01-05 09:24
411 查看
一.OnClick
OnClick作为传统的单击事件,其实真心好用,
直接
[C#] 纯文本查看 复制代码
不管你是界面按钮 还是3d物体对象(需要加BoxCollider)都可用
可是,太麻烦,不好管理。
二.SendMessage
1.SendMessage是属于Ngui老版本的一种事件实现方式了,在此就简单说下了
Target:接收按钮消息的游戏对象。
Function Name:接收按钮消息的方法,拥有这个方法的脚本必须绑定在上面Target对象身上。
Trigger:触发的事件。
Include Children :是否让该对象的所有子对象也发送这个点击事件。
缺点:不直观,太多拖动操作,效率略低
三.通过UIButton属性面板附加事件
首先,在代码中写你要做的事情,
如:
[C#] 纯文本查看 复制代码
using System.Collections;
public class ClickTest : MonoBehaviour
{
//通过UIButton属性面板附加事件,该事件方法必须加public修饰
public void btn_Click()
{
Debug.Log("你通过UIButton属性面板附加事件点击了我!");
}
}
然后,拖动绑该代码定到场景任意对象上,
最后,选择你要点击的按钮,把刚才绑定代码的对象拖到,UIButton属性中的On Click中的Notify上,接着在Method中选择刚写的脚本里的方法就可以了
如图:
此方法个人感觉是SendMessage的升级版,比以前更加直观易懂,适用于刚接触Ngui的人学习使用。
缺点:效率略低,不可用于3d物体 如:Cube
四..Event Listener(推荐)
Event Listener选择要挂载的按钮,在Unity导航菜单栏中选择Component->NGUI->Internal ->Event Listener就可以了
代码写法有2种:
[C#] 纯文本查看 复制代码
方便统一管理,效率不错。
五.EventDelegate(推荐)
代码更加简单
方便统一管理,可以单独创建一个事件管理脚本,直接操作管理
效率不错,不需要加载拖动其他额外的东西.
[C#] 纯文本查看 复制代码
代码写好后,拖动绑该代码定到场景任意对象上,同时赋对应button上去就可以了
好啦,ngui五种点击事件处理方式总结到此结束,至于怎么用,那么大家自己取舍咯
若有不足,欢迎指正
=====================分割线================
另附加: 解决ngui在3d场景中 点透的情况
大家做游戏可能遇到 点击地面玩家行走,可是点击界面按钮的时候,事件触发不了,或者同时执行了玩家点地行走事件,
这些都属于点透的情况。
目前据自己经验有2种解决方案
如:
[C#] 纯文本查看 复制代码
代表的意思是如果鼠标下面有NGUI物体就执行
2.通过射线来检测
[C#] 纯文本查看 复制代码
代表的意思是判断在UI界面层操作.
OnClick作为传统的单击事件,其实真心好用,
直接
[C#] 纯文本查看 复制代码
using UnityEngine; using System.Collections; public class onclicktest : MonoBehaviour { public void OnClick() { Debug.Log("你通过OnClick点击了我!"); } }
不管你是界面按钮 还是3d物体对象(需要加BoxCollider)都可用
可是,太麻烦,不好管理。
二.SendMessage
1.SendMessage是属于Ngui老版本的一种事件实现方式了,在此就简单说下了
Target:接收按钮消息的游戏对象。
Function Name:接收按钮消息的方法,拥有这个方法的脚本必须绑定在上面Target对象身上。
Trigger:触发的事件。
Include Children :是否让该对象的所有子对象也发送这个点击事件。
缺点:不直观,太多拖动操作,效率略低
三.通过UIButton属性面板附加事件
首先,在代码中写你要做的事情,
如:
[C#] 纯文本查看 复制代码
using UnityEngine;
using System.Collections;
public class ClickTest : MonoBehaviour
{
//通过UIButton属性面板附加事件,该事件方法必须加public修饰
public void btn_Click()
{
Debug.Log("你通过UIButton属性面板附加事件点击了我!");
}
}
然后,拖动绑该代码定到场景任意对象上,
最后,选择你要点击的按钮,把刚才绑定代码的对象拖到,UIButton属性中的On Click中的Notify上,接着在Method中选择刚写的脚本里的方法就可以了
如图:
此方法个人感觉是SendMessage的升级版,比以前更加直观易懂,适用于刚接触Ngui的人学习使用。
缺点:效率略低,不可用于3d物体 如:Cube
四..Event Listener(推荐)
Event Listener选择要挂载的按钮,在Unity导航菜单栏中选择Component->NGUI->Internal ->Event Listener就可以了
代码写法有2种:
[C#] 纯文本查看 复制代码
using UnityEngine; using System.Collections; public class EventListerrnTest : MonoBehaviour { public Transform btn01; public Transform btn02; // Use this for initialization void Start() { //第一种 UIEventListener.Get(btn01.gameObject).onClick = (x) => { Debug.Log("你通过UIEventListener第一种点击了我!"); }; //第二种 UIEventListener.Get(btn02.gameObject).onClick = _btnClicked; } //实现事件方法 private void _btnClicked(GameObject _go) { Debug.Log("你通过UIEventListener第二种点击了我!"); } }
方便统一管理,效率不错。
五.EventDelegate(推荐)
代码更加简单
方便统一管理,可以单独创建一个事件管理脚本,直接操作管理
效率不错,不需要加载拖动其他额外的东西.
本帖隐藏的内容
[C#] 纯文本查看 复制代码using UnityEngine; using System.Collections; public class EventUITest : MonoBehaviour { public UIButton _btn; private void Awake() { //必须为 UIButton 类型 EventDelegate.Add (this._btn.onClick, this.BtnClicked); } private void BtnClicked() { Debug.Log("你通过EventDelegate点击了我!"); } }
代码写好后,拖动绑该代码定到场景任意对象上,同时赋对应button上去就可以了
好啦,ngui五种点击事件处理方式总结到此结束,至于怎么用,那么大家自己取舍咯
若有不足,欢迎指正
=====================分割线================
另附加: 解决ngui在3d场景中 点透的情况
大家做游戏可能遇到 点击地面玩家行走,可是点击界面按钮的时候,事件触发不了,或者同时执行了玩家点地行走事件,
这些都属于点透的情况。
目前据自己经验有2种解决方案
如:
[C#] 纯文本查看 复制代码
viod OnClick() { if(UICamera.hoveredObject != null) { ... } }
代表的意思是如果鼠标下面有NGUI物体就执行
2.通过射线来检测
[C#] 纯文本查看 复制代码
private RaycastHit _hit=new RaycastHit();. if (UICamera.Raycast (Input.mousePosition, out _hit) == false) { 。。。 }
代表的意思是判断在UI界面层操作.
相关文章推荐
- c#调用COM组件
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- C#中this的用法集锦
- C#数据结构之顺序表(SeqList)实例详解
- C#.NET获取拨号连接的宽带连接方法
- C#异步绑定数据实现方法
- C#实现AddRange为数组添加多个元素的方法
- C#中Equality和Identity浅析
- C#比较二个数组并找出相同或不同元素的方法
- C#生成饼形图及添加文字说明实例代码
- C#判等对象是否相等的方法汇总
- C#简单的向量用法实例教程