U1L8——Input输入相关
Input
输入 - Unity 手册
访问输入系统的接口。这是老输入系统,新输入系统请看这里 ——> U4S1
Input类 提供了大部分和输入相关的内容,包括:鼠标 键盘 触屏 手柄 重力感应
对于我们目前来说,鼠标 键盘 是必须掌握的核心知识
重点是鼠标和键盘相关的API:GetAxis
注意!输入相关内容一定写在Update中
本章代码关键字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
   | Input                        
  Input.mousePosition             Input.GetMouseButtonDown()     Input.GetMouseButtonUp()     Input.GetMouseButton()         Input.mouseScrollDelta        
  Input.GetKeyDown()             Input.GetKeyUp()             Input.GetKey()                 Input.GetAxis()                 Input.GetAxisRaw();             Input.anyKey                 Input.anyKeyDown             Input.inputString            
  Input.GetJoystickNames()     Input.GetButtonDown()         Input.GetButtonUp()             Input.GetButton()            
  Input.touchCount             Input.touches[]                 Touch.position                 Touch.deltaPosition             Input.multiTouchEnabled         Input.gyro.enabled             Input.gyro.gravity             Input.gyro.rotationRate         Input.gyro.attitude            
   | 
 
鼠标相关
获取鼠标在屏幕位置
屏幕坐标的原点 是在 屏幕的左下角 往右是X轴正方向 往上时Y轴正方向
返回值时Vector3 但是只有x和y有值 z一直是0 是因为屏幕本来就是2D的 不存在z轴
1
   | print(Input.mousePosition);
   | 
 
检测鼠标输入
鼠标按下相关检测 对于我们来说
可以做例如发射子弹的逻辑、控制摄像机转动
鼠标按下
0左键 1右键 2中键
只有按下的这一瞬间 进入一次(只会进入一次)
1 2 3 4
   | if (Input.GetMouseButtonDown(0)) {     print("鼠标某一个键按下了"); }
   | 
 
鼠标抬起
0左键 1右键 2中键
鼠标抬起一瞬间 进入(只会进入一次)
1 2 3 4
   | if (Input.GetMouseButtonUp(0)) {     print("鼠标某一个键抬起了"); }
   | 
 
鼠标长按
鼠标长按按下抬起都会进入
当按住按键不放是 会一直进入这个判断(结束后不再进入)0左键 1右键 2中键
只有按下的这一瞬间 进入一次(只会进入一次)
1 2 3 4
   | if (Input.GetMouseButton(1)) {     print("右键有操作"); }
   | 
 
中键滚动
返回值的y:-1为下、0为没有动、1为上
它的返回值是Vector2的值 我们鼠标中键滚动 会改变其中的Y值
1
   | print(Input.mouseScrollDelta);
   | 
 
键盘相关
类似于检测鼠标输入,例如 按下一个键释放一个技能或者移动等
键盘按下
1 2 3 4
   | if (Input.GetKeyDown(KeyCode.W)) {     print("W键按下"); }
   | 
 
以下的方法都有传入字符串的重载
这里传入的字符串 不能是大写的 否则报错!!!
只能传入小写字符串
1 2 3 4
   | if (Input.GetKeyDown("space")) {     print("Space键按下"); }
  | 
 
键盘抬起
1 2 3 4
   | if (Input.GetKeyUp(KeyCode.A)) {     print("A抬起"); }
   | 
 
键盘长按
1 2 3 4
   | if (Input.GetKey(KeyCode.S)) {     print("S按下"); }
   | 
 
检测默认轴输入
鼠标 键盘输入 主要是用来控制玩家 例如旋转 位移等等
而Unity提供了 更方便的方法 来帮助我们控制 对象的 位移和旋转
在Edit–Project Setting–Input Manager可以使用的默认轴如下:

同时,对它们可以修改,也可以自行添加默认轴(修改Size即可)
1 2 3 4 5 6 7 8 9 10 11 12 13
   | 
  print(Input.GetAxis("Horizontal"));
 
 
  print(Input.GetAxis());
 
  print(Input.GetAxis("Mouse X"));
 
  print(Input.GetAxis("Mouse Y"));
 
  | 
 
我们默认的 GetAxis方法是有渐变的 会在 -1到1 之间 会出现小数
无渐变的轴输入
GetAxisRaw方法 和 GetAxis 使用方式相同
只不过它的返回值只会是-1、0、1,不会有中间值
键盘鼠标其他输入
检测是否有任意键或者鼠标长按
1 2 3 4
   | if (Input.anyKey) {     print("有一个键正在被按住"); }
   | 
 
检测是否有任意键或鼠标按下
1 2 3 4
   | if (Input.anyKeyDown) {     print("有一个键按下"); }
   | 
 
检测获取这一帧的键盘输入
和Input.anyKeyDown配合可以用来进行改键的处理
1
   | print(Input.inputString);
   | 
 
手柄输入相关
得到连接的手柄的所有按钮的名字
1
   | string[] strs = Input.GetJoystickNames();
   | 
 
某一个手柄键按下
1 2 3 4
   | if (Input.GetButtonDown("Jump")) {
  }
  | 
 
某一个手柄键抬起
1 2 3 4
   | if (Input.GetButtonUp("Jump")) {
  }
  | 
 
某一个手柄键长按
1 2 3 4
   | if (Input.GetButton("Jump")) {
  }
  | 
 
移动设备触摸相关
1 2 3 4 5 6 7 8 9
   | if (Input.touchCount > 0) {     Touch t1 = Input.touches[0];
           print(t1.position);          print(t1.deltaPosition); }
   | 
 
是否启用多点触控
1
   | Input.multiTouchEnabled = false;
   | 
 
陀螺仪(重力感应)
是否开启陀螺仪
若要使用陀螺仪,此项必须开启才能正常使用
1
   | Input.gyro.enabled = true;
   | 
 
重力加速度向量
1
   | print(Input.gyro.gravity);
   | 
 
旋转速度
1
   | print(Input.gyro.rotationRate);
   | 
 
陀螺仪 当前的旋转的四元数
比如用这个角度信息来控制场景上的一个3D物体受到重力影响,手机/手柄怎么动 它怎么动
1
   | print(Input.gyro.attitude);
   |