Unity物体移动的实现方式

302 阅读2分钟

操作实体移动的方法:

  1. 直接操作实体的坐标
  2. 使用物理引擎 (unity入门游戏的坦克大战)
  3. 使用动作ROOT motion (unity入门的约翰鬼屋)
  4. 使用角色控制器(characterController)(3dkitgame)

一、直接操作实体坐标

坐标操作,就是通过transform.postion或者vector3.transform等方法使物体移动到指定坐标。

优点:操作简单 缺点:无交互无互动,效果生硬。只适合简单的变化操作后者2d游戏。如果需要复杂点的效果,比如曲线过度,重力下降,都要自己去实现。所以这种方法一般应用在npc或者机关的变化中。

二、关于物理引擎

物理引擎,顾名思义就是可以使用诸多的物理特性。当游戏有大量的碰撞或者移动特性时,使用这个比较好。

比如赛车游戏,可以设置赛车的重量来决定过弯的表现,撞车的反馈计算,爆炸的冲击波效果。

使用物理引擎的操作方式,主要就是添加力。由此可知向前移动就需要添加向前的作用力。

三、关于Root Motion

优点:这个方式的过度最平滑,效果也最好。

缺点:实现成本较高。因为他的移动动画和位移是做到的根路径上的。每次需要变更的时候,调试周期比较长。

需要的技术包括:角色骨骼动画绑定(一般都是美术师调整素材)

四、使用角色控制器

这个characterController是unity的组件。一般情况下控制人物的不二人员。

1、简化了刚体组件,去掉了不必要的计算。例如通过锁轴可以避免物理引擎碰撞产生的变向。

2、内置了爬坡、登阶的阈值设置。可以处理多路况的移动问题。

3、非常适合nevmesh agent 寻路系统。

4、不必担心坐标被动作库写死。也不用担心动作的移动坐标影响而产生的坐标干扰。

5、最重要的,网络传输帧同步的时候,保证每个客户端的场景数据的一致性。所以不应该使用其他比较容易出现意外的实现方式。