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

C# 设置2d对象动画时,`Transform.Translate()`停止工作,c#,unity3d,animation,game-development,C#,Unity3d,Animation,Game Development,我正在开发一个2D游戏中的敌人AI,我正在开发。这个敌人游泳,我想为敌人制作一个“浮动效果”动画,所以我制作了一个游戏对象Y轴上下弹跳的动画 我使用transform.Translate()来移动游戏中的敌人,在我制作这个动画之前,它工作得很好。但是,在播放动画时,敌人无法向任何方向移动 public virtual void Move(float speed) { if (canMove) { transform.Translate(new Vector2(s

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

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

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

一旦某个属性的关键帧处于动画师的任何状态,动画师将始终否决脚本中所做的任何更改,因为动画更新都已完成。您可以尝试将代码移动到
LateUpdate

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



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

你可以控制角色在脚本中的y位置,所以你的脚本和unity的动画系统之间没有冲突。从概念上讲,我认为最好将运动限制在一个系统内。