unity eventsystemevent是什么类型

扫一扫,访问微社区
后使用快捷导航没有帐号?
签到成功!您今天第{todayrank}个签到,签到排名竞争激烈,记得每天都来签到哦!已连续签到:{constant}天,累计签到:{days}天
当前位置: &
查看: 3304|回复: 4
Unity UGUI 原理篇(四): Event System Manager 事件与触发
7排名<font color="#FF昨日变化2主题帖子积分
在线时间125 小时
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
才可以下载或查看,没有帐号?
UGUI 原理篇(四): Event System Manager 时间与触发
<font color="#.Event System 事件系统<font color="#.Input Module 输入控制<font color="#.Graphic Raycaster<font color="#.Physics Raycaster 与 Physics
本系列其他文章
Unity UGUI 原理篇(一):Canvas 渲染模式
Unity UGUI 原理篇(二):Canvas Scaler 缩放核心
Unity UGUI 原理篇(三):Rect Transform
Unity UGUI 原理篇(四):Event System Manager 事件与触发
Unity UGUI 原理篇(五):Auto Layout 自动佈局
使用环境 与 版本
Unity 5.2.4
Event System
在建立出UI时,Unity会自动帮我们建立Event System物件,此物件是基于滑鼠、触摸、键盘的输入方式,传送 Event 到 Object 上,物件下有3个组件,分别为Event System Manager、Standalone Input Module、Touch Input Module
1.png (55.68 KB, 下载次数: 3)
22:34 上传
1.Event System Manager
2.png (7.9 KB, 下载次数: 5)
22:34 上传
控管所有Event,负责将滑鼠、触摸、键盘输入方式(Input Module) 与 被选中的 Object 互相协调,每个 “Update” Event System 都会接收所有呼叫,并判断出这一瞬间要使用哪种Input Modules
Event System Info
当按下Play后,点选Event System物件,会在inspector显示 选中物件、位置、接收事件的Camera等等资讯
3.png (71.13 KB, 下载次数: 4)
22:34 上传
First Selected
执行时第一次要选择的Object,例如:选择为 InputField (输入框) 后 ,按下Play后就会将游标 Force 在 InputField 上
Send Navigation Events
是否开启UI导航功能,导航功能是可以用键盘的 “上”、”下”、”左”、”右”、”Cancel(Esc)”、”Sumit(Enter)” 控制选择的UI
举例:如果画面上有多个选单按钮,我们可以设定按钮上的 Navigation Options 这裡使用Explicit方式,来指定按下键盘 “上”、”下”、”左”、”右” 要选取哪一个物件
Select On Up :当键盘按下 “上” 键后要选择的物件,Down、Left、Right 不多做赘述
4.png (31.75 KB, 下载次数: 2)
22:34 上传
Visualize Buttin: 按下Visualize可以看到物件指向的黄线
5.png (43.2 KB, 下载次数: 4)
22:34 上传
Drag Threshold
Drag Event灵敏度,越低越灵敏
<font color="#.Standalone Input Module
6.png (26.46 KB, 下载次数: 4)
22:34 上传
电脑输入控制模组,主要影响著滑鼠与键盘的输入,使用 Scene 中的 Raycasters 计算哪个元素被点中,并传递 Event
Horizontal Axis
代表 Input Module 中的 Horizontal Axis,可以被设定为 Input Manager 中的值,Vertical Axis、Submit Button、Cancel Button 不多做赘述
Input Actions Per Second
每秒能输入的最大按钮与滑鼠次数
Repeat Delay
重复输入的延迟
事件执行完整流程
<font color="#.Move Event:透过 input manager 验证输入 axis、left、right、up、down 按钮,传递给 selected object
<font color="#.Submit 、Cancel Button:物件已经 Preesed (按下)时,透过 input manager 验证输入&&submit 、cancel 按钮,传递给 selected object
<font color="#.如果是新的按下
a.传送 PointerEnter event
b.传送 PointerPress event
c.将 drag 相关暂存
e.传送 BeginDrag event
f.设定Event system中的 selected object 为按下的Object
<font color="#.如果是持续按下(Drag)
a.处理移动相关
b.传送 Drag event
c.处理 Drag 时跨到其他物体的 PointerEnter event、PointerExit event
<font color="#.如果是释放(滑鼠放开)
a.传送 PointerUp event
b.如果滑鼠放开与按下时的物件一样,传送 PointerClick event
c.如果有 drag 相关暂存,传送 Drop event
d.传送EndDrag event
<font color="#.滑鼠中键滚轮传送scroll event
3.Touch Input Module
7.png (5.71 KB, 下载次数: 2)
22:34 上传
触摸输入模组,主要用于移动设备上,可以透过Touch、Drag的方式响应,使用 Scene 中的 Raycasters 计算哪个元素被点中,并传递 Event
事件执行完整流程
与Standalone Input Module 的滑鼠输入一样,滑鼠点下想成触摸即可
4.Event System 触发流程
<font color="#.使用者输入(滑鼠、触摸、键盘)
<font color="#.透过 Event System Manager 决定使用 Standalone 还是 Touch Input Module
<font color="#.决定使用的 Input Module 后,透过 Scene 中的 Raycasters 计算哪个元素被点中
<font color="#.传送Event
Graphic Raycaster (图形 射线检测员)
组件位置:Unity Menu Item → Component → Event → Graphic Raycaster
8.png (47.2 KB, 下载次数: 2)
22:34 上传
建立 Canvas 物件时下的其中一个 Component,Raycaster 会观察 Canvas下所有图形,并检测是否被击中,射线检测其实就是指定位置与方向后,投射一条隐形线并判断是否有碰撞体在线上,射线检测这点官方已经有详细说明,这裡用于判断是否点选到UI图形
Ignore Reversed Graphics:
背对著画面的图形,射线检测是否要忽略此图形
举例:当图形Y轴进行旋转180后,此时是背对著画面,这时是如果有打勾,就会忽略不检测此图形
Blocked Objects 、 Blocking Mask:
主要用于当Canvas Component Render Mode 使用 World Space 或是 Camera Space 时,UI 前有 3D 或是
Object 时,将会阻碍射线传递到 UI 图形
Blocked Objects 阻碍射线的 Object 类型
Blocking Mask 勾选的 Layer 将会阻碍射线
举例:如果画面上有一个 Button 与 Cube 位置故意重叠,现在点击重叠之处会发现 Button 还是会被触发
9.gif (27.89 KB, 下载次数: 5)
22:34 上传
如果将Cube 的 Layer 改为 Test01 ,Blocked Objects 设定为 Three D,Blocking Mask 只勾选 Test01,再次点选重叠区域,会发现 Cube 会阻碍射线检测,此时按钮会接收不到射线,当然也不会有反应
10.gif (75.65 KB, 下载次数: 2)
22:34 上传
Physics Raycaster (物理物件 射线检测员)
组件位置:Unity Menu Item → Component → Event → Physics Raycaster
透过 Camera 检测 Scene 中的 3D GameObject(必须有 Collider Component),有实现 Event Interfaces 接口的物件将会接收到 Message 通知,例如能让 3D GameObject 能接收 点下Event 或是 拖拉Event 等等…..,看更多 Event 请点我
接下来让我们透过实例理解
<font color="#.建立 EventSystem,进行 Event 处理
物件位置:Unity Menu Item → GameObject → UI → EventSystem
<font color="#.Camera下增加 Physics Raycaster Component,用来观察射线
11.png (46.44 KB, 下载次数: 3)
22:34 上传
<font color="#.实现 Event Interfaces 接口,这裡有两种方式,一种是建立 Script 直接实作 Interfaces ,一种是使用Event Trigger Component
第一种 建立 Script 直接实作 Interfaces
a.建立一个 Script,实作 Event Interfaces
EventTest.csC#using UnityEusing UnityEngine.EventS
public class EventTest : MonoBehaviour, IPointerDownHandler{& & public void OnPointerDown(PointerEventData eventData)& & {& && &&&print(gameObject.name);& & }}
Line. 2:using&&UnityEngine.EventSystems 汇入命名空间
Line. 4:继承 Event Interfaces,这裡是IPointerDownHandler(点下事件),看更多 Event 请点我
Line. 6~8:实作方法,传入 PointerEventData 为事件资料
b.建立一个3D物件(此称为Cube),并增加 BoxCollider Component
12.png (29.71 KB, 下载次数: 2)
22:34 上传
c.将 Script 放至 Cube 下,Inspector 中会出现 Intercepted Events 资讯,显示出正在监听的 Event
13.png (39.23 KB, 下载次数: 8)
22:34 上传
d.此时点击 Cube 就会通知 OnPointerDown 方法并传入事件资讯
第二种 使用Event Trigger Component 实作 Interfaces
a.建立一个 Script,实作方法,用于接收 Event Trigger 通知
EventTriggerTest.csC#using UnityEusing UnityEngine.EventS
public class EventTriggerTest : MonoBehaviour{& & //BaseEventData 動態傳入事件資訊& & public void OnPointerDown(BaseEventData eventData)& & {& && &&&print(&OnPointerDown--BaseEventData&);& & }
& & //純呼叫& & public void OnPointerDown()& & {& && &&&print(&OnPointerDown--non&);& & }
& & //傳入int& & public void OnPointerDown(int i)& & {& && &&&print(&OnPointerDown--int&);& & }}
Line. 2:using&&UnityEngine.EventSystems 汇入命名空间
Line. 6~8:实作方法,这边实作3种
b.建立一个3D物件(此称为Cube),并增加 BoxCollider Component
14.png (31.56 KB, 下载次数: 2)
22:34 上传
c.将 Script 放至 Cube 下
d.Cube 下加入 Event Trigger Component,主要接收来至 Event System 的 Event ,并呼叫有实作的 Event
组件位置:Unity Menu Item → Component → Event → Event Trigger
e.点选 Add New Event Type 选择要实作的 Event 类型 ,这裡使用PointerDown(点下事件)举例
15.png (60.35 KB, 下载次数: 8)
22:34 上传
f.此时会新增一个UnityEvents,是一种透过编辑器设定的方式,设定 Event 触发时要通知的方法与属性,详细可以参考以下,这边简单说明
胡乱说?随便写 – Unity:使用 UnityEngine.Events 让程式更灵活、稳定
Unity – Manual: UnityEvents
点下 “+” 按钮后,拖入要通知的Scene GameObject,Unity Event 就会寻找此 GameObject 上所有 Public 的方法与属性 ,就可以新增 Event 触发时 “通知的方法” 与 “预修改属性”
g.GameObject 拖入 Cube,通知方法设定 Script 中的3个方法
16.png (52.69 KB, 下载次数: 2)
22:34 上传
h.此时点击 Cube 就会触发 PointerDown ,通知 Script 中的3个方法
<font color="#.实作注意点:
■ Scene 必需有 EventSystem GameObject
■ Camera 必需有 Physics Raycaster Component
■ 3D GameObject 必须有 Collider Component
■ 实作 Event Interfaces 的方式,一种是建立 Script 直接实作 Interfaces ,一种是使用 Event Trigger Component,由上面实作可以知道,使用 Event Trigger 的方式可以使用编辑器设定,设定触发时的 “通知方法” 与 “修改属性”,且更为弹性
Physics 2D Raycaster组件位置:Unity Menu Item → Component → Event → Physics 2D Raycaster
跟 Physics Raycaster 只差在于,Physics 2D Raycaster 是检测 Scene 中的 2D GameObject,当然 GameObject 上必须有 Collider2D Component,这边不再赘述
后记我们透过输入的方式不同与 Raycaster 的关系,理解了整个 Event System 触发流程,而且也知道怎麽实作 Event 与应用 Event,不管是3D、2D、UI物件都可以方便的套用,大大提升开发速度、简化语法,可说是非常方便的功能
参考资料■ Unity – Manual: Event System
http://docs.3d.com/Manual/EventSystem.html
■ Unity – Manual: UnityEvents
http://docs..com/Manual/UnityEvents.html
■ Unity – Raycasting
http://unity3d.com/cn/learn/tutorials/modules/beginner/physics/raycasting
■ 胡乱说?随便写 – Unity:使用 UnityEngine.Events 让程式更灵活、稳定
http://godstamps.blogspot.tw/2015/10/unity-unityengineevents.html
原文作者: k79k06k02k原文链接:http://k79k06k02k.com/blog/440/unity/unity-ugui-%E5%8E%9F%E7%90%86%E7%AF%87%E5%9B%9B%EF%BC%9Aevent-system-manager-%E4%BA%8B%E4%BB%B6%E8%88%87%E8%A7%B8%E7%99%BC
扫描下方二维码关注官方微信~每日都有精选干货与你分享哟~
本文由蛮牛驿馆倾情奉献,翻译:Unity墙外的世界(公众号),如有请及时联系,除 合作社区 及 合作媒体 外,禁止转载。
每日推荐:
61249/1500排名<font color="#FF昨日变化1主题帖子积分
蛮牛粉丝, 积分 1249, 距离下一级还需 251 积分
蛮牛粉丝, 积分 1249, 距离下一级还需 251 积分
蛮牛币2982
在线时间378 小时
终于看完了
每日推荐:
118/50排名<font color="#FF昨日变化112主题帖子积分
注册看看, 积分 18, 距离下一级还需 32 积分
注册看看, 积分 18, 距离下一级还需 32 积分
在线时间3 小时
Event System Manager 事件与触发
[]: zjut 发帖时在路边捡到 2
蛮牛币,偷偷放进了口袋.
每日推荐:
3254/300排名<font color="#FF昨日变化14主题帖子积分
偶尔光临, 积分 254, 距离下一级还需 46 积分
偶尔光临, 积分 254, 距离下一级还需 46 积分
在线时间74 小时
非常的棒!楼主你酷呆了
每日推荐:
7排名<font color="#FF昨日变化2主题帖子积分
在线时间125 小时
非常的棒!楼主你酷呆了
谢谢你哟。
每日推荐:我给这个UGUI物体添加了一个EventTrigger,也增加了一个新的事件类型Deselect,然后就是点那个加号增加一个方法是么?-Unity3D-论坛-U3D在线
Unity3D在线 http://www.u3dol.com
当前位置: ->
-> 我给这个UGUI物体添加了一个EventTrigger,也增加了一个新的事件类型Deselect,然后就是点那个加号增加一个方法是么?
Unity3D 论坛 > 我给这个UGUI物体添加了一个EventTrigger,也增加了一个新的事件类型Deselect,然后就是点那个加号增加一个方法是么?围观:1477 | 回复:32
贾冬积分:360帖子:48
我给这个UGUI物体添加了一个EventTrigger,也增加了一个新的事件类型Deselect,然后就是点那个加号增加一个方法是么?
程曼薇积分:1660帖子:50
那你还的实现对应的逻辑啊..
贾冬积分:360帖子:48
确实是网上关于UGUI的讲解太少,这个问题我问了多个unity群,这个群是唯一有人知道的.
程曼薇积分:1660帖子:50
思路就是&点击视为选中某个物体,当点击其他物体时,让ugui的机制触发取消选中(Deselect)的事件,从而达到自己关闭的效果。。。
程曼薇积分:1660帖子:50
这句是为了让你告诉系统选中的是什么物体的。。写在OnDeselect里有什么用-.-
贾冬积分:360帖子:48
我就是让一个空物体上面挂了一排小按钮,这就是当一个菜单了。
刘杰林积分:1324帖子:81
说那话&没别的意思。。。我觉得这种问题&自己多试几次就出来了&别人跟你说&不见得帮了你
杜冷积分:641帖子:58
别用ugui做项目
段九冰积分:7帖子:0
这两个toggle&botton&是什么作用。
段九冰积分:7帖子:0
哪位大侠知道..&求救..
辛紫怡积分:134帖子:4
《悠游课堂全系视频教程》 为悠游工作室独立制作发行,任何人禁止转载和翻录售卖,违者必纠 承担对应法律责任
Copyright Unity3D在线 All Rights Reserved.Theme by U3dOL 备案:京ICP备号-4 |SiteMap |网站地图 |百度统计| 联系我们6546人阅读
Unity 3D(3)
在Unity3D中也有如同Java一样的实现事件注册机制的类,就是UnityEvent。
UnityEvent继承自UnityEventBase,主要通过三个函数实现对事件的注册与响应,示例:
var event : Events.UnityE
function Start ()
event = new Events.UnityEvent ();
event.AddListener(Hello);
function OnGUI ()
if (GUILayout.Button("静夜思") && event != null)
event.Invoke ();
function Hello()
Debug.Log ("床前明月光");
上述的示例就使用了UnityEvent三大函数中的两个(AddListener和invoke,一个注册事件,一个响应事件),还有一个RemoveListener,用于移除监听器。
UnityEvent的响应函数还可以传入参数,即使用UnityEvent&T&类(最多可以使用4个,即可使用到UnityEvent&T1,T2,T3,T4&),但因为这几个类都必须使用先继承才能使用,示例如下:
class MyEvent extends Events.UnityEvent.&String&
var event : MyE
function Start ()
event = new MyEvent ();
event.AddListener(Hello);
function OnGUI ()
if (GUILayout.Button("静夜思") && event != null)
event.Invoke (",疑是地上霜。");
function Hello(s:String)
Debug.Log ("床前明月光"+s);
将脚本拖至控件运行后,控制台打印结果如下:
点击静夜思按钮后,控制台输出了“床前明月光,疑是地上霜.”
文章:13篇
阅读:58997
阅读:7841
文章:70篇
阅读:86019
阅读:14355
阅读:29630&>&unity delegate和event的例子
unity delegate和event的例子
上传大小:1.88MB
我自己写的一个博文配的例子,博文地址待审核后加上去。
综合评分:5(2位用户评分)
下载个数:
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有2条
再下载一次看看
讲的挺详细,谢谢楼主了,学习了
综合评分:
积分/C币:3
综合评分:
积分/C币:3
综合评分:
积分/C币:3
综合评分:
积分/C币:3
josslin025
综合评分:
积分/C币:0
yuankuijun
综合评分:
积分/C币:3
综合评分:
积分/C币:3
综合评分:
积分/C币:3
综合评分:
积分/C币:3
Alison2099
综合评分:
积分/C币:3
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
unity delegate和event的例子
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
(仅够下载10个资源)
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
unity delegate和event的例子Version: 2017.3 ()
LanguageEnglish
Script language
Select your preferred scripting language. All code snippets will be displayed in this language.
UnityEngine
Other Versions
Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.
Submission failed
For some reason your suggested change could not be submitted. Please &a&try again&/a& in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.
Your email
Suggestion*
Submit suggestion
Description
A UnityGUI event.
Events correspond to user input (key presses, mouse actions), or are UnityGUI layout or rendering events.For each event
is c so OnGUI is potentially
called multiple times per frame.
corresponds to "current" event inside OnGUI call.See Also: , .
Static Properties
The current event that's being processed right now.
Properties
Is Alt/Option key held down? (Read Only)
Which mouse button was pressed.
Is Caps Lock on? (Read Only)
The character typed.
How many consecutive mouse clicks have we received.
Is Command/Windows key held down? (Read Only)
The name of an ExecuteCommand or ValidateCommand Event.
Is Control key held down? (Read Only)
The relative movement of the mouse compared to last event.
Index of display that the event belongs to.
Is the current keypress a function key? (Read Only)
Is this event a keyboard event? (Read Only)
Is this event a mouse event? (Read Only)
The raw key code for keyboard events.
Which modifier keys are held down.
The mouse position.
Is the current keypress on the numeric keyboard? (Read Only)
Is Shift held down? (Read Only)
The type of event.
Public Methods
Get a filtered event type for a given control ID.
Use this event.
Static Methods
Returns the current number of events that are stored in the event queue.
Create a keyboard event.
Get the next queued [Event] from the event system.
Did you find this page useful? Please give it a rating:}

我要回帖

更多关于 unityevent 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信