Unity新输入系统好用么?

目标: 在 2D 游戏中,使用 Unity 中的新输入系统为我们的玩家设置水平移动。

玩家精灵

首先,让我们看一下我们为玩家动画准备的精灵表:

图片

 

图片

 

然后,为了获得玩家的初始精灵,让我们使用精灵编辑器切片 Idle 精灵表:

图片

 

图片

 

图片

 

切片后,让我们创建一个新的空游戏对象来包含初始玩家精灵,以便更容易管理其所有组件:

图片

 

图片

 

图片

 

玩家组件

接下来,让我们创建一个新的脚本并将其附加到玩家游戏对象:

图片

 

图片

 

图片

 

此外,为了处理玩家的移动以及与环境的碰撞,让我们附加一个 Rigidbody 2D 和一个 Box Collider 2D。附加后,我们可以编辑 2D 碰撞器以匹配精灵:

图片

 

图片

 

导入新的输入系统

现在,为了能够从 Unity 中使用新的输入系统,让我们:

  • 打开 包管理器,点击 Window > Package Manager

  • 在左上角 选择 Unity Registry 包。

  • 找到并 安装 Input System 包,点击底部的安装按钮。

  • 等待直到包安装完成。

图片

 

图片

 

图片

 

安装完成后,下一个窗口可能会弹出。你可以选择通过点击 Yes 来禁用旧输入并启用新的输入系统,或者通过点击 No 来保持相同的设置。

图片

 

如果你选择保留旧输入,并且想要更改输入处理,你可以:

  • 点击 Edit > Project Settings 打开项目设置

  • 转到 Player 选项卡。

  • 向下滚动到 Other Settings 部分。

  • 将 Active Input Handling 属性更改为使用新的输入系统或旧的和新的系统。

注意: Unity 编辑器将重新启动以应用此设置的更改。

图片

 

图片

 

移动输入

一旦 Unity 编辑器识别了新的输入系统,让我们开始创建一个新的 输入动作资产 来处理来自玩家的输入。你可以通过点击 Create > Input Actions 来创建一个:

图片

 

图片

 

然后,为了修改输入动作资产,让我们双击其文件或通过检查器点击 Edit asset 来打开相应的窗口:

图片

 

图片

 

图片

 

在这个窗口中,我们将能够根据我们将哪些输入绑定到它们来确定要执行的操作。

窗口弹出后,让我们通过点击下一个按钮创建一个新的动作映射来处理来自玩家的游戏玩法操作:

一个动作映射代表一组可以启用或禁用的动作,以根据游戏中的情况使用不同的输入。例如,我们可以有一个动作映射在玩家行走时启用,另一个动作映射在玩家驾驶汽车时启用。

图片

 

接下来,让我们通过以下方式修改动作映射中的新动作:

  • 指示它是用于移动的。

  • 将 Action Type 属性更改为 value 类型。

类型为 value 的操作将持续监控(以便能够在操作值发生变化时读取其值),而类型为 button 的操作将在按钮被按下时充当触发器。

  • 将 Control Type 更改为 Vector2,以便将输入限制为我们移动的 X 和 Y 轴值。

图片

 

然后,为了从将被绑定到移动操作的输入中接收 Vector2 值,让我们摆脱默认绑定槽并创建一个新的 2D Vector Composite:

图片

 

现在,为了指示输入键以接收 Vector2 值,让我们点击每个方向并选择我们想要映射的键。此外,我们可以点击 Listen 按钮,然后点击键让 Unity 检测需要选择哪个键:

图片

 

最后,不要忘记点击 Save Asset 按钮来保存我们对输入动作资产所做的更改:

图片

 

如果你想了解更多关于 Unity 新输入系统的知识,你可以访问 Unity 文档:

快速入门指南

注意: 有关如何安装新的输入系统的更多信息,请参见安装。开始使用最快的…

docs.unity3d.com

从输入动作资产接收值

现在,为了从移动操作中接收相应的值,让我们:

  • 点击输入动作资产。

  • 通过检查器 启用 Generate C# Class 属性。

  • 点击 Apply 按钮来创建 C# 类。

这将创建一个新的 C# 类,其中将包含我们修改的资产中的输入操作。使用这个类,我们将能够跟踪 MonoBehaviour 组件(如玩家脚本)中的操作。

图片

 

图片

 

图片

 

我们将使用这个类来使用输入动作资产中的操作。

有关如何使用新的输入系统创建操作的更多信息,你可以访问 Unity 文档:

操作

相关页面: 输入操作旨在将输入的逻辑含义与输入的物理方式…

docs.unity3d.com

一旦 PlayerActions 类被生成,让我们打开 Player 脚本来实现移动。我们将需要以下全局变量来做到这一点:

  • Speed

这个变量将指示玩家移动的速度。

  • Player actions

这个变量将作为对新的 PlayerActions 类的引用,我们将在其中能够从输入中接收移动值。

  • Rigidbody

这个变量将保存对玩家的 Rigidbody2D 的引用。

  • Move input

这个变量将存储来自移动的当前 Vector2 值。

图片

 

然后,在 Awake 方法中,让我们初始化对 PlayerActions 类和玩家的 Rigidbody2D 组件的相应引用:

图片

 

接下来,我们需要 手动启用动作映射(其中包含移动操作),玩家最初将使用它,方法是使用 OnEnable 方法:

图片

 

此外,让我们使用 OnDisable 方法禁用它,作为在处理操作时的一种良好做法:

图片

 

最后,让我们使用 FixedUpdate 方法来实现玩家的移动,方法是:

  • 读取并存储来自 Movement 操作 的 Vector2 值。

  • 将 Y 轴值设置为 0(直到我们在该轴上应用速度的临时修复)。

  • 将 Rigidbody2D 的 velocity 设置为输入值乘以速度。

图片

 

测试移动

在运行游戏之前,让我们:

  • 指示玩家的 speed 变量的值。

  • 冻结 RigidBody2D 组件的 Z 旋转(以避免在向侧面移动时旋转)。

图片

 

图片

 

现在,如果我们在 Unity 中运行游戏,我们将看到玩家按预期移动:

图片

 

就这样,我们使用了 Unity 的新输入系统来实现玩家的移动!

想了解更多游戏开发知识,可以扫描下方二维码,免费领取游戏开发4天训练营课程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值