处理用户的shuru是游戏中必不可少的元素。Unity提供了一个非常强大易用的处理输入信息的类 —— Input,它可以处理鼠标、键盘、遥感/方向盘/手柄等游戏外设的输入信息,也可以处理 IOS/Android 等移动设备的触摸输入信息。Input Manager (输入管理器)用于为项目定义各种不同的输入轴和操作。开发人员可以通过编写脚本接收输入信息,完成与用户的交互。
Input Manager(输入管理器)
Input 类时处理输入的接口,下面包含成员变量和函数的简要介绍。
Input 类成员变量
成员变量 | 说明 |
---|---|
acceleration | 得到设备当前在三维空间中的线性加速度(只读) |
accelerationEventCount | 得到上一帧的加速度参数数据长度 |
accelerationEvents | 得到上一帧的加速度数据列表(只读)(分配临时变量) |
anyKey | 是否有按键按下(只读) |
anyKeyDown | 当有任意按键按下的第一帧返回true(只读) |
compass | 罗盘属性(仅支持手持设备)(只读) |
comenstateSensors | 是否需要根据屏幕方向补偿感应器 |
compositionCursorPos | 当前IME组合字符串的光标位置 |
compositionString | 用户通过IME输入的组合字符串 |
deviceOrientation | 操作系统提供的设备方向(只读) |
gyro | 返回默认的陀螺仪 |
imeCompositionMode | 设置IME组合模式 |
imelsSelected | 当前是否启用了IME输入键盘 |
inputString | 得到当前帧的键盘输入字符串(只读) |
mousePosition | 鼠标位置的像素坐标(只读) |
multiTouchEnabled | 系统是否支持多点触摸 |
simulateMouseWithTouches | 屏幕触控模拟鼠标的点击 |
touchCount | 当前所有触摸状态列表长度(只读) |
touches | 当前所有触摸状态列表(只读)(分配临时变量) |
touchSupported | 返回应用程序正在运行的设备是否支持触摸输入 |
Input 类成员函数
成员函数 | 说明 |
---|---|
GetAccelerationEvent | 返回指定的上一帧加速度测量数据(不分配临时变量) |
GetAxis | 根据名称得到虚拟输入轴的值 |
GetAxisRaw | 根据名称得到虚拟坐标轴的未使用平滑过滤的值 |
GetButton | 如果指定名称的虚拟键被按下,那么期间持续返回 true |
GetButtonDown | 指定名称的虚拟按键被按下的那一帧返回 true |
GetButtonUp | 指定名称的虚拟按键被松开的那一帧返回 true |
GetJoystickNames | 返回当前连接的所有摇杆的名称数组 |
GetKey | 当指定的按键被按下期间持续返回 true |
GetKeyDown | 当指定的按键被按下的那帧返回 true |
GetKeyUp | 当指定的按键被松开的那帧返回 true |
GetMouseButton | 指定的鼠标按键是否按下 |
GetMouseButtonDown | 指定的鼠标俺家松开的那一帧返回 true |
GetMouseButtonUp | 指定的鼠标按键松开的那一帧返回 true |
GetTouch | 返回指定的触摸数据对象(不分配临时变量) |
IsJoystickPreconfigured | 配置默认的摇杆输出(只限Linux) |
ResetInputAxes | 重置所有输入,调用该方法后所有方向轴和按键的数值都变为 0 |
Key 和 Button 的区别:
在Input类中,Key与物理按键对应,例如键盘、鼠标、摇杆上的按键,其映射关系无法改变,可以通过按键名称或者按键编码KeyCode来获取其输入状态。例如GetKeyDown(KeyCode.A)会在按下键盘 “A”键时返回true。
而Button 是输入管理器 Input Manager 中定义的虚拟按键,通过名称来访问。开发者可以根据需要创建和命名虚拟按键,并设置与物理按键(及其组合)的消息映射。依次选择菜单栏中的 Edit -> Project Settings -> Input 命令,即可打开输入管理器。
Key 不可改变,Button可以灵活的配置输入,并且可以让玩家来自定义键位输入,因此在开发中推荐使用虚拟按键。
输入轴Axis:
输入轴Axis用来模拟平滑变化的输入,例如摇杆的变化、方向盘的转动等,需要在输入管理器中进行配置。它包含政府两个虚拟按键(Positive Button 和 Negative Button)。可以吧一个输入轴想象成一个滑动条,左边取值 -1,右边取值为 1。当按下按键时,数值会逐渐从 0 向一端变化,实现渐变的效果,而不会显得突兀。(例如汽车启动)
鼠标输入
(1)鼠标相应事件示例:
void Update() {
if(Input.GetMouseButton(0)) {//左键按下
print("鼠标左键按下");
}
if(Input.GetMouseButtonDown(1)) {//右键按下
print("鼠标右键按下");
}
if(Input.GetMouseButtonUp(2)) {//中键抬起
print("鼠标中键抬起");
print("鼠标当前位置:" + Input.mousePosition);
}
}
(2)鼠标控制物体旋转:
void Update() {
float horizontalSpeed = 2.0f;
float verticalSpeed = 2.0f;
float h = horizontalSpeed * Input.GetAxis ("Mouse X");
float v = verticalSpeed * Input.GetAxis ("Mouse Y");
transform.Rotate (v, h, 0);
}