五、输入控制
(1)键盘输入:
对于键盘按键操作,只有三种操作:
键被按下: Input.GetKeyDown();
键被松开: Input.GetKeyUp() ;
键被按下一直没松开: Input.GetKey();
(2)鼠标输入:
Input.GetMouseButtonDown(); 按下触发
Input.GetMouseButtonUp(); 松开触发
Input.GetMouseButton(); 按下不松开一直触发
括号中输入 0对应左键,1对应右键,2对应中键
(3)虚拟轴输入
public static float GetAxis (string axisName);
返回由 axisName 标识的虚拟轴的值。对于键盘和游戏杆输入设备,该值将处于 -1...1 的范围内。水平范围和垂直范围从 0 变为 +1 或 -1,以 0.05f 的步幅增加/减少。
public static float GetAxisRaw (string axisName);
对于键盘和游戏杆输入,该值将处于 -1...1 的范围内。 由于未对输入进行平滑处理,键盘输入将始终为 -1、0 或 1。 如果您想自己完成键盘输入的所有平滑处理,这非常有用。
其中需要说明的是,在创建unity工程时,都有以下默认的输入轴:
1、 水平线 (Horizontal) 和垂直线 (Vertical) 映射至 w、a、s、d 和方向键。
2、Fire1、Fire2、Fire3 分别映射至 Control、Option (Alt) 和 Command 键。
3、 Mouse X 和 Mouse Y 映射至鼠标移动增量。
(4)Unity 手机触屏事件
当将Unity游戏运行到IOS或Android设备上时,桌面系统的鼠标左键可以自动变为手机屏幕上的触屏操作,但如多点触屏等操作却是无法利用鼠标操作进行的。Unity的Input类中不仅包含桌面系统的各种输入功能,也包含了针对移动设备触屏操作的各种功能。其中触碰信息都存储在Input.touches结构数组。
参数说明:
fingerId:触摸的唯一索引
position:触摸屏幕的位置
deltatime:从最后状态到目前状态所经过的时间
tapCount:点击数。Andorid设备不对点击计数,这个方法总是返回1
deltaPosition:自最后一帧所改变的屏幕位置
phase:相位,也即屏幕操作状态。相位状态有:
Began——手指刚刚触摸屏幕。
Moved——手指在屏幕上移动。
Stationary——手指触摸屏幕,但自最后一阵没有移动。
Ended——手指离开屏幕。
Canceled——系统取消触控跟踪,原因如把设备放在脸上或同时超过5个触摸点。
参考:https://blog.csdn.net/u014550279/article/details/50537713
(5)触摸实际应用
(1)在unity中touch事件同时也会触发GetMouseButton事件,需要注意,因此GetMouseButton可以直接在PC和手机通用。
Input.GetAxis("Mouse X")取得的值,在手机中实际用Input.GetTouch(0).deltaPosition来表示,但是也可以用Input.GetAxis("Mouse X")来判断指尖移动的距离,但是要注意使用if(Input.touchCount>0&&Input.GetTouch(0).phase == TouchPhased.Moved)来做为判断是否按下的条件,这样不管用Input.GetAxis("Mouse X")或者Input.GetTouch(0).deltaPosition都没有问题。