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---->选择一个复选框节点,拖拽到背景节 ...
随机推荐
- matlab连接sql数据库
最近项目还涉及到matlab连接数据库,下面我就记录如何进行配置使得matlab能够连接sql数据库.由于最近工程做的多一些,所以分享的都在工程配置上,当初为了这些配置可是反复卸载与重装,算法其实也有 ...
- C#--API
C#中调用API 介绍 API( Application Programming Interface ),我想大家不会陌生,它是我们Windows编程的常客,虽然基于.Net平台的C#有了强大的类库, ...
- 9月9日HTML上午表单元素2(框架、样式表)
五.框架 1.frameset是双标签框架集,如果使用框架集,当前页面不能有body. frameset属性:①cols代表左右拆分.cols=“300,*”表示左边框架宽300,右边宽剩余的宽度.* ...
- BufferedReader类
BufferedReader类用于从缓冲区中读取内容,多有的输入字节数据都将放在缓冲区中. BufferedReader中定义的构造方法只能接收字符输入流的实例,所以必须使用字符输入流和字节输入流的转 ...
- PyCharm 教程(四)显示行号
PyCharm 教程(四)显示行号 在PyCharm 里,显示行号有两种办法: 1,临时设置.右键单击行号处,选择 Show Line Numbers. 但是这种方法,只对一个文件有效,并且,重启Py ...
- 【经典】C++&RPG对战游戏
博文背景: 还记大二上学期的时候看的这个C++&RPG游戏(博主大一下学期自学的php,涵盖oop内容),一个外校的同学他们大一学的C++,大二初期C++实训要求做一个程序填空,就是这个 RP ...
- LeetCode —— Invert Binary Tree
struct TreeNode* invertTree(struct TreeNode* root) { if ( NULL == root ) { return NULL; } if ( NULL ...
- 新版WampServer项目路径前面没有localhost
1.第一种情况:http://localhost/页面中不能访问 解决方式: 在www目录下找到index.php 然后修改里面查找$projectContents 或直接查看338行代码 修改'ht ...
- 深入理解docker的link机制
https://yq.aliyun.com/articles/55912 摘要: 什么是docker的link机制 同一个宿主机上的多个docker容器之间如果想进行通信,可以通过使用容器的ip地址来 ...
- 事务环境下的CombGuid
一直使用osharp,osharp3使用的是combguid,代码如下 /// <summary> /// 返回Guid用于数据库操作,特定的时间代码可以提高检索效率 /// </s ...