Ngui 五种点击事件实现方式及在3d场景中点透的情况
http://www.unity蛮牛.com/thread-22018-1-1.html
ngui作为unity界面插件之一中,无疑是最好用,使用最多的了从自学unity到现在界面一直使用它
由于它的持续更新,我在此不得不说,确实很为开发者作想,为什么这么讲呢?
大概在去年吧  当时用的那个版本已经不记得了,
反正就是有个需求,要实现“无限循环”拖动,使用过以前ngui的人就知道当时是没有这个功能的,
后来被自己弄出来没几天,就发现新版本中就自带了这样的东西,
也就是如今ngui列子中的 Endless Scroll Views,
当时,记得好像还心里暗骂了“坑爹”。
好啦,可能稍微有些偏题了,现在进入正题:
ngui点击事件我在此分为5种不同写法来总结
一.OnClick
OnClick作为传统的单击事件,其实真心好用,
直接
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属性面板附加事件
首先,在代码中写你要做的事情,
如:
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种:
本帖隐藏的内容
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(推荐)
代码更加简单
方便统一管理,可以单独创建一个事件管理脚本,直接操作管理
效率不错,不需要加载拖动其他额外的东西.
本帖隐藏的内容
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五种点击事件处理方式总结到此结束,至于怎么用,那么大家自己取舍咯
若有不足,欢迎指正
=====================分割线================
本帖隐藏的内容
1.在ngui事件代码中做一个判断
如:
viod OnClick()
{
if(UICamera.hoveredObject != null)
{
...
}
}
代表的意思是如果鼠标下面有NGUI物体就执行
2.通过射线来检测
private RaycastHit _hit=new RaycastHit();.
if (UICamera.Raycast (Input.mousePosition, out _hit) == false)
{
。。。
}
代表的意思是判断在UI界面层操作.
Ngui 五种点击事件实现方式及在3d场景中点透的情况的更多相关文章
- Android中Button四种点击事件实现方式
		
1.Xml添加监听属性,这里添加的doClick. <Button android:id="@+id/bt1" android:layout_width="wrap ...
 - Button的五种点击事件
		
1.内部类方式 class MyOnClickListener implements View.OnClickListener{ /** * Called when a view has been c ...
 - Android入门——电话拨号器和四种点击事件
		
相对于HelloWorld来说,电话拨号器也是Android的一个入门demo,从这个样例我们要理清楚做安卓项目的思路. 大体分为三步: 1.理解需求,理清思路 2.设计UI 3.代码实现 电话拨号器 ...
 - Android入门——电话拨号器和4种点击事件
		
关于HelloWorld为,电话拨号程序还AndroidA入门demo,从这个样例我们要理清楚做安卓项目的思路. 大体分为三步: 1.理解需求,理清思路 2.设计UI 3.代码实现 电话拨号器 1. ...
 - android学习之4种点击事件的响应方式
		
如题,下面就一一列出对点击事件响应的4种方式: 第一种:内部类的形式: package com.example.dail; import android.net.Uri; import android ...
 - Android中Button的五种监听事件
		
简单聊一下Android中Button的五种监听事件: 1.在布局文件中为button添加onClick属性,Activity实现其方法2.匿名内部类作为事件监听器类3.内部类作为监听器4.Activ ...
 - android中的4种点击事件
		
四种点击事件 (1)采用内部类的方式去实现OnClickListener (2)匿名内部类 (3)当前类imp OnClickListener (4)onclick ...
 - Android按钮的四种点击事件
		
本文记录一下按钮的四种点击事件 第一种 public class MainActivity extends Activity { @Override protected void onCreate(B ...
 - 关于Unity中NGUI的Checkbox复选框、Slider滑动条和Button的6种触发回调事件的方式
		
Checkbox复选框 1.创建一个NGUI背景Sprite1节点 2.打开NGUI---->Open---->Prefab Toolbar---->选择一个复选框节点,拖拽到背景节 ...
 
随机推荐
- System.currentTimeMillis()计算方式与时间的单位转换
			
目录[-] 一.时间的单位转换 二.System.currentTimeMillis()计算方式 一.时间的单位转换 1秒=1000毫秒(ms) 1毫秒=1/1,000秒(s)1秒=1,000,000 ...
 - sphinx :undefined reference to `libiconv' 报错解决办法
			
sphinx :undefined reference to `libiconv' 报错解决办法 2013-11-30 21:45:39 安装sphinx时不停报错...郁闷在make时报错,错误 ...
 - windows查看占用端口的进程
			
1方法 先找到进程号: netstat -aon|findstr 再根据进程号得到进程: tasklist |findstr " 2结果
 - wex5 开机图片时间长
			
作用: 控制刚打开图片 时间长 修改config.xml 地址:F:\wex\model\Native\templates\advanced 延迟的时间是在本地app的 config.xml中修改, ...
 - json跨域
			
很有意思的两种连接 ,效果相同. 不同之处: aehyok({"result":"我是远程js带来的数据"}); <script type="t ...
 - Code First Migrations: Making __MigrationHistory not a system table
			
https://blog.oneunicorn.com/2012/02/27/code-first-migrations-making-__migrationhistory-not-a-system- ...
 - Google Guava14.0 瓜娃学习笔记
			
Guava 是java api的增强与扩展,提供复杂的java 数据结构,使你的代码更简短精炼,具有良好的可读性.看看guava给我们提供了哪些很酷的功能: 集合创建: Map<String, ...
 - jquery插件写法
			
//传统写法 //全局方法 ;(function($){ $.method = function(){ } //or $.obj = { method1:function(){}, method2:f ...
 - Windows下安装Tomcat服务
			
startup.bat中添加以下内容 setlocal SET JAVA_HOME=D:\Program Files\Java\jdk1.8.0_05 SET CATALINA_HOME=D:\Pro ...
 - mysql中获取一天、一周、一月时间数据的各种sql语句写法
			
今天抽时间整理了一篇mysql中与天.周.月有关的时间数据的sql语句的各种写法,部分是收集资料,全部手工整理,自己学习的同时,分享给大家,并首先默认创建一个表.插入2条数据,便于部分数据的测试,其中 ...