您当前的位置: 首页 >  unity

野奔在山外的猫

暂无认证

  • 2浏览

    0关注

    85博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Unity笔记】Unity中的输入与控制

野奔在山外的猫 发布时间:2021-05-02 10:19:48 ,浏览量:2

注意:本笔记内容适用于 Unity 旧版输入系统,允许转载,无需注明出处。

参考书籍: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:模拟平滑变化的输入,例如摇杆、方向盘。
一、鼠标输入 1.1 鼠标输入 成员变量 成员变量描述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
二、键盘操作 2.1 键盘输入 成员方法 成员方法描述GetKey()按键按下期间返回trueGetKeyDown()按键按下的第一帧返回trueGetKeyUp()按键松开的第一帧返回trueGetAxis("Horizontal")GetAxis("Vertical")用方向键或W、A、S、D键来模拟-1到1的平滑输入 2.2 常用按键名与KeyCode编码 键盘按键NameKeyCode字母键A、B、C…Za、b、c…zABCZ数字键0~90~9Alpha0~Alpha9功能键F1~F12f1~f12F1~F12退格键backspaceBackspace回车键returnReturn空格键spaceSpace退出键escEscTab键tabTab上下左右方向键up、down、left、rightUpArrowDownArrowLeftArrowRightArrow左、右Shift键left shift、right shiftLeftShiftRightShift左、右Alt键left alt、right altLeftAltRightAlt左、右Ctrl键left ctrl、right ctrlLeftCtrlRightCtrl 三、游戏外设输入 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),具体参数如下:

关注
打赏
1659777066
查看更多评论
立即登录/注册

微信扫码登录

0.0434s