参考书籍:Unity5.X 从入门到精通 开发平台:Unity 2018版本 编程语言:CSharp 编程平台:Visual Studio 2018 or Visual Code
2022/12/06 笔记完善中…
一、前言尽管 Unity 在 2021 版本后推荐使用 New Input System 作为开发首选,但依然不能阻止开发者在针对特定项目或Demo上使用 Old Input System 作为开发首选。本文重点围绕旧输入系统作出记录。
二、旧版输入管理器 位于 Project Setting 面板下的 Input 栏目。主要提供可快速创建与编辑的输入管理选项。初始工程环境,提供至多18个有效使用的常规输入轴配置。例如 :
- Horizontal & Vertical :被用于 WASD 按键移动
- MouseX & MouseY:被用于平面鼠标的上下水平移动
- Fire1 & Jump:鼠标左键 与 空格键交互。
注意:输入类轴配置的增多与减少依赖于手动配置 Size 大小。原则上递增值即可,在确认需要减少 Size 值需慎重,避免将已配置项完全删除。同时应注意轴配置名称,重复的命名配置下,将优先应用第一个匹配的轴名称配置。
2.1 旧版输入轴配置说明- Name:输入轴名称,使用
GetAxis(string axisName)获取轴配置。- 注意:当存在多个同名轴名称,以与之匹配的 第一个轴 信息作为配置基础。
- Descriptive (Negative) Name:描述字段。用于阐述 正/负 双向按键行为的具体内容。
- 任何按键行为都具备双向性,用于否定对立按键的行为。
- 举个例子
- 攻击行为:短按松手 = 平A 长按松手 = 蓄力A
- 移动行为:按下汽车引擎逐渐启动,速度由低至高。松手汽车不会立刻停下,而是速度由高至低衰减至停下。
- (Negative/Positive) Button:负/正 向的物理按键绑定。通常情况下关联键盘现有按键。
- Alt (Negative/Positive) Button:同上,但作为备选按键存在。
- 例如 WASD 以外可以使用 ↑↓←→ 作为替代按键使用。
- Gravity:联系 Input Manager 下 Axis,输入系统依赖于 Vector2 系列的轴值作为判断依据。
- 例如前进为 0-1 的过渡,让角色移动由一个由慢至快前进的过程。或是设定值为1,直接切换,无需 0-1 过渡过程。
- Dead:小于该值的任何输入值(不论正负值)都会视为0。
- 例如在遥杆控制器上的运用较为常见。
- Sensitivity:输入设备的操作灵敏度。
- 对于键盘输入,该值越大则响应时间越快,该值越小越平滑。
- 对于鼠标输入,设置该值会对鼠标的实际移动距离按比例缩放
- Snap:如果该值为true,当轴收到负按键的输入信号时,轴的数值会立即置为0。
- 仅用于键/鼠标输入|
- Invert:转置轴输入。
- 如果该值为true,正按键会发送负值,负按键会发送正值
- 例如 小圈子游戏 —— IdentyV 中 “宿伞之魂” 的摇铃 DeBuff 效果。
- Type:输入轴的类型。
- 按键对应Key/Mouse类型。
- 鼠标移动和滚轮滑动对应Mouse Movement类型
- 摇杆设置为Joystick Axis
- 窗口移动消息设置为WIndow Movement|
- Axis:要映射的设备输入轴(摇杆、鼠标、手柄等)
- Joy Num:设置使用哪个摇杆作为消息输入。
- 默认接受所有摇杆的输入,仅用于输入轴和非按键输入
0.1 Input类 成员变量 成员变量描述
acceleration获取设备当前在三维空间中的线性加速度只读accelerationEventCount得到上一帧的加速度参数数据长度accelerationEvents得到上一帧的加速度数据列表(分配临时变量)只读anyKey是否有按键按下只读anyKeyDown当有任意按键按下的第一帧返回true只读compass罗盘属性(仅支持手持设备)只读compensateSensors是否根据屏幕方向补偿感应器compositionCursorPos当前IME组合字符串的光标位置compositionString用户通过IME输入端组合字符串deviceOrientation操作系统提供的设备方向(只读)gyro返回默认的陀螺仪imeCompositionMode设置IME组合模式imelsSelected当前是否启用了IME输入键盘inputString得到当前帧的键盘输入字符串只读location设备当前的位置属性(仅支持手持设备)只读mousePosition鼠标位置的像素坐标只读multiTouchEnabled系统是否支持多点触摸simulateMouseWithTouches屏幕触控模拟鼠标点击touchCount当前所有触摸状态列表长度只读touches当前所有触摸状态列表(分配临时变量)只读touchSupported返回应用程序正在运行的设备是否支持触摸输入
0.2 Input类 成员函数
成员函数描述GetAccelerationEvent()返回指定的上一帧加速度测量数据(不分配临时变量)GetAxis()根据名称得到虚拟输入轴的值GetAxisRaw()根据名称得到虚拟坐标轴的未使用平滑过滤的值GetButton()如果指定名称的虚拟按键被按下,返回trueGetButtonDown()指定名称的虚拟按键被按下的那一帧,返回trueGetButtonUp()指定名称的虚拟按键被松开的那一帧,返回trueGetJoystickNames()返回当前连接的所有摇杆的名称数组GetKey()当指定按键被按下时返回trueGetKeyDown()当指定按键被按下的那一帧返回trueGetKeyUp()当指定按键被松开的那一帧返回trueGetMouseButton()指定的鼠标按键是否按下GetMouseButtonDown()指定的鼠标按键按下的那一帧返回trueGetMouseButtonUp()指定的鼠标按键松开的那一帧返回trueGetTouch()返回指定的触摸数据对象(不分配临时变量)IsJoystickPreconfigured配置默认的摇杆输出(只限Linux)ResetInputAxes重置所有输入,调用该方法后所有方向轴
- Key:与物理按键对应。可通过按键名称或按钮编码
KeyCode获取输入状态。 - Button:输入管理器(Input Manager)中定义的虚拟按键。
- Axis:模拟平滑变化的输入,例如摇杆、方向盘。
mousePosition得到当前鼠标位置Vector3
1.2 鼠标输入 成员方法
成员函数描述GetMouseButtonDown()鼠标按键按下的第一帧返回trueGetMouseButtonUp()鼠标按键松开的第一帧返回trueGetMouseButton()鼠标按键按下期间一直返回trueGetAxis("Mouse X")得到一帧内鼠标在水平方向的移动距离GetAxis("Mouse Y")得到一帧内鼠标在垂直方向的移动距离
Unity中,鼠标位置用屏幕像素坐标表示,屏幕左下角为坐标原点(0, 0),右上角为(Screen.width, Screen.height)
- Screen.width:屏幕分辨率的宽度
- Screen.height:屏幕分辨率的高度
mousePosition:Vector3类型 (x, y, z)
- x:水平坐标
- y:垂直坐标
- z:始终为0
GetKey()按键按下期间返回trueGetKeyDown()按键按下的第一帧返回trueGetKeyUp()按键松开的第一帧返回trueGetAxis("Horizontal")和GetAxis("Vertical")用方向键或W、A、S、D键来模拟-1到1的平滑输入
2.2 常用按键名与KeyCode编码
键盘按键NameKeyCode字母键A、B、C…Za、b、c…zA、B、C…Z数字键0~90~9Alpha0~Alpha9功能键F1~F12f1~f12F1~F12退格键backspaceBackspace回车键returnReturn空格键spaceSpace退出键escEscTab键tabTab上下左右方向键up、down、left、rightUpArrow、DownArrow、LeftArrow、RightArrow左、右Shift键left shift、right shiftLeftShift、RightShift左、右Alt键left alt、right altLeftAlt、RightAlt左、右Ctrl键left ctrl、right ctrlLeftCtrl、RightCtrl
三、游戏外设输入
3.1 外设输入 成员方法
成员方法描述GetAxis()得到输入轴的值GetAxisRaw()得到未经平滑处理的输入轴的数值GetButton()虚拟键按下期间一直返回trueGetButtonDown()虚拟键按下的第一帧返回trueGetButtonUp()虚拟键松开的第一帧返回true
- Unity默认为用户创建 Fire1、Fire2、Fire3、Jump以及虚拟轴Horizontal和Vertical。
IOS与Android系统中的操作通过触摸完成。(以前是按键)
4.1 移动端输入 成员变量 成员变量描述multiTouchEnabled系统是否支持多点触摸simulateMouseWithTouches屏幕触控模拟鼠标点击touchCount当前所有触摸状态列表长度只读touches当前所有触摸状态列表(分配临时变量)只读touchSupported返回应用程序正在运行的设备是否支持触摸输入
4.2 移动端输入 成员方法
成员方法描述GetTouch()返回指定的触摸数据对象(不分配临时变量)
4.3 结构体Touch的变量
通过GetTouch()或者touches可访问移动设备的触摸数据,数据保存在Touch的结构体中,结构体Touch的变脸如下所示:
fingerld触摸数据的唯一索引idposition触摸的位置deltaPosition触摸位置的改变量deltaTime距离上次触摸数据变化的时间间隔taoCount单击计数phase触摸的状态描述
通过吊桶phase可访问当前触摸状态,状态如下所示:
Began手指刚触碰屏幕Moved手指在屏幕上移动Stationary手指触碰屏幕并从上一帧起没有移动Ended手指离开屏幕Cancled系统取消了跟踪触摸
五、自定义输入
创建自定义虚拟按键:
- 打开Unity菜单栏 -> Editor -> Project Setting
- 选择Input分栏
默认情况下Unity创建了18个输入轴(Axes),具体参数如下:
