2022-09-09 Unity InputSystem2——代码检测输入


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

一、键盘输入
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. 等等

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔗理苦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值