我的启动项目中使用了一个海洋模型,在跑步时会无法控制地抬起地面。我导入fbx
资源,将动画类型设置为humanoid
并通过自动映射配置头像,设置一个仅包含正在运行的动画的动画控制器。这是玩完后几秒钟:
但是当使用通用动画类型时,一切正常。有什么建议可以在使用头像系统时解决这个问题吗?
更新
配置我的3D模型:
答案 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变量。