这段时间在用Unity做用手柄操作的游戏,其中有几个按键有点不解,于是查了一些资料,现在总结出来分享一下

首先这里有张映射图

Android 手柄映射 原理 安卓 手柄映射_手柄

下面是几个例子,比如我要在input里面设置按A键,就新增一个input映射的一项。

Name
就是与Input.GetAxis( "Name" )这个函数里面的Name相对应的名字。GetAxis出来的值一般在[-1,1]的范围内。并且Name可以重复,重复的话Input会同时监听所有名字相同的按键。比如如果要设置3个按键让人物向左移动,写两个重复的Name以获取最多4个按键或者轴的监听。
Negative Button
这里填正方向的输入键的名称,比如a(下面会列一份表,来表明哪些键可以填入)
Positive Button
这里填正方向的输入键的名称,比如d
Alt Negative Button和Alt Positive Button
这里和上面两个设置是一样的效果,是第二按键
Gravity
没有按键的时候,按过的键的衰减速度
Dead
死亡区域,比如丢了按键,值要从1衰减到0,那么这个死区就是把哪个范围的值视为0
Type
Key or Mouse Button:就是使用按键来引发
Mouse Movement:使用光标移动来引发,这个返回的是鼠标的增量,注意:当用户快速移动鼠标时,它可能大于1或小于-1。
Joystick Axis:用轴的偏移来引发
Axis(轴)
X axis
就是用X的变化来区分,其实就是图上的的左上角的那个轴的横向移动
Y axis
就是用Y的变化来区分,就是左上角的那个轴的竖向移动
3rd axis
这个就要好好说一下了,3rd其实是LT和RT这个轴,他们两个是一体的,如果获取了这个轴的值,是>0的话则说明LT被按了,如果<0的话则说明RT被按了。而我用的5.5.0F3这个版本,出现了一个问题,就是如果什么按键都不按的话没有3rd轴的值是对的,但是按任意一个键之后,这个值就变成了0.01几了,而我这时候没有按任何LT或者RT,所以为了解决这个问题,我就把死区(Dead)调成了0.02。让LT和RT在不按键的情况下保持为0。
Joy Num
这个就是指从哪个手柄获取反应,如果选择Get Motion From all Joysticks就是从所有的手柄获取反应

比如手柄上的A按键就可以这样:

Android 手柄映射 原理 安卓 手柄映射_Input_02

主要按键设置为了joystick button 0,当然也可以joystick 1 button 0这种,如果joystick后面跟了数字,就说明值相应几号手柄

LT可以这样设置:

Android 手柄映射 原理 安卓 手柄映射_unity_03

附录:可以填入的button对应名:

标准键(Normal keys):
"a", "b", "c" ...
数字键(Number keys):
"1", "2", "3", ...
方向键(Arrow keys):
"up", "down", "left", "right"
小键盘键(Keypad keys):
"[1]", "[2]", "[3]", "[+]", "[equals]"
修改键(Modifier keys):
"right shift", "left shift", "right ctrl", "left ctrl", "right alt", "left alt", "right cmd", "left cmd"
鼠标按钮(Mouse Buttons):
"mouse 0", "mouse 1", "mouse 2", ...
操纵杆按钮(从任意操纵杆)(Joystick Buttons (from any joystick)) :
"joystick button 0", "joystick button 1", "joystick button 2", ...
操纵杆按钮(从指定操纵杆)(Joystick Buttons (from a specific joystick)):
"joystick 1 button 0","joystick 1 button 1","joystick 2 button 0","joystick 2 button 1" ...
特殊键(Special keys):
"backspace", "tab", "return", "escape", "space", "delete", "enter", "insert", "home", "end", "page up", "page down"
功能键(Function keys):
"f1", "f2", "f3", ...