InputSystem 新版Unity输入系统学习(1)
这个学习可能会比较长,先把一个类的写完,然后再考虑分P1inputSystem需要unity2019.4以上版本+.net4runtime它相对于老的输入系统更具拓展性和可自定义的替代方案。
inputSystem是Unity提供的一套更加方便用于在多平台操作模式间转换的系统。
使用方式:
导入inputSystem包,导入完成后会提示重启Unity,这是正常的。
然后右键Asset空白区,便可以在右键菜单中选择inputActions来创建一个空表。
可以在Path处选择这个操作的目标按键--现在选择的是鼠标左键LeftButton
配置文件配置完成后可以创建playerinput脚本并将配置挂载在其上来使用
——————————
新老输入系统的区别
老输入系统我们需要自己去写很多的检测代码来判断设备输入,并且处理对应逻辑。
而新输入系统不仅可以像老输入系统一样使用,还可以使用配置输入的概念,让我们可以在Unity内进行输入配置文件,不需要写代码来判断,(无限的#ifelse 有救了)。只需要把工作重心放在逻辑处理上。
——————
新老输入系统切换,可以在设置中修改启动那种输入模式,可以同时启用,也可以只启用其中之一,每次启用后会重启Unity。
//设置位置 file - build setting -Player Setting -other - Active input Handli
——————————————————
使用新版本inputSystem进行简单的按键功能添加。(代码型)
//获取输入设备
Keyboard Key = Keyboard.current;
//按键按下 -- 首先获取键盘设备,然后通过键盘设备.出所需要的按键。
if (Key.aKey.wasPressedThisFrame)//判断这个按键是否按下。 wasPressedThisFrame 按下
{
print("按下");
}
//按键抬起
if (Key.aKey.wasReleasedThisFrame)//判断这个按键是否抬起 wasReleasedThisFrame 抬起
{
print("抬起");
}
//按键长按
if (Key.aKey.isPressed)//判断这个按键是否长按 isPressed 判断按下中
{
print("长按");
}
//通过事件监听 -- 这个C是调用的按键名字
Key.onTextInput += (c) => {
print("事件监听");
};
--特殊任意键被按下 anyKey = 任意按键, :注无法得到具体按下了那个键,适合用于执行按下任意键进行操作逻辑的地方。
if(Keyboard.current.anyKey.wasPressedThisFrame)
{
print("任意键被按下");
}
——————————————————————————————————
鼠标输入方法——获取鼠标控制
Mouse mouse = Mouse.current;
//鼠标左键 mouse.leftButton
//鼠标右键 mouse.rightButton
//鼠标中键 mouse.middleButton
//鼠标向前向后键 mouse.forwardButton mouse.backButton
if (mouse.leftButton.wasPressedThisFrame) //鼠标左键按下
{
}
if (mouse.leftButton.wasReleasedThisFrame) //鼠标左键抬起
{
}
if (mouse.leftButton.isPressed) //鼠标左键长按
{
}
//获取当前鼠标位置
mouse.position.ReadValue();
//获取当前鼠标移动向量
mouse.delta.ReadValue()
//获取鼠标中键滚轮方向向量
mouse.scroll.ReadValue()触屏输入方法 -- 获取手指组
命名空间引用
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Controls;
Touchscreen touch = Touchscreen.current;//获取当前运行环境的触控组件
if (touch == null)//设备可能是空 -- 例如在手机端获取pc键盘
{
return;
}
Debug.Log("当前手指数量" + touch.touches.Count);
if (touch.touches.Count <= 1) return;
Debug.Log(&#34;得到第一根手指(触碰点)&#34; + touch.touches);
foreach (var item in touch.touches)//进行遍历获取所有手指信息
{
Debug.Log(item);
}
TouchControl tc = touch.touches;//获取手指点击信息
if (tc.press.wasPressedThisFrame)//判断指定手指按下
{
Debug.Log(&#34;按下&#34;);
}
if (tc.press.wasReleasedThisFrame)//抬起
{
Debug.Log(&#34;抬起&#34;);
}
if (tc.press.isPressed) //长按
{
Debug.Log(&#34;长按&#34;);
if (tc.tap.isPressed)//点击手势
{
Debug.Log(&#34;点击手势&#34;);
}
Debug.Log(tc.tapCount);//判断点击次数
}
//手指位置信息
Debug.Log(tc.position.ReadValue());
//接触区域大小
Debug.Log(tc.radius.ReadValue());
//手指偏移量
Debug.Log(tc.delta.ReadValue());
//当前手指状态 -- 这个地方有不明确引用 ,需要明确给到命名空间
UnityEngine.InputSystem.TouchPhase localPhase = tc.phase.ReadValue();
switch (localPhase)//通过这个方法获取手指状态
{
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;
}其他输入
Unity - Manual: Input System
一些冷门的输入方式可以直接查找官网,类似触碰笔,陀螺仪,光照传感器之类的。
页:
[1]