不久前,Unity推出了一个新的输入系统,这意味着现在应该仔细研究一下。
Unity不仅是一个积极开发的产品,而且还是一个变化很大的产品。新的渲染管道,UIElement和新的输入系统-这些都是最近的更改,必须使引擎更快,更灵活和更友好。历史上有很多例子,当公司在其产品中进行大型系统的重构时,这种变化的结果既是开发方面的新成功,也是崩溃的结果。抛开对此主题的悲伤想法,我们将看到新系统与旧系统有何不同。
在Unity世界中,新的控制系统是一个非常引人注目的事件,社区对此表示了极大的热情,通常说当前版本不方便。制造商公司对此表示赞同,并指出旧系统是在添加大量受支持设备之前开发的,而不是最初为之设计的。因此,Internet包含大量的评论,这些评论通常显示新的动作资产的基本窗口的配置,您可以通过三个水平放置的大型设置块立即识别出它。我们将尝试朝相反的方向发展,首先,我们将研究新系统的基本要素,然后再转向更高的要素。
对于这样的新程序包,New Input System提供了很好的文档,其中始终包含问题的答案,因此,我将立即为其提供链接,包括由于存在迁移之前必须考虑的限制。另外,请查看答案部分。这将为您的第一步做好充分的准备。
由于带有新控制系统的软件包已发布,因此可以通过在软件包管理器中搜索名称Input System
轻松找到它
在安装过程中,系统会通知您您的本机平台后端已关闭,并且在您失去对当前API的访问权限而切换到该平台之前,它将无法工作
尚不清楚他们为什么要吓f脆弱的头脑,因为可以在设置中一次打开两个系统Edit > Project settings… > Player > Other Settings > Active Input Handling*
。因此,您如何回答有关系统切换的问题并不是很重要,您可以立即将后端更改为适合您的任何值。^_^
安装该软件包后,您将可以使用新系统的大量示例集,其中包含您需要的所有内容,从简单的案例到更高级的主题,例如将控件添加到智能手机屏幕或在运行时重新配置控件。
该系统是如此广泛,以至于考虑其所有设置都是很成问题的,并且没有必要。该文档涵盖了开始所需的所有要点。
如果我们简要地描述该体系结构,那么它包含三个层次:
另外,值得注意的是,新系统完全基于事件,并积极鼓励我们使用事件。
我认为在开发初期或测试新机制时没有多少人设置控件,所以我想知道的第一件事是如何从代码中捕获常规的鼠标单击。在新系统中,对Input.GetMouseButtonDown(0)
的调用变成了Mouse.current.leftButton.wasPressedThisFrame
。
如您所见,字符数略有增加。另一方面,现在您可以忘记左键的索引,并且如果IDE中的自动完成功能可以理解您想要的内容,则差异将很小。使用相同的方法来访问键盘,例如,释放键盘Keyboard.current.spaceKey.wasReleasedThisFrame
上的空格键。
使用直接访问按钮不是使用新系统的主要方法。其中的基本概念是InputAction类型的对象。它是对事件源(按钮,操纵杆等)的抽象,它提供有关事件状态(无论是按下按钮还是操纵杆的方向)的数据,并借助事件通知它们的更改。最好将它们视为逻辑元素(跳跃或射击),而不要附加到诸如按键压力之类的物理属性上。
添加到组件的InputAction的示例视图:
InputAction设置提供以下参数的选择:
动作类型可以是三种类型:
Control Type-描述设备提供的数据类型,例如,在使用摇杆的情况下,您可以获得Vector2结构形式的数据。
Interactions-提供自定义特定动作的功能,例如长按或多次单击。
Processors-在将数据分发给逻辑之前添加对来自控制器的数据的后处理,例如,标准化控制器上的操纵杆方向矢量。
对物理设备的访问取决于所选设置,因此它们可以提供所需的数据。例如,鼠标按钮只能处理单击,并且在选择以矢量的形式提供数据的情况下,不能用作监视的输入设备。
另外,还有几种复合设备。例如,移动方向可以以通过四个按钮(WSAD或其他组合)获得的矢量的形式呈现。如有必要,可以在您自己的设备上补充一组复合设备,有关更多信息,请参见文档。
使用InputAction不需要任何其他实体,并且非常适合在组件中使用。不要忘记在创建时将其关闭,并且需要通过调用Enable()
方法来单独启用它们。
Action Maps是多个InputAction的并集,后者负责游戏中的不同动作集。 假设在菜单中,您使用控制器上的操纵杆在不同的界面按钮之间移动,并且在游戏中,操纵杆负责角色的移动。
Control Schema是InputAction的抽象,它允许您根据所使用的物理设备为这些操作设置不同的触发器。假设通过WSAD按钮从键盘控制运动,而通过左操纵杆从控制器控制运动。
Action Asset是一种新型资产,负责InputAction,ActionMap和Control Schemes的全面配置。 在大多数其他评论中,它可以看作是由三个区块组成的大型面板。
整个新系统围绕着InputAction集,以及旨在与它们进行结构化工作的所有其他事物。结果,使用新系统有四种主要方法:
Mouse.current.leftButton.wasPressedThisFrame
如您所见,Action Asset绝不是自定义控件的先决条件,而只是简化了使用广泛而复杂的解决方案的工作。
在上一篇文章中,我们介绍了命令模式,该命令模式通常用于添加重新配置游戏中控件的功能。在新系统中使用这种方法将在InputAction上增加一层抽象,因为它们已经是逻辑元素。反过来,控件的更改不是很明显,而是通过具有可疑名称InputActionRebindingExtensions的类实现的。该主题的文档中有一个单独的项目,并且该软件包随附了一个相当复杂的示例,名为Rebinding UI。由于这是控制系统的基本要素,因此我们将在下面考虑其最小化实现。
完全创建Action Asset的示例在Internet上非常普遍,因此没有必要再重复一次。因此,作为一个简单的示例,我们将魔术师的控件从以前的文章中更改为使用具有基本InputAction的新系统,并且还添加了重新配置控件的功能。
|
|
除了添加按钮外,对于InputAction的基本用法不需要任何其他配置。
鼠标左键用于首次启动该咒语,第二次射击发生在将操作重新配置为使用f
键盘按钮之后
最初,使用新系统会导致在某些组件上添加自定义编辑器,例如在我们有关Perlin Noise生成器的颜色编辑器的文章中。但是了解到这是当前方法的巨大变化,并且很快就会过渡到全新的API。可能会吓走大量功能和新组件,但是文档和示例对于第一个版本来说相当不错。除非当前的限制对您的项目来说不是什么大问题,否则所有这些都为快速潜水带来了希望。我希望本文为您阐明了使用新输入系统的基础知识。下次见!^_^