爱收集资源网

Motion物理引擎操控角色行动

网络整理 2023-09-30 03:03

简介

操作人物联通,我们通常有以下几种办法:

直接操作座标使用化学引擎操控使用动作RootMotion使用角色控制器关于座标操作

座标操作,就是通过设置transoform.position座标或是Vector.transform等方式使物体联通到指定座标。

该方法的优点,其实是简单暴力。益处么,各类无互动无反馈,疗效太楞。只适宜简单的变化操作或是2d游戏。假如须要复杂点的疗效,例如曲线过度,重力下滑都要自己去实现。须要自己实现呀,兄弟们我们使用引擎的目的是哪些,其实是使用提供的工具提高工作效率。不能哪些都自己搞呀。所以这个方法只推荐应用在npc或是机关变化。

关于数学引擎操作

化学引擎操作的用处是可以使用众多数学特点。当游戏有大量碰撞或联通特点时,使用这个比较好。例如赛车游戏。你可能须要设置赛车的重量来决定过弯的表现和翻车时力反馈的估算,又或是爆燃时被殃及的力度。

使用化学引擎操作的主要方法就是添加力。由此可知,往前联通就是添加往前的斥力,跳跃就是添加向下的斥力,化学疗效会让人物跳跃后手动增长。

关于RootMotion

这个方法是我觉得最合理,过度最平滑,疗效最好的方法。只可惜成本太高实现太难。

他所须要的技术包括:角色骨骼绑定+Animation动作库+Animator动漫控制器+RootMotion根座标联通

这就须要我们除了拥有质量高且数目庞大的动作库,以及各类对动漫的精确控制能够实现。我们使用市面上已有的动作库可以实现基本的联通等操作。但总的来说,性能还是不如下边那种,并且开发成本还是比较高的,调试周期非常长,在遇见一些自适应需求的时侯开发难度也会降低。

我相信,不久的将来它会成为游戏引擎中的操控最中级形态,但是在技术的促进下显得愈发易用。

使用角色控制器(CharacterController)操作

这是个unity的组件。通常情况下控制人物的不二选择。这么为何首选角色控制器呢,有以下几个理由:

首先他简化了质心组件,除去了好多何必要的估算。在人物比较多的场景中,这节约了大量的数学估算。诸如化学引擎中的翻转、重力等效果,你肯定不希望你在联通过程中,会由于碰撞到物体而手动变换方向吧,通常做法就是用freezon来限制,虽然这种都是没有必要的性能浪费。假如场景中人物较多时,这些优化就等于性能的巨幅提高。其次,他外置了爬坡、登阶阀值设置。可以比较简单的处理多路况的联通问题。第三,这个控制器,特别适宜与nevmeshagent连用。即unity自带的巡路系统。当我们使用寻路系统时,假若人物脸上有化学质心,这么除了会被沿途障碍物所影响,就会出现各类意想不到的情况例如惯性等性质。假如使用角色控制器。则毋须害怕出现此类情况。一切都这么顺滑,防侧漏,夜夜安心。何必害怕被座标被动作库写死。更毋须害怕因为动作库的座标联通而出现意外的座标干扰。这可能是最重要的理由了:假如是网路游戏类型,最好使用座标或CharacterController的控制实现。这是由于当网路数据传输-帧同步时,我们必需要保证多个顾客端的场景数据的一致性。所以不应当使用其他的比较容易出现意外的实现方法。关于网路游戏数据传输和帧同步,这儿有清晰的介绍角色控制器(CharacterController)组件参数介绍

在目标物体的inspector窗口中点击addcomponents,添加charactercontroller即可完成组件添加。

#3:5:7:f:8:d:0:d:2:4:e:6:0:0:7:d:9:b:a:a:3:3:2:6:9:7:2:c:9:6:0:f#

【SlopeLimit:】:斜坡角度。容许角色在指定的斜度上行动。

例如在手游和平精英中,你可能会发觉个别屋顶的斜坡能够走起来,个别屋顶斜坡就走不起来。这都是这个参数所致。即使和平精英用的是ue4引擎,但使用了和unity原理相像的控制组件。她们都有这个斜坡设置。

【StepOffset】:台阶高度。容许角色手动跨过多高的障碍物。这个设置就是例如走道,台阶,马路牙子之类的障碍,你总不能碰到个小东西就卡住吧,有了这个就可以跨过去。有人说,我没有用charactercontroller,用质心也能跨过比较狭小的障碍物啊,如何回事呢?那是由于你的碰撞盒下方并不平整,例如乳膏或方形碰撞盒,因为下方是曲线过度的,所以会在接触物体时通过化学估算的推进下磨擦过去。这些方法不容易控制而且会可能发生意外情况。

【SkinWidth】:皮肤厚度。这个就相当于第二层碰撞盒。这个值不能小于下方的碰撞盒的Radius值。否则会卡在某个地方。通常情况这个值应当在Radius的5%左右会比较好

【MinMoveDistance】:最小联通范围。当你在代码中使用Move方式联通时,大于这个值的联通将被忽视。这个值可以帮你降低角色因操作形成的晃动。

【Center】:角色碰撞盒偏斜。设置数学空间的位置,你须要通过调整这个来使碰撞盒与角色模型重合。

【Radius】:碰撞盒直径。角色控制器的自带碰撞盒是软膏,这个值拿来设置软膏直径。这个设置还有另一个影响,这个直径值将影响脚本中的isGrounded属性的作用范围。这对我们实现控制角色y座标位置,例如跳跃等功能十分重要。

【Height】:碰撞盒高度。同上,软膏高度。

角色控制器(CharacterController)使用

在添加了CharacterController的物体上新建一个脚本。

#e:3:f:6:4:8:c:9:1:9:a:8:d:2:f:1:0:0:e:8:a:5:4:8:4:6:d:5:0:a:2:7#

联通的实现

以下是两种联通形式。分别是世界座标和本地座标

#f:a:6:8:0:7:5:c:2:a:b:0:d:6:8:7:7:6:1:4:e:0:0:7:f:e:6:3:0:7:4:0#

跳跃的实现

#c:9:d:6:3:0:f:7:2:f:5:0:e:7:9:e:c:7:d:4:5:9:0:2:c:7:6:6:6:6:f:c#

这儿只是简单的实现,在实际的需求中,你可能要捕捉人物的跳跃状态,为人物跳跃指定起跳、浮空、落地等动作,还要设置原地起跳高度,联通跳跃距离等设定等。

注意事项假如主人公头上有animator须要看情况除去rootmotion选项。该选项有可能造成座标冲突CharacterController.isGrounded这个会闪动。所以会造成好多意外情况。可选的解决方案是:

一、碰撞盒取代。是比较理想的方案。

二、CharacterController.isGrounded+射线辅助的形式。性能会好一些。不可以单独只使用射线。这样会存在盲区。完成的疗效

#e:e:9:0:7:9:7:6:4:f:6:3:7:4:5:a:c:8:d:3:7:e:b:c:8:c:4:a:e:6:a:9#

unity中角色控制器碰