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);
|