Unity 中,使用 Input 类获取用户输入,记录下常用的函数及注意事项。
键盘输入:
Input.GetKeyDown(KeyCode key) 获取指定按键被按下的事件,直到松开按键再次按下,才能获取第二次输入。其中参数 key 与物理按键对应,例如KeyCode.A 代表键盘上的 ‘A’ 键,KeyCode 与 物理按键的映射是无法改变的。
Input.GetKeyUp(KeyCode key) 与 Input.GetKeyDown(KeyCode key) 同理,是在按键松开的时候获得输入。
Input.GetKey(KeyCode key) 在 key 被持续按住时,调用此方法。
鼠标输入:
Input.GetMouseButtonDown(int button)
Input.GetMouseButtonUp(int button)
Input.GetMouseButton(int button)
鼠标输入与键盘输入类似,参数 0 代表鼠标左键、参数 1 代表鼠标右键、参数 2 代表鼠标中键。
自定义输入:
Unity 允许创建自定义的虚拟轴,虚拟按键是虚拟轴的特殊情况,在InputManager 中统一视为虚拟轴。 选择菜单栏中的 Edit->Project Settings->Input 可以打开InputManager,如图:
Unity 默认创建了18个虚拟轴,每个轴的属性如图:
Name 是虚拟轴的名称,通过 Name 在脚本中访问虚拟轴,可以为不同的设备指定同名的虚拟轴,输入来自于用户正在使用的那个设备,在写脚本时,无需考虑输入来自于哪里。
Negative Button 轴的负按键对应的物理按键。
Positive Button 轴的正按键对应的物理按键。
Alt Negative Button 备选负按键。
Alt Positive Button 备选正按键。
Gravity 当键松开后,轴复位的速度。 越大表示越快复位。
Dead 死亡区间,在此区间的值都会被认为是复位值,即0。 个人理解是绝对值在此区间。
Sensitivity 灵敏度,对按键来说是响应速度,与 Gravity 相对,对鼠标来说是单位时间内移动距离的影响
Snap 选中后,当按下反方向键后,值立刻复位;如果不选中,原方向值不会立刻归0,会有一个减速到0的过程。
Invert 选中后,正负按键颠倒。
Axis 这个虚拟轴所映射的设备输入轴(摇杆、鼠标、手柄等)。
在脚本中通过以下方法获取虚拟按键输入:
Input.GetButtonUp(string buttonName)
Input.GetButtonDown(string buttonName)
Input.GetButton(string buttonName)
获取轴输入:
Input.GetAxis(string axisName) 输入轴的值一般在 -1 到 1之间,鼠标输入表示的是移动距离,所以会大于这个范围。使用虚拟轴的好处是,游戏发布后,用户可以自定义键位设置。
Note: 官方文档明确说明,GetXXXUp、GetXXXDown 这类输入一定要放在 Update() 中,而不是 FixedUpdate() 中, 原因是在每一帧会将输入重置,意思就是说在 Update() 中一定能检测到输入,并将输入重置。因此如果把此类 Input 方法放在 FixedUpdate() 中,有可能造成漏掉输入的情况,同时也有可能造成一次输入检测出多次。 而 GetKey()、GetButton()、GetMouseButton()、GetAxis() 则没有明确说明,由于是连续检测,应该也可以放在 FixedUpdate() 。