3
4

4 回答 4

7

这显然是由根运动引起的。发生的情况是,动画的一个循环使角色稍微高一点。把这些细微的变化加起来,你就会得到你所得到的。如果您不需要根运动(看起来不像您),请禁用它(从动画组件的设置中)。如果这样做,请编辑动画以确保它适合,或禁用沿 Y 轴的根运动(您可以从动画的导入设置中执行此操作)。

如果您不知道什么是根运动,那就是模型的根骨骼应用了动画。您显然无法创建角色在关卡上下运行的整个动画,直到最近(尽管最近不是很多)角色在原地动画,并通过代码程序移动(我知道虚幻锦标赛 3 使用这种方法,任何 UDK 用户也一样)。然后,人们开始想知道他们如何才能让他们的角色移动得更逼真?我的意思是,这不像你以 4 公里/小时的恒定速度向前走,你倾向于在步行周期的不同部分减速和加速。使用称为根运动的技术,同样可以应用于视频游戏角色。

使用根动作,您实际上是在角色动画期间向前移动角色。这将导致动画在 max 或 maya 中看起来非常糟糕,因为角色会在循环后迅速回到原来的位置。但是,这些数据在游戏引擎中被智能使用:不是使用动画产生的绝对位置,而是在每两帧之间取出速度,并根据该速度移动角色(虚幻引擎实际上有一个非常巧妙的加速应用根运动的模式,尽管我不确定这与速度模式有何不同)。这将使您的角色以与动画相同的速度向前移动,因此您实际上可以为角色的运动及其四肢和关节设置动画。而且,既然你' 重新使用动画中的速度而不是位置数据,它看起来与您期望的完全一样。如果您对这项技术感兴趣,请查看他们在资产商店中提供的 Mechanim 演示包。它广泛使用根运动来移动角色。

于 2014-03-09T12:49:57.243 回答
2

我的公司遇到了类似的问题,但我们仍然希望保持选中“应用根运动”切换。当循环播放相同的动画时,模型会保持原位,但如果一个接一个地播放多个不同的动画,这会导致模型旋转/移动位置。我们的解决方案是在每个动画的动画设置中勾选这些复选框。根变换旋转,根变换位置 (Y),根变换位置 (XZ)。

于 2016-12-19T06:52:53.533 回答
1

几天前我遇到了同样的问题。我发现问题出在 Animator 脚本中的Apply Root Motion 。确保它未选中。

于 2014-03-09T01:09:43.647 回答
0

在场景中用“播放器”标记您的播放器并使用此脚本

float y;
GameObject player;

void Start ()
{       
 player =  GameObject.FindGameObjectWithTag("Player");
 y = player.transform.position.y;
}

// Update is called once per frame
void Update ()
{
 float diff = player.transform.position.y;
 player.transform.Translate ( 0, 0,z - diff);
 y = player.transform.position.y;
}

这是一个小小的hacky soultion,但有效!注意:如果您想在某个时候使用 y 移动,只需计算并将其添加到 diff 变量中。

于 2014-03-12T10:50:42.173 回答