【Unity】输入系统

1. Unity 的输入系统

1.1  虚拟轴的输入检测

Unity默认定义了15个虚拟轴。

可以通过Edit -> Project Settings -> Input 打开 InputManager 来查看定义好的虚拟轴

(1) 虚拟轴的属性

Size之后的一些属性,例如:Horizontal,Vertical。顾名思义这是水平方向和前后方向上的定义(针对于轴向在X轴上)。点击 Horizontal旁边的三角形,可以看到其中定义了许多内容。例如:Name表示的是这个虚拟轴的名称,Negative Button表示的是水平位置上负方向的按钮(向左),Positive Button表示的是水平位置上正方向的按钮(向右)。下两个带Alt的选项是备选方案。Gravity代表的是按钮恢复到正常值的恢复速度,值越大越 快。Dead表示当对应按钮的数值小于此处定义的数值时,都认为按钮已经复位。Axis项定义虚拟轴的方向,可以使X轴Y轴或者其他多位控件的轴。

(2) 调用Input.GetAxis方法来获取虚拟轴的当前状态值

虚拟轴中负方向和正方向的数值范围时-1到1之间。例如:GetAxis("Horizontal"); 这时候如果按住left按钮,此函数会返回-1 ,松开之后恢复到0。一样的如果按住Right按钮,此时函数会返回1。因此可以认为在-1到0之间是按了虚拟轴的负方向,在等于0时是什么都没有按,在 0到1之间是按了虚拟轴的正方向。因此可以把这个值作为transform或者rotation的值,来控制物体的移动和旋转方向,也可以控制物体的移动速度随按键力度的变化等。

1.2 鼠标输入检测

对于鼠标的检测。主要的是 Input 类中的 GetMouseButton GetMouseButtonDown / GetMouseButtonUp,入参为0/1/2,分别对应鼠标左键/右键/中键盘。返回值为bool,表示该键是否处于该状态。

例如,当按下鼠标左键的一瞬间,GetMouseButtonDown(0) 的返回值为true。

GetMouseButtonDown()当鼠标按下时执行,但只会执行一次。GetMouseButton()当鼠标长按时,会一直执行。GetMouseButtonUp()是当松开鼠标时执行,且只会执行一次。

1.3 键盘输入检测

键盘的检测,主要是 Input 类的 GetButtonDown / GetButton / GetButtonUp 和 GetKeyDown GetKey GetKeyUp 两组。

GetButton 组方法的参数是虚拟轴的名称,返回值为 bool 类型,可以检测到该虚拟轴定义的按键状态,如虚拟轴 "Horizontal" 中定义了lef/right/a/d 键,当这几个键被按下时,GetButton("Horizontal") 返回true

GetKey 组方法的参数为 string 或 Unity 定义的 枚举类型KeyCode,例如当字母键A被按下时,GetKey(KeyCode.A) 以及 GetKey("A") 返回值都为true

1.4 触摸检测

Unity 定义了枚举类型TouchPhase

Touch.GetTouch(0).phase 返回最近一帧的触摸状态。

Input.toucheCount,触摸持续帧数。

Touch.deltaPosition 最后一阵滑动的值,只返回xy坐标,一般用vector2接收。

2. XGame游戏的输入管理系统

2.1 InputManager

InputManager 负责检测底层设备输入,派发输入事件。

(1) 定义枚举类型 InputState 表示当前的输入

(2) 枚举类型eTouchPhase表示 上一帧的输入状态

(3) 枚举类型GestureEvent 表示判定出的输入事件

(4) 类InputEvent 表示输入事件,包含了一个 GestureEvent 成员,具体的子类还定义了各自的数据字段,比如 TouchEvent 定义了触摸点的坐标等。

(5) InputManager 中定义一系列的代理类型,并定义了对应的事件

在 InputManager 的 Update() 方法中,调用GetTouchPhase获得上一帧的触摸状态(eTouchPhase),结合当前的输入状态(InputState),确定并修改输入状态,并判定输入产生何种效果(GestureEvent),然后获取相应的数据信息,填充 InputEvent,调用 RaiseEvent 派发事件,RaiseEvent的实现就是根据 参数的 GestureEvent 枚举值,执行不同的代理方法。

2.2 InputDelegate

InputDelegate 负责管理当前的输入模式,根据输入模式往 InputManager 注册当前模式下各种 InputEvent 的回调方法。

(1) 定义枚举 InputModule 表示游戏不同状态下的输入模式

(2) 定义方法 SubscribeHandlersAndEvents 来注册输入模式,以注册相应的回调方法

(3) 相应的有UnsubscribeHandlersAndEvents 注销回调

时间: 2024-08-30 01:34:09

【Unity】输入系统的相关文章

全面理解 Unity UI 系统

[狗刨学习网] 随着 Unity 4.6 发布,新 UI 系统终于与大家见面了. RectTransform Unity UI 系统使用 RectTransform 实现基本的布局和层次控制.RectTransform 继承于 Transform,所以 Transform 的所有特征 RectTransform 同样拥有.在 Transform 基础上,RectTransform 增加了 轴心(pivot).锚点(实际上是用 anchorMin.anchorMax 两个点定义的矩形区域).和 尺

【Unity编程】Unity动画系统(一)

Unity动画系统 Unity动画系统,也称为"Mecanim",提供了以下功能: 简单的工作流程,设置动画的所有元素,包括对象,角色和属性. 支持导入外部创建的动画片段和使用内置动画编辑器制作的动画片段. 人型动画重新定位,动画角色的运动控制可以被所有的角色模型共享,即角色的外观(SkinedMesh)和运动(Animator)是分离的,它们互相组合之后形成最终的动画. 用于编辑动画状态的的简化工作流程,即动画控制器. 方便预览动画片段,以及片段之间的插值过渡. 这使得动画师可以独立

为方便储户,某银行拟开发计算机储蓄系统。储户填写的存款单或取款单由业务员输入系统,如果是存款,系统记录存款人姓名、住址、、存款类型、存款日期、利率等信息,并印出存款单给储户;如果是存款,系统计算利息并印出利息清单给储户。写出问题定义并分析此系统的可行性。

如果是存款,储户填写存款单,然后交给业务员键入系统,同时系统还要记录存款人姓名.住址(或电话号码).身份证号码.存款类型.存款日期.利率等信息,完成后由系统打印存款单给储户. 如果是取款,储户填写取款单,然后交给业务员,业务员把取款金额输入系统并要求储户输入密码以确认身份,核对密码正确无误后系统计算利息并印出利息清单给储户. 为了满足储户的需求,该系统需要迅速的对用户的要求做出反馈,要对用户输入的信息作出最快的处理,所以就需要很大的主存容量,以及强大的数据库支持.由于是所面向的用户是广泛的储蓄用

《深入理解Android 卷III》第五章 深入理解Android输入系统

<深入理解Android 卷III>即将公布.作者是张大伟.此书填补了深入理解Android Framework卷中的一个主要空白.即Android Framework中和UI相关的部分.在一个特别讲究颜值的时代,本书分析了Android 4.2中WindowManagerService.ViewRoot.Input系统.StatusBar.Wallpaper等重要"颜值绘制/处理"模块 第5章 深入理解Android输入系统(节选) 本章主要内容: ·  研究输入事件从设

Eclipse中输入系统变量和运行参数--转

原文地址:http://chenzhou123520.iteye.com/blog/1931670 在开发时,有时候可能需要根据不同的环境设置不同的系统参数,我们都知道,在使用java -jar命令时可以使用-D参数来设置运行时的系统变量,同样,在Eclipse中运行java程序时,我们怎么设置该系统变量呢? 另外,如果我们的程序需要输入运行参数,在Eclipse中如何配置? 答案很简单,具体步骤为: 在要运行的类上右键点击Run As-->Run Configurations... 在弹出界面

Unity脚本系统

什么是脚本?脚本是一个 MonoBehavior, 继承关系是 MonoBehavior -> Behavior -> Component -> Object GameObject 的行为是由附加到他们身上的组件控制的. 游戏事件 MonoBehavior 类名和脚本名必须要一样 public class MainPlayer : MonoBehaviour { public string myName; // Use this for initialization void Start

10.1、android输入系统_必备Linux编程知识_inotify和epoll

1. inotify和epoll 怎么监测键盘接入与拔出? (1)hotplug机制:内核发现键盘接入/拔出==>启动hotplug进程==>发消息给输入系统 (2)inotify机制:输入系统使用inotify来监测目录/dev/input android使用inofity机制 当插入多个键盘时,系统怎么知道哪个键盘被按下? android下使用epoll,可以同时监控多个文件,当文件发生改变,其会知道谁变化了 参考代码:frameworks\native\services\inputfli

10.5 android输入系统_Reader线程_使用EventHub读取事件和核心类及配置文件_实验_分析

4. Reader线程_使用EventHub读取事件 使用inotify监测/dev/input下文件的创建和删除 使用epoll监测有无数据上报 细节: a.fd1 = inotify_init("/dev/input") b.假设input下已经有了event0和event1 fd2 = open("/dev/input/event0") fd3= open("/dev/input/event1") c.使用epoll_wait监测fd1.f

I/O输入系统

I/O输入系统 计算机有两个主要任务:I/O操作与计算处理.在许多情况下,主要任务是I/O操作.而计算处理只是附带的. 操作系统在计算机I/O方面的作用是管理和控制I/O操作和I/O设备. 概述 对与计算机相连设备的控制是操作系统设计者的主要任务之一. I/O设备技术呈现两个相矛盾的趋势.一方面,可以看到硬件与软件接口日益增长的标准化.这一趋势有助于将设备集成到现有计算机和操作系统.另一方面,也可以看到I/O设备日益增长的多样性.有的新设备与以前的设备区别很大,以至于很难集成到计算机和操作系统中