已经使用动画旋转时旋转?

Rotate when already using an animation to rotate?

问题

我正在制造一把 'swings' 90 度的剑。 这是使用 Unity 动画完成的:

当玩家攻击时,会生成这样的剑。根据玩家的方向,剑将在 X 或 Y 轴上镜像。 但是当玩家向左攻击时,他从下向上攻击,而不是相反。

代码

这是我用来确定我们应该以哪种方式镜像剑的代码:

void changeDirection()
{
    print(Direction);
    if(Direction == Entity.direction.RIGHT)
        gameObject.transform.localScale = new Vector3(-1, 1, 1);
    if (Direction == Entity.direction.LEFT)
    {
        gameObject.transform.localScale = new Vector3(1, -1, 1);
    }
    if (Direction == Entity.direction.DOWN)
        gameObject.transform.localScale = new Vector3(-1, -1, 1);
}

Up 不在此处,因为这是默认设置。

为什么不能只旋转它?

因为动画已经旋转了剑,所以 'overwrites' 无论我做什么。至少这是我的理论。

问题的视频示例

http://a.pomf.se/vgxumj.webm

我会创建一个动画文件,很确定这就是您已有的。然后将它作为其他 GameObject 的父级。在代码中更改父游戏对象的方向。

if(方向 == Entity.direction.RIGHT)

gameObject.transform.localRotation = Quaternion.Euler(new Vector3(90, 0, 1));
if (Direction == Entity.direction.LEFT)
{
     gameObject.transform.localRotation = Quaternion.Euler(new Vector3(0, 90, 1));
}
if (Direction == Entity.direction.DOWN)
     gameObject.transform.localRotation = Quaternion.Euler(new Vector3(90, 0, 1));

将子对象添加到 Weapon_Swing 变换,并在子对象中生成剑。这应该确保您可以独立于动画设置剑的 localRotation。

对于那些在未来寻找简单解决方案的人来说,LateUpdate 似乎在应用动画后被调用,因此在 LateUpdate 中完成的任何旋转都不会被覆盖。