http://www.unity蛮牛.com/thread-22018-1-1.html

ngui作为unity界面插件之一中,无疑是最好用,使用最多的了从自学unity到现在界面一直使用它

由于它的持续更新,我在此不得不说,确实很为开发者作想,为什么这么讲呢?
大概在去年吧  当时用的那个版本已经不记得了,
反正就是有个需求,要实现“无限循环”拖动,使用过以前ngui的人就知道当时是没有这个功能的,
后来被自己弄出来没几天,就发现新版本中就自带了这样的东西,
也就是如今ngui列子中的 Endless Scroll Views,
当时,记得好像还心里暗骂了“坑爹”。

好啦,可能稍微有些偏题了,现在进入正题:
ngui点击事件我在此分为5种不同写法来总结

一.OnClick
OnClick作为传统的单击事件,其实真心好用,
直接

[C#] 纯文本查看 复制代码
using UnityEngine;
using System.Collections; public class onclicktest : MonoBehaviour {     public void OnClick()
    {
        Debug.Log("你通过OnClick点击了我!");
    }
}

不管你是界面按钮 还是3d物体对象(需要加BoxCollider)都可用
可是,太麻烦,不好管理。

二.SendMessage
1.SendMessage是属于Ngui老版本的一种事件实现方式了,在此就简单说下了
<ignore_js_op>

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种解决方案

本帖隐藏的内容

1.在ngui事件代码中做一个判断
如:

[C#] 纯文本查看 复制代码
viod OnClick()
{
if(UICamera.hoveredObject != null)
{
...
}
}

代表的意思是如果鼠标下面有NGUI物体就执行

2.通过射线来检测

[C#] 纯文本查看 复制代码
private RaycastHit _hit=new RaycastHit();.
if (UICamera.Raycast (Input.mousePosition, out _hit) == false)
{
。。。
}

代表的意思是判断在UI界面层操作.

Ngui 五种点击事件实现方式及在3d场景中点透的情况的更多相关文章

  1. Android中Button四种点击事件实现方式

    1.Xml添加监听属性,这里添加的doClick. <Button android:id="@+id/bt1" android:layout_width="wrap ...

  2. Button的五种点击事件

    1.内部类方式 class MyOnClickListener implements View.OnClickListener{ /** * Called when a view has been c ...

  3. Android入门——电话拨号器和四种点击事件

    相对于HelloWorld来说,电话拨号器也是Android的一个入门demo,从这个样例我们要理清楚做安卓项目的思路. 大体分为三步: 1.理解需求,理清思路 2.设计UI 3.代码实现 电话拨号器 ...

  4. Android入门——电话拨号器和4种点击事件

    关于HelloWorld为,电话拨号程序还AndroidA入门demo,从这个样例我们要理清楚做安卓项目的思路. 大体分为三步: 1.理解需求,理清思路 2.设计UI 3.代码实现 电话拨号器 1.  ...

  5. android学习之4种点击事件的响应方式

    如题,下面就一一列出对点击事件响应的4种方式: 第一种:内部类的形式: package com.example.dail; import android.net.Uri; import android ...

  6. Android中Button的五种监听事件

    简单聊一下Android中Button的五种监听事件: 1.在布局文件中为button添加onClick属性,Activity实现其方法2.匿名内部类作为事件监听器类3.内部类作为监听器4.Activ ...

  7. android中的4种点击事件

    四种点击事件     (1)采用内部类的方式去实现OnClickListener      (2)匿名内部类     (3)当前类imp OnClickListener      (4)onclick ...

  8. Android按钮的四种点击事件

    本文记录一下按钮的四种点击事件 第一种 public class MainActivity extends Activity { @Override protected void onCreate(B ...

  9. 关于Unity中NGUI的Checkbox复选框、Slider滑动条和Button的6种触发回调事件的方式

    Checkbox复选框 1.创建一个NGUI背景Sprite1节点 2.打开NGUI---->Open---->Prefab Toolbar---->选择一个复选框节点,拖拽到背景节 ...

随机推荐

  1. css008 给网页添加图片

    css008 给网页添加图片 1.            css和<img>标签       1.<img>标签是html的添加图片的标签,一般为: <img src=” ...

  2. 第二章 存储,2.2 AliCloudDB--双11商家后台数据库的基石(作者:玄惭)

    2.2 AliCloudDB--双11商家后台数据库的基石 前言 2016年天猫双11购物狂欢节已经完美落下帷幕,千亿成交的背后,作为整个天猫商家后台数据库的基石,AliCloudDB是如何保障在零点 ...

  3. CentOS_PHP_NGINX_FastCGI

    yum安装nginx,它会默认作为一个服务加到系统中,启动nginx: service nginx start/nginx -s start 他有4个参数(start|stop|restart|rel ...

  4. php上传$_FILES 无法取值

    无法取值的主要原因在form. 代码 <form method="post" action="****" name="theForm" ...

  5. xss漏洞挖掘小结

    xss漏洞挖掘小结 最近,在挖掘xss的漏洞,感觉xss真的不是想象的那样简单,难怪会成为一类漏洞,我们从防的角度来讲讲xss漏洞的挖掘方法: 1.过滤 一般服务器端都是采用这种方式来防御xss攻击, ...

  6. 做技术最自由,在IT最幸福!

    这些天来,一直感觉"做技术最自由,在IT最幸福!" 在IT最幸福 一直感觉从事IT行业最幸福,想想那些干机械的.干汽修.地勤的,让我干那些工作,对我来说真是折磨! 大体总结以下几点 ...

  7. Owin是什么?

    OWIN的英文全称是Open Web Interface for .NET. 如果仅从名称上解析,可以得出这样的信息:OWIN是针对.NET平台的开放Web接口. 那Web接口是谁和谁之间的接口呢?是 ...

  8. monit 监控并自动重启服务

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://coolerfeng.blog.51cto.com/133059/50126 Mo ...

  9. git SSH keys

    An SSH key allows you to establish a secure connection between your computer and GitLab. Before gene ...

  10. 一起找bug

    帮同学找的一个bug,错误代码如下: package dai_test; public class Test1 { public static void main(String[] args) { / ...