Unity上的动画错误计时+精灵翻转;

时间:2018-01-17 16:08:48

标签: animation unity3d unityscript

我需要设置一个在Unity上的2D游戏中翻转的动画。最好的方法是怎样做的?

我正在尝试类似这样的伪代码:

void FixedUpdate() { 
    if(lastSide!=currentSide)
        flip();
}

void flip() {
    if(lastSide == 1) // if is facing right
        animator.SetTrigger("flipToLeft");
    else if(lastSide == -1) // if is facing left
        animator.SetTrigger("flipToRight");

    this.player.transform.localScale = new Vector3(lastSide * -1, 1f, 1f);
}  

这个“有效”,但是在开始动画的动画开始之前,精灵正在翻转。

2 个答案:

答案 0 :(得分:0)

一种选择是硬编码你想要精灵翻转的点的延迟:

void FixedUpdate()
{ 
     if(lastSide != currentSide)
         StartCoroutine(Flip());
}

IEnumerator Flip()
{
    if(lastSide == 1) // if is facing right
         animator.SetTrigger("flipToLeft");

    else if(lastSide == -1) //if is facing left
         animator.SetTrigger("flipToRight");

    yield return new WaitForSeconds(.5f); // delay before flipping sprite
    transform.localScale = new Vector3(lastSide*-1,1f,1f);
}

如果您不想对时间进行硬编码,可以查看Animation Events,您可以直接从动画中调用函数。

答案 1 :(得分:-3)

您可以使用DoTween以简单的方式进行切换。