Unity3D之UGUI学习EventSystem
2015-08-27 21:48
561 查看
坚持 成长 每日一篇
最近学了近半个月的Unity3D,学习做游戏一直是我的理想,但是由于种种原因一直在圈外徘徊,也听过很多同学,朋友说游戏有多苦,所谓一入游戏开发深似海,自己做iOS应用已经有两年有余,但是心一直在游戏上,最近换工作刚好有比较多时间学习,会在CSDN陆续发表一些自己Unity学习笔记。既然决定了就开始吧。
我一直以为做游戏,和应用开发无非就是解决好通信,你的产品就可以运行起来,至于动画,特效那都是后话。Unity的游戏内部通信(不包括网络)我们把他分为游戏物体和游戏物体的通信,游戏物体和人的通信(游戏和人的交互)今天我们就来介绍unity提供的人机其中一种交互方式EventSystem。
对于EventSystem的详细介绍不多说,这里我直接上我对它的使用。
在新建的项目里面我们创建一个UGUI的button
这时我们会在Hierarchy里面看到一个Canvas游戏物体下有一个Button和一个EventSystem
2.选中EventSystem我们会发现里面有三个组件Event System,Standalone Input Module, Touch Input Modunle
在一个游戏场景中Event System组件只能有一个,它负责射线投射,处理输入,发送事件。后面两个组件都继承自BaseInputModule
BaseInputModule是一个基类模块,负责发送输入事件(点击、拖拽、选中等)到具体对象。StandaloneInputModule和TouchInputModule组件是系统提供的标准输入模块和触摸输入模块,我们可以通过继承BaseInputModule实现自己的输入模块。
有了Event System BaseInputModule我们还不能实现对人物交互的检测,其实我们还缺少一个射线投射检测。一般射线投射检测是放置与摄像机有关(我的理解是对于非UGUI物体,我们可以放在主Camera上,UGUI物体我们放置在Canvas上,虽然我对于Canvas还不是很了解),
在这里我们可以做一个小实验。
运行游戏
我们选中Event System游戏物体,然后点击场景中的Button不放开我们会发现属性编辑器的右下方检测到PointerPress:Button表示可以检测到按钮被按下
这时放开鼠标,选中Canvas游戏物体,移除Graphic RayCaster组件
移除之后我们再去按住按钮就不会检测到PointerPress:Button。
2.检测到点击
一.新建一个NewBehaviourScript脚本,脚本实现了IPointerDownHandler接口的public void OnPointerDown (PointerEventData eventData)方法用于检测按钮按下。u3d还提供了其他接口用于检测不同的用户交互,详细请百度
二.将脚本拖动到button游戏物体上,这时运行游戏点击button,我们就会看到控台会输出”buttonClick”,表示我们成功检测到了点击事件。
2.给主摄像机添加一个Physic 2d Raycaster
这个时候我们运行游戏,然后点击游戏物体,控制台也会输出“buttonClick”这就表示我们检测到游戏物体被点击了
注意:非UGUI游戏物体要被检测到点击必须要有碰撞体组件,射线检测我们一般是放在主摄像机上。
最近学了近半个月的Unity3D,学习做游戏一直是我的理想,但是由于种种原因一直在圈外徘徊,也听过很多同学,朋友说游戏有多苦,所谓一入游戏开发深似海,自己做iOS应用已经有两年有余,但是心一直在游戏上,最近换工作刚好有比较多时间学习,会在CSDN陆续发表一些自己Unity学习笔记。既然决定了就开始吧。
我一直以为做游戏,和应用开发无非就是解决好通信,你的产品就可以运行起来,至于动画,特效那都是后话。Unity的游戏内部通信(不包括网络)我们把他分为游戏物体和游戏物体的通信,游戏物体和人的通信(游戏和人的交互)今天我们就来介绍unity提供的人机其中一种交互方式EventSystem。
对于EventSystem的详细介绍不多说,这里我直接上我对它的使用。
一.EventSystem在UGUI上的使用
1.打开unity新建一个2D项目在新建的项目里面我们创建一个UGUI的button
这时我们会在Hierarchy里面看到一个Canvas游戏物体下有一个Button和一个EventSystem
2.选中EventSystem我们会发现里面有三个组件Event System,Standalone Input Module, Touch Input Modunle
在一个游戏场景中Event System组件只能有一个,它负责射线投射,处理输入,发送事件。后面两个组件都继承自BaseInputModule
BaseInputModule是一个基类模块,负责发送输入事件(点击、拖拽、选中等)到具体对象。StandaloneInputModule和TouchInputModule组件是系统提供的标准输入模块和触摸输入模块,我们可以通过继承BaseInputModule实现自己的输入模块。
有了Event System BaseInputModule我们还不能实现对人物交互的检测,其实我们还缺少一个射线投射检测。一般射线投射检测是放置与摄像机有关(我的理解是对于非UGUI物体,我们可以放在主Camera上,UGUI物体我们放置在Canvas上,虽然我对于Canvas还不是很了解),
在这里我们可以做一个小实验。
运行游戏
我们选中Event System游戏物体,然后点击场景中的Button不放开我们会发现属性编辑器的右下方检测到PointerPress:Button表示可以检测到按钮被按下
这时放开鼠标,选中Canvas游戏物体,移除Graphic RayCaster组件
移除之后我们再去按住按钮就不会检测到PointerPress:Button。
2.检测到点击
一.新建一个NewBehaviourScript脚本,脚本实现了IPointerDownHandler接口的public void OnPointerDown (PointerEventData eventData)方法用于检测按钮按下。u3d还提供了其他接口用于检测不同的用户交互,详细请百度
using UnityEngine; using System.Collections; using UnityEngine.EventSystems; public class NewBehaviourScript : MonoBehaviour,IPointerDownHandler { // Use this for initialization void Start () { } public void OnPointerDown (PointerEventData eventData) { Debug.Log ("buttonClick"); } // Update is called once per frame void Update () { } }
二.将脚本拖动到button游戏物体上,这时运行游戏点击button,我们就会看到控台会输出”buttonClick”,表示我们成功检测到了点击事件。
二EventSystem在非UGUI游戏物体上的使用。
1.新建一个游戏物体New Spirit 如图我们给游戏物体添加一个碰撞器组件和刚刚我们创建的NewBehaviourScript脚本组件
2.给主摄像机添加一个Physic 2d Raycaster
这个时候我们运行游戏,然后点击游戏物体,控制台也会输出“buttonClick”这就表示我们检测到游戏物体被点击了
注意:非UGUI游戏物体要被检测到点击必须要有碰撞体组件,射线检测我们一般是放在主摄像机上。
相关文章推荐
- Unity常用代码
- unity3d炉石传说初期代码以及自己记录的知识点(初学者可看,有c#基础)
- T4M在Unity5中运行出错修改
- Unity5中Inspector界面上的AssetBundle值设定问题
- Unity3D在Android平台使用嵌入式数据库Sqlite,解决无法找到数据库文件的问题
- Unity3D中帧同步的实现
- Unity3d镜头范围内移动。
- StrangeIoc框架的详细介绍
- 【Unity】常用代码
- unity中实现A*算法的一些问题
- Unity 读取、写入自定义路径文件,调用System.Windows.Forms
- 【unity插件】unity spriteRender图层管理工具(支持Spine)
- unity 在移动平台中,文件操作路径详解
- Unity中的Path对应各平台中的Path
- Unity3d中的资源打包和加载
- 一个在unity3d中使用Excel做配置的解决方案
- Unity3d资源写入Android内置存储卡
- Unity3D研究院之两种方式播放游戏视频
- Unity NGUI UILabel文字变色 及相关问题
- 【转】Unity3D研究院之Android加密DLL与破解DLL .SO