U3D事件系统总结
事件系统有三个要素:发送者,接收者, 转发者。
发送者有两种,一是相机,二是画布。发送者是事件的管理者,发起者,它们使用射线发射器来检测点击事件:
- 相机的physics Raycaster。
- 画面的Canvas Raycaster。
发送者是首要因素,如果不给相机添加physics Raycaster组件,场景中的任何3D物体都不会有射线检测的计算,拣选事件永远不会触发。
画面默认都带有Canvas Raycaster,因此不需要自己添加。只要UI自己处理好接收事件就可以接收消息了。
转发者是指触发器EventTriger,是接收到事件后对事件的转发。如Button的属性面板上的On Click()就是一个触发器。


接收者和触发者可以是UI或3D物体。只要实现了 IPointerDownHandler, IPointerUpHandler, IPointerClickHandler
等接口就能接收到相关消息。以Button为例,实现UI的事件编写有三种方式:
- 给Button添加一个脚本,实现IPointerClickHandler的OnPointerClick()接口,就能接收到按钮的点击事件。
- 给按钮添加一个脚本,在脚本中GetComponent<Button>.onClick.AddListener(MyOnClick),点击按钮就会调用MyOnClick()的自定义方法。
- 给按钮添加一个脚本bltListener,里面定义一个函数void OnMyClick(),同时在On Click()区域添加一个触发项:object选Button本身,后面选bltListener.OnMyClick。这是按钮自己向自己发送事件。当点击按钮时,按钮将遍历所有添加的触发项,并调用触发项指定的脚本。
这三种方式本质上还是第一种方式。后面二种是UGUI实现的包装,便于使用和UI操作。
对于3D物体,只有使用第一种方式了,是最原始的通用方式。
U3D事件系统总结的更多相关文章
- U3D DrawCall优化手记
在最近,使用U3D开发的游戏核心部分功能即将完成,中间由于各种历史原因,导致项目存在比较大的问题,这些问题在最后,恐怕只能通过一次彻底的重构来解决 现在的游戏跑起来会有接近130-170个左右的Dra ...
- U3D学习笔记1: HelloWorld
Unity 版本: 5.3.5.f1 Hello World工程 1.新建工程 HelloWorld U3D可选2D和3D游戏 2.新建C#脚本文件 在project栏的assets目录右键-&g ...
- Dean-Edward的事件系统实现
jQuery早期的事件系统,主要借鉴自Dean-Edward的事件模型.虽说早期的该事件模型也有些许bug,诸如: 1,绑定的事件及其处理程序等数据并未存储到缓存中,而是直接存储在dom元素上,这样不 ...
- jQuery-1.9.1源码分析系列(十) 事件系统——事件体系结构
又是一个重磅功能点. 在分析源码之前分析一下体系结构,有助于源码理解.实际上在jQuery出现之前,Dean Edwards的跨浏览器AddEvent()设计做的已经比较优秀了:而且jQuery事件系 ...
- jQuery-1.9.1源码分析系列(十) 事件系统——主动触发事件和模拟冒泡处理
发现一个小点,先前没有注意的 stopPropagation: function() { var e = this.originalEvent; ... if ( e.stopPropagation ...
- U3D笔记11:47 2016/11/30-15:15 2016/12/19
11:47 2016/11/30Before you can load a level you have to add it to the list of levels used in the gam ...
- 跟我从零基础学习Unity3D开发--初识U3D
首先声明,我也是才开始学,把自己学的记录下来也供一些想要学习的朋友参考,一起努力.希望大家能给我指点一下.切莫喷我. 什么是Unity3d呢? 百度百科------Unity是由Unity Techn ...
- 尝试u3d中将代码与编辑器分离
最近与朋友交流,他一直是做端游,最近接触了u3d以后无法忍受代码与配置文件,美术资源全部纠缠在一起的状况,于是一直在琢磨怎么将编辑器与代码彻底分离. 自己也抽空研究一下,碰到一些问题先记录下来. 首先 ...
- u3d avatar部件的理解
u3d中带动画的fbx文件导入的时候,就会显示一个avatar组件,这个到底干嘛的一直没能很好的理解,翻看网上的介绍,基本都是告诉你,设置humanoid类型动画时,拖拉过去之类,但是这玩意到底存储了 ...
随机推荐
- iOS开发融云即时通讯集成详细步骤
1.融云即时通讯iOS SDK下载地址 http://rongcloud.cn/downloads 选择iOS SDK下载 2.进行应用开发之前,需要先在融云开发者平台创建应用,如果您已经注 ...
- animation of android (4)
TimeAnimator: 与objectAminator不同,它反馈的时间间隔.也就是说TimeAnimator不产生实际的动画效果,他反馈的时间间隔和时间值. 而你并不关心 interpolate ...
- MFC中添加用户自定义消息
1.定义一个宏(用户自定义消息从WM_USER开始) #define WM_XXXXX WM_USER+数值 2.声明一个成员函数并实现 afx_msg LRESULT OnXXXXX( WPARAM ...
- Github学习进阶-初露锋芒,通过命令行将本地git仓库推送到Github上面的仓库
前提: 1. 需要安装git 客户端. 能打开 git bash 命令行窗口. 2. 生成了ssh 秘钥,并添加到了Github上面. 一.在Github上面建立一个git仓库. 点击 + 号,在 ...
- Ubuntu进阶学习,指令迅速查询,Bug迅速查询(Ctrl+F)
There is some notes while I am learning Ubuntu Operate System! (Ask Ubuntu) 1-- Hard link : ln comma ...
- MPP 架构数据库
Greenplum是一种基于postgresql的分布式数据库.其采用shared nothing架构(MPP),主机,操作系统,内存,存储都是自我控制的,不存在共享.也就是每个节点都是一个单独的数据 ...
- Hive2 jdbc test
package andes; import java.io.BufferedWriter; import java.io.FileOutputStream; import java.io.IOExce ...
- Canvas修行之黑客帝国代码雨
既然是修行,不卖弄关子,不吊胃口,修行成果必须先晒一晒. 下图是我用canvas画的黑客帝国代码雨,想起当年看黑客帝国时,那个代码雨场景让我心旷神怡,大开脑洞,满脑子是那种三维空间,无数0和1像雨一样 ...
- Hadoop_HDFS文件读写代码流程解析和副本存放机制
Hadoop学习笔记总结 01.RPC(远程过程调用) 1. RPC概念 远程过程指的不是同一个进程的调用.它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. 不能直接拿到远 ...
- listview中OnItemClick方法各个参数的作用
OnItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) 1.arg0,arg2 m_listview.setOnI ...