角色在Unity中使用类人动画类型慢慢向上移动

时间:2014-03-07 04:28:54

标签: c# animation unity3d avatar avatars

我的启动项目中使用了一个海洋模型,在跑步时会无法控制地抬起地面。我导入fbx资源,将动画类型设置为humanoid并通过自动映射配置头像,设置一个仅包含正在运行的动画的动画控制器。这是玩完后几秒钟:

enter image description here

但是当使用通用动画类型时,一切正常。有什么建议可以在使用头像系统时解决这个问题吗?

更新

配置我的3D模型: enter image description here

4 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:1)

几天前我遇到了同样的问题。我发现问题是Animator脚本中的 Apply Root Motion 。确保它未经检查。

答案 2 :(得分:1)

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

答案 3 :(得分: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变量。