Input类在我们游戏开发中需要获取外设设备(比如键盘、鼠标、游戏手柄等)进行交互时,基本都会用到。
它主要有以下一些常用的方法。
1、GetKey(KeyCode key),检测按键是否被按下;
2、GetKeyDown(KeyCode key),检测按键被按下的那一帧;
3、GetKeyUp(KeyCode key),检测按键被释放那一帧;
其中,第一个方法和后面方法是有一定区别的,GetKey方法,在按键被按下期间它会持续返回true,所以比较适合需持续响应按键输入的情况,比如角色的移动;而GetKeyDown和GetKeyUp方法只有在被按下或放开那一帧返回True,只响应一次,比较适合发射子弹或者跳跃这种。
对于KeyCode这个枚举参数,官方定义了很多。
但我们比较常用的是这些:
- KeyCode.A, KeyCode.B, KeyCode.C, ... KeyCode.Z: 字母按键;
- KeyCode.Alpha0, KeyCode.Alpha1, KeyCode.Alpha2, ... KeyCode.Alpha9: 数字键按键;
- KeyCode.Space: 空格键。
- KeyCode.Return: 回车键。
- KeyCode.Escape: Esc键。
- KeyCode.LeftShift, KeyCode.RightShift: Shift键。
- KeyCode.LeftControl, KeyCode.RightControl: Control键。
- KeyCode.LeftAlt, KeyCode.RightAlt: Alt键。
- KeyCode.LeftArrow, KeyCode.RightArrow, KeyCode.UpArrow, KeyCode.DownArrow: 方向键。
- KeyCode.F1, KeyCode.F2, KeyCode.F3, ... KeyCode.F12: 功能键。
4、 GetButton(string buttonName),检测指定虚拟按键是否被按下;
5、GetButtonDown(string buttonName),检测指定虚拟按键被按下的那一帧;
6、GetButtonUp(string buttonName),检测指定虚拟按键被释放那一帧;
上面三种方法是检测虚拟按键的方法,其中 GetButton也是细腻按键按下时,持续返回True,比较适合奔跑或射击,而GetButtonDown和GetButtonUp只有在按下或弹开那一帧返回True,GetButtonDown比较适合打开菜单,使用特殊技能这些,GetButtonUp比较适合停止奔跑,切换武器这些。
7、GetAxis(string axisName),获取指定虚拟轴的值;
8、GetAxisRaw(string axisName);获取指定虚拟轴的原始值,该方法返回的值只有-1、0、1三个可能的取值。
其中GetAxis和GetAxisRaw有区别的,GetAxi返回的数值是根据输入变化而返回平滑过渡的一系列数值。而GetAxisRaw根据取值范围,直接映射,返回-1、0、1,中间没有过渡。所以GetAxis比较适合平滑过渡的情况,如角色移动,相机旋转;而GetAxisRaw应用在更直接和灵敏的情况,比如跳跃,攻击。
设备虚拟键盘的映射可在Edit-Input Manager里面设置和查看。
除了上面的方法,还有一些跟鼠标相关的常见应用方法:
1、Input.mousePosition,取当前鼠标在屏幕上的位置,返回一个 Vector3 类型的坐标;
2、Input.GetMouseButtonDown(int button),检测鼠标按下那一帧;
3、Input.GetMouseButton(int button),检测鼠标按下;
4、Input.GetMouseButtonUp(int button),检测鼠标释放那一帧;
其中,参数 button 表示鼠标按钮的索引,0 表示左键,1 表示右键,2 表示中键。
5、Input.GetAxis("Mouse X"),Input.GetAxis("Mouse Y"),获取鼠标在水平和垂直方向上的移动距离,返回一个浮点数。
6、Input.GetAxis("Mouse ScrollWheel"),获取鼠标滚轮的滚动量,返回一个浮点数。