【问题标题】:When animating a 2d object `Transform.Translate()` stops working为 2d 对象设置动画时,“Transform.Translate()”停止工作
【发布时间】:2019-06-18 16:09:00
【问题描述】:

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

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

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

【问题讨论】:

  • 你可以控制脚本中的角色y.position,这样你的脚本就不会和unity的动画系统发生冲突。从概念上讲,我认为将运动限制在一个系统中是一个更好的主意。

标签: c# unity3d animation game-development


【解决方案1】:

一旦您的动画师在 any 状态下为某个属性设置了关键帧,动画师将始终否决脚本中所做的任何更改,因为动画更新都已完成after Update。您可以尝试将您的代码移至LateUpdate

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


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

【讨论】:

    猜你喜欢
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多