坚持 成长 每日一篇
最近学了近半个月的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 () { } (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游戏物体要被检测到点击必须要有碰撞体组件,射线检测我们一般是放在主摄像机上。