Unity:角色控制器vs刚体

使用Unity创建新项目时,要做的第一件事就是为化身的控制器编码。 这非常重要,您不能仓促行事,否则您的游戏感觉可能很糟糕。 从输入获取到运动和反馈,有很多事情要做。
我经常问自己的第一个问题是:“我应该使用角色控制器还是刚体 ”。
今天,通过简单的移动,跳跃和虚线化身的示例,我们将探索两种方法。

这是完整项目的github:
https://github.com/valgoun/CharacterController


设定

在开始之前,让我们先设置项目和基本的测试场景。 正如我们的8个Gamedev必备技巧中所写, 我们必须井井有条 。 创建以下文件夹:

然后创建一个非常简单的场景,其中包含地面,胶囊(我们的Player)和楼梯。
在楼梯上增加一些垂直度将使我们在编码角色时可以尝试许多不同且重要的事情:它与物体碰撞的方式,从远处坠落时的重力,还可以测试跳跃技巧(如果需要) 。

角色控制器

角色控制器是可以添加到播放器中的组件。 它的功能是根据环境(对撞机 )移动玩家。
它不响应也不以任何方式使用物理学。
最重要的是, 角色控制器附带了一个C apsule Collider 。 在了解其工作原理之前,我建议您先阅读一下手册和脚本API,这总是一件好事。

在此示例中,我使用了默认参数,但可以随时使用它们来了解它们的工作原理。

角色控制器背后的核心概念是,它无需任何物理条件即可提供基本的对撞机响应。 基本上,您将像使用Transform一样移动播放器,但不能通过对撞机。
使用此技术的主要优点是我们可以控制播放器的行为,但缺点是您几乎必须编写所有代码。

角色控制器包括两种用于移动角色的方法: SimpleMoveMove

SimpleMove将速度作为参数,并将相应地移动字符。 最重要的是,角色将对重力产生反应。 那是C haracter Controller唯一的物理学。 缺点是Y轴 此方法忽略了速度。

移动需要更多的工作,但限制较少。 它接受参数的绝对运动。 因此,它取决于帧速率,并且您必须自己实现重力。

即使这是更复杂的方法,也是我更喜欢的方法,因为SimpleMove很快会因为您对Y轴速度没有影响而很快受到限制。

基本动作

让我们实施一个非常基本的动作。 为此,让我们创建一个名为“角色”的新C#脚本,并将其添加到播放器/胶囊中。 然后,我们将需要一个公共变量,以便我们可以直接从编辑器调整速度,并使用一个私有变量来存储对角色控制器的引用
不要忘记在Start方法中获取Character Controller,请参见下面的代码

Update函数中,我们获得Inputs,然后将其存储到Vector3中 。 之后,我们从CharacterController调用Move方法,将输入向量乘以速度和DeltaTime来传递给它,使其独立于帧速率和“瞧”,我们有了基本的动作:

刚体控制器

这次,我不会解释该过程的每个步骤,因为它与我们在Character Controller中所做的非常相似。 我将重点介绍两者之间的差异。 这是完整的脚本,可为您提供概述:

FixedUpdate函数背后的想法是将物理代码放在这里。 但是如您所见,我仍然具有经典的Update功能。 实际上,Unity的输入系统没有与FixedUpdate同步,因此我们必须在Update中检索输入,将它们存储到变量中(在此为_inputs ),然后在FixedUpdate中使用它。 您可以直接在FixedUpdate中管理输入,但是很可能会出现不方便的行为。

跳跃与冲刺

主要区别

即使我们希望通过两种技术实现相同的目标,它们的行为也不会完全相同。

碰撞

他们都与对撞机反应,但有一些细微的差异。 尽管刚体将非常精确地做出反应,甚至使用物理材料属性来计算反应,但“ 角色控制器”将变得更加宽松:它将自动爬坡和台阶(根据其参数)。

CharacterController正确爬升
刚体无法攀登

可扩充性

在这个例子中,我们没有太多的代码要编写, 字符控制器解决方案是最简单的方法,但是如果我们要实现更多的机制,那么刚体可能是最好的选择。 它提供了更多与物理交互的功能,而Character Controller不提供,因此我们需要使用Character Controller为同一功能编写更多代码。

如您所见,我们可以使用这两种技术来实现相同的目标,但是我们的工作方式将根据我们选择的选项而改变。
这就是为什么我强烈建议您在开始编写任何播放器控制器脚本之前要花一些时间思考的原因!


我们希望本文对您有所帮助!
如果您想了解本教程的更多详细信息,或者想索取其他详细信息,请在社交媒体,评论等方面与我们联系。我们将为您提供帮助。

Twitter Facebook 上关注我们

在开始商业游戏之前,请先阅读我们的8个关键要点以进行定义

或查看我们最新的每周博客