动画 2d 对象时,`Transform.Translate()` 停止工作

When animating a 2d object `Transform.Translate()` stops working

我正在开发一款 2D 游戏中的敌人 AI。这个敌人在游泳,我想为敌人制作一个 "floating effect" 动画,所以我制作了一个游戏对象的 Y 轴上下弹跳的动画。

我使用 transform.Translate() 来移动游戏中的敌人,在我制作这个动画之前效果很好。但是,在播放动画时,敌人无法向任何方向移动。

public virtual void Move(float speed)
{
    if (canMove)
    {
        transform.Translate(new Vector2(speed, 0) * Time.deltaTime);
    }
}

一旦您的动画师在 任何 状态下拥有某个 属性 的关键帧,动画师将始终否决脚本中所做的任何更改,因为动画更新是全部完成 after Update。您可以尝试将代码移动到 LateUpdate.

或者在您的特定情况下,您根本不希望位置的 x 组件被设置关键帧。只需从动画中删除位置的 x(和 z)组件的所有关键帧,这样 只有 y 有关键帧。这应该可以解决您的问题。


或者在层次结构中更高级别的游戏对象上使用您的移动脚本作为您的 Animator - 意思是添加一个新的游戏对象,使动画对象成为它的子对象并将您的移动脚本放在上面父对象。