Unity自己有Input类,之前没怎么深入研究过,都是Input.GetKeyDown(KeyCode)了事。这次为了实现多种方法多个平台的输入(触屏,键盘,鼠标,手柄),特地拿出这一部分探讨。
鼠标&触摸
鼠标与触摸接近,区别在于:
- 鼠标存在Hover状态,即悬停的情况,而触摸没有。
- 触摸有多点手势。
- 触摸输入在设计时对精准度要求需要降低。
对应的平台无非PC/Mac(鼠标)与Android/IOS/部分Win(触摸)。为便捷实现这两种输入方法,推荐一个插件FingerGesture,兼容鼠标和触摸输入。功能全面,包括点击(Tap),拖拽(Drag),双指缩放(Pinch)等都可以简单实现,非常方便。
使用方法待续…
键盘&手柄
两者都为按键输入。只考虑键盘输入时,可以简单的使用Input.GetKeyDown(KeyCode)和Input.GetKey(KeyCode)就能完成绝大部分的逻辑。前者会在按键按下的那一帧返回true(再次触发需要弹起后再按下),后者只要键处于按下状态便会一直返回true。
如果要使用手柄进行输入,就有必要学习一下Input的定义了。在菜单Edit-Project Setting-Input中可以进行自定义输入。
手柄的按键映射和相应键值:(360/XboxOne手柄,每个都亲测过了)
- A - joystick button 0
- B - joystick button 1
- X - joystick button 2
- Y - joystick button 3
- LB - joystick button 4
- RB - joystick button 5
- Back - joystick button 6
- Start - joystick button 7
- 左摇杆水平 - X axis(最上-1~1最下)
- 左摇杆垂直 - Y axis(最左-1~1最右)
- 右摇杆水平 - 4th axis(最上-1~1最下)
- 右摇杆垂直 - 5th axis(最左-1~1最右)
- 方向键水平 - 7th axis(左-1,1右)
- 方向键垂直 - 8th axis(上-1,1下)
- LT - 9th axis(松开0~1完全按下)
- RT - 10th axis(松开0~1完全按下)
如何编写代码
使用Input中定义的输入方式,在大部分情况下可以实现一句代码同时兼容手柄与键盘输入。
- Input.GetButtonDown()和Input.GetButtonDown()
手柄中所有按键类和键盘输入使用这个方法进行判断。 - Input.GetAxis()和Input.GetAxisRaw()
手柄的方向杆类输入使用这个方法返回数值。GetAxisRaw()会忽略Unity对数值的平滑作用。