文章目录

  • 一、键盘输入
  • 二、鼠标输入
  • 三、触屏输入
  • 四、手柄输入
  • 五、其他输入
  • 六、说明



新输入系统提供了对应的输入设备类,帮助我们对某一种设备输入进行检测

一、键盘输入
using UnityEngine.InputSystem;

Keyboard keyBoard = Keyboard.current;

(一)单个按键按下抬起长按

// 按下
if (keyBoard.enterKey.wasPressedThisFrame) { }

// 抬起
if (keyBoard.dKey.wasReleasedThisFrame) { }

// 长按
if (keyBoard.spaceKey.isPressed) { }

// 空格键当前帧是否按下
if (keyBoard.spaceKey.wasPressedThisFrame) print("空格键按下");

// 判断 D 键是否释放
if (keyBoard.dKey.wasReleasedThisFrame) print("D键抬起");

// 判断空格是否一直处于按下状态
if (keyBoard.spaceKey.isPressed) print("空格按下状态");

(二)通过事件监听按键按下

// 通过给 keyboard 对象中的 文本输入事件 添加委托函数
// 便可以获得每次输入的内容
keyBoard.onTextInput += (c) => { print("通过lambda表达式" + c); };
keyBoard.onTextInput += TextInput;
keyBoard.onTextInput -= TextInput;

private void TextInput(char c) {
    print("通过函数进行事件监听" + c);
}

(三)任意键的处理

// keyBoard.anyKey
// wasPressedThisFrame
// wasReleasedThisFrame
// isPressed

// 任意键按下了
if (Keyboard.current.anyKey.wasPressedThisFrame) print("任意键按下");
二、鼠标输入
using UnityEngine.InputSystem;

Mouse mouse = Mouse.current;

(一)鼠标三个键位

鼠标左键:mouse.leftButton

鼠标右键:mouse.rightButton

鼠标中键:mouse.middleButton

鼠标向前、向后键:mouse.forwardButton、mouse.backButton

// 按下
if (mouse.leftButton.wasPressedThisFrame) { }

// 抬起
if (mouse.leftButton.wasReleasedThisFrame) { }

// 长按
if (mouse.rightButton.isPressed) { }

(二)鼠标位置

// 获取当前鼠标位置
mouse.position.ReadValue();

// 得到鼠标两帧之间的一个偏移向量 
mouse.delta.ReadValue();

// 鼠标中间 滚轮的方向向量
mouse.scroll.ReadValue();
三、触屏输入
using UnityEngine.InputSystem;

Touchscreen ts = Touchscreen.current;

// 由于触屏相关都是在移动平台或提供触屏的设备上使用
// 所以在使用时最好做一次判空
if (ts == null) return;

(一)触屏手指信息

// 得到触屏手指数量
print(ts.touches.Count);

// 得到单个触屏手指
ts.touches[1]
    
// 得到所有触屏手指
foreach (var item in ts.touches) { }

(二)手指操作信息

// 获取指定索引手指
TouchControl tc = ts.touches[0];

// 按下 抬起
if (tc.press.wasPressedThisFrame) { }
if (tc.press.wasReleasedThisFrame) { }

// 长按
if (tc.press.isPressed) { }

// 点击手势
if (tc.tap.isPressed) { }

// 连续点击次数
print(tc.tapCount);

(三)手指位置等信息

// 位置
print(tc.position.ReadValue());

// 第一次接触时位置
print(tc.startPosition.ReadValue());

// 接触区域大小
tc.radius.ReadValue();

// 偏移位置
tc.delta.ReadValue();

// 得到当前手指的状态(阶段)
UnityEngine.InputSystem.TouchPhase tp = tc.phase.ReadValue();
switch (tp) {        
    case UnityEngine.InputSystem.TouchPhase.None: break;       // 无        
    case UnityEngine.InputSystem.TouchPhase.Began: break;      // 开始接触        
    case UnityEngine.InputSystem.TouchPhase.Moved: break;      // 移动        
    case UnityEngine.InputSystem.TouchPhase.Ended: break;      // 结束       
    case UnityEngine.InputSystem.TouchPhase.Canceled: break;   // 取消        
    case UnityEngine.InputSystem.TouchPhase.Stationary: break; // 静止
    default: break;
}
四、手柄输入
using UnityEngine.InputSystem;
Gamepad gamePad = Gamepad.current;

if (gamePad == null) return;

(一)手柄摇杆

// 摇杆方向
// 左摇杆方向向量
print(gamePad.leftStick.ReadValue());

// 右摇杆
print(gamePad.rightStick.ReadValue());

// 摇杆按下
// 右摇杆 按下抬起长按相关
// gamePad.rightStickButton
// 左摇杆
if (gamePad.leftStickButton.wasPressedThisFrame) { }

if (gamePad.leftStickButton.wasReleasedThisFrame) { }

if (gamePad.leftStickButton.isPressed) { }

(二)手柄方向键

// 对应手柄上4个方向键 上下左右
// gamePad.dpad.left
// gamePad.dpad.right
// gamePad.dpad.up
// gamePad.dpad.down
if (gamePad.dpad.left.wasPressedThisFrame) { }

if (gamePad.dpad.left.wasReleasedThisFrame) { }

if (gamePad.dpad.left.isPressed) { }

(三)手柄按钮

通用:

  • Y、△:gamePad.buttonNorth
  • A、X:gamePad.buttonSouth
  • X、□:gamePad.buttonWest
  • B、○:gamePad.buttonEast

右侧按钮:

  • ○:gamePad.circleButton
  • △:gamePad.triangleButton
  • □:gamePad.squareButton
  • X:gamePad.crossButton
  • x:gamePad.xButton
  • a:gamePad.aButton
  • b:gamePad.bButton
  • Y:gamePad.yButton

中央按钮:

  • 中央键:gamePad.startButton / gamePad.selectButton

手柄肩部按键:

  • 左上右上肩部键位 / 左右前方肩部键:gamePad.leftShoulder / gamePad.rightShoulder
  • 左右后方触发键:gamePad.leftTrigger / gamePad.rightTrigger
五、其他输入

新输入系统中的输入设备类:

  • 常用的
  1. Keyboard—键盘
  2. Mouse—鼠标
  3. Touchscreen—触屏
  4. Gamepad—手柄
  • 其它
  1. Joystick—摇杆
  2. Pen—电子笔
  3. Sensor(传感器)https://docs.unity3d.com/Packages/com.unity.inputsystem@1.2/manual/Sensors.html#accelerometer
  4. Gyroscope—陀螺仪
  5. GravitySensor—重力传感器
  6. 加速传感器
  7. 光照传感器
  8. 等等

对于没有细讲的设备,平时在开发中不是特别常用
如果想要学习他们的使用,最直接的方式就是看官方的文档

或者直接进到类的内部查看具体成员,通过查看变量名和方法名即可了解使用方式

六、说明

新输入系统的设计初衷就是想提升开发者的开发效率,我们不提倡写代码来处理输入逻辑

之后学了配置文件相关知识后,都是通过配置文件来设置监听(监视窃听)的输入事件类型
我们只需要把工作重心放在输入触发后的逻辑处理

vitySensor—重力传感器
6. 加速传感器
7. 光照传感器
8. 等等

对于没有细讲的设备,平时在开发中不是特别常用
如果想要学习他们的使用,最直接的方式就是看官方的文档

或者直接进到类的内部查看具体成员,通过查看变量名和方法名即可了解使用方式