您的位置:首页 > 产品设计 > UI/UE

Ngui 五种点击事件实现方式及在3d场景点透事件

2016-01-05 09:24 411 查看
一.OnClick
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界面层操作.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity c# OnClick RaycastHit