我们在人形组件化方面的第一步(更多信息即将发布)从一个新的物理控制器开始。我们利用构成我们物理引擎其余部分的相同内部对象和约束,从头开始重建该控制器,使之更耐用、物理上更精确,进而提供更多定制选项,简化后续优化。
此外,我们的目标是修复明显的漏洞,消除神秘的极端力量,并保持与传统控制器相同的使用感受。通过使用此测试版您便有机会与我们合作参与新控制器试验。
关键行为变化:
- 站立和地面运动更像碰撞。地面上的力等于角色静止时身体的重量,运动受摩擦力限制。
- 跳跃时的空气控制默认保存动量,以便在移动部件之间跳跃时获得更好的体验。
- 攀爬会将您限制在您攀爬的部位,意味着您将可以继续在移动的梯子上攀爬。
如何开始:
启用 Beta 功能:
新的控制器系统通过几个新实例来操纵。最重要的是ControllerManager。此实例指定要激活的运动控制器以及角色所需的速度。
将 Humanoid设置为ControllerManager 的父代,覆盖旧控制器并使用我们的新移动控制器。目前,只有一种方法可以做到这一点:
将 StarterPlayer设置为StarterHumanoid 的父代 ,然后将 Humanoid作为ControllerManager 的父代。尝试在运行时将 ControllerManager 插入到 Humanoid 中将无法正常工作。
除了ControllerManager之外,我们还有四种类型的ControllerBase 实例,都是ControllerManager的子代,都有各自的作用。这些实例是角色可以执行的不同运动模式:
处理沿基础部件底部的地面运动。
处理跳跃和横向运动/空中自由落体。
沿基础部件(梯子)上下运动。
处理各个方向的游泳运动。
目前,ControllerManager将自动创建这些ControllerBase实例,并在内部将它们映射到Humanoid状态。相同类型的控制器有不同的名称。
- 自由落体→AirController “AirController”
- 攀爬→ClimbController “ClimbController”
- 起立 → GroundController “GettingUpController”
- 跳跃→AirController “JumpController”
- 运行和着陆→GroundController “RunningController”
- 游泳→SwimController “SwimController”
执行上述步骤时,角色的Humanoid在加载到世界后将如下所示:
从这里,您可以选择不同的控制器并在运行时编辑其属性。
如要设置角色加载的默认属性,您可以插入恰当类型和匹配名称的控制器(如上所示),然后再使用。这与定义StarterHumanoid 的典型工作流一样。
现在的情况:
在这个早期的测试版本中,除了默认状态映射控制器之外的自定义都是有限的。现在,我们只想让您参与试验,并且思考的一些问题:
- 与旧控制器相比,您发现哪些显著差异?
- ControllerBase 实例上的默认属性值是否合理?
- 是否有足够的属性来调整角色运动以符合您的喜好?
- 您是否希望通过某种特定的方式让角色运动,而您无法做到?
在这个早期阶段,API仍然可以变动。我们可以根据您的反馈对名称进行更改,这也是我们目前在测试阶段关注的重点。
一旦我们认为事情已经解决,我们将退出测试版,并让您在实时体验中使用新的控制器。我们会继续将之作为一种可选选项,同时我们会继续与开发人员合作,使其达到普适标准。
已知问题:
- 碰撞和一般不稳定仍然存在。使用时自行承担风险。
- 控制器上的一些属性尚未发挥作用。虽然API中有这些属性,“属性”窗口会将其隐藏,当他们能够正常工作时我们会进行宣布。
- 减速动画不正确,因为它们显示您在滑动(就好像您的摩擦力很小)。未来将显示您正在减慢运行动画的速度。
- 默认跳跃高度比旧控制器略高。我们会修复这一问题,使之相匹配。现在,您可以降低 JumpController.VectorForce 来降低跳跃高度。
- 我们还知道新旧控制器之间其他一些已知微小差异。对此,我们将根据您的反馈来判断其严重性,并且会着重实现新旧匹配。
展望未来:
我们有多个旨在提高新API的灵活性的更新计划。首先,我们将使ActiveController属性可写。这样,无论出于何种原因,您都可以随时选择要激活的控制器。然后,除了Humanoid,我们将开放在任何部件/模型上使用ControllerManager的功能。