在Unity 2D中翻转2D Sprite动画

Jes*_*tus 12 c# animation 2d sprite unity-game-engine

我有一个关于2D Sprite动画的快速问题,我无法在任何地方找到具体答案:

我有一个带有步行动画的精灵到右边.但是,当他向左走(2D侧卷轴)时,我显然想将动画向左翻转.

我可以轻松地翻转精灵本身transform.localscale.x,然而,使用只翻转精灵.不是动画片段.(这不再发生在Unity中)

因此,当精灵翻转时,动画片段开始播放的那一刻,它会向右翻转(因为我唯一的动画片段是面向右侧的精灵).

这是在Photoshop中翻转精灵的唯一方法,还是有办法在Unity中执行此操作?

谢谢!

更新:如果通过乘以它来缩放变换,则使用单位的实际版本-1,动画帧也会缩放.

Jes*_*tus 13

我终于通过这样做弄明白了:

void Flip()
{
    // Switch the way the player is labelled as facing
    facingRight = !facingRight;

    // Multiply the player's x local scale by -1
    Vector3 theScale = transform.localScale;
    theScale.x *= -1;
    transform.localScale = theScale;
}
Run Code Online (Sandbox Code Playgroud)

这是来自Unity的2D平台示例.

要实现某种使用该Flip方法的检查,您可以执行类似于以下示例的操作,这是基本的移动代码.facingRight被设置为类的值,以便其他方法可以使用它,并且默认为false.

void Update() 
{

    //On X axis: -1f is left, 1f is right

    //Player Movement. Check for horizontal movement
    if (Input.GetAxisRaw ("Horizontal") > 0.5f || Input.GetAxisRaw("Horizontal") < -0.5f) 
    {
        transform.Translate (new Vector3 (Input.GetAxisRaw ("Horizontal") * moveSpeed * Time.deltaTime, 0f, 0f));
        if (Input.GetAxisRaw ("Horizontal") > 0.5f && !facingRight) 
        {
            //If we're moving right but not facing right, flip the sprite and set     facingRight to true.
            Flip ();
            facingRight = true;
        } else if (Input.GetAxisRaw("Horizontal") < 0.5f && facingRight) 
        {
            //If we're moving left but not facing left, flip the sprite and set facingRight to false.
            Flip ();
            facingRight = false;
        }

    //If we're not moving horizontally, check for vertical movement. The "else if" stops diagonal movement. Change to "if" to allow diagonal movement.
    } else if (Input.GetAxisRaw ("Vertical") > 0.5f || Input.GetAxisRaw("Vertical") < -0.5f) 
    {
        transform.Translate (new Vector3 (0f, Input.GetAxisRaw ("Vertical") * moveSpeed * Time.deltaTime, 0f));
    }

    //Variables for the animator to use as params
    anim.SetFloat ("MoveX", Input.GetAxisRaw ("Horizontal"));
    anim.SetFloat ("MoveY", Input.GetAxisRaw ("Vertical"));

}
Run Code Online (Sandbox Code Playgroud)