Переключение анимации 2D Спрайта в Unity 2D

у меня есть быстрый вопрос относительно 2D-анимации спрайтов, на который я не смог найти конкретного ответа:

у меня есть спрайт с анимацией справа. Тем не менее, я, очевидно, хочу перевернуть анимацию влево, когда он идет влево (2D-скроллер).

Я могу легко перевернуть сам спрайт, используя transform.localscale.x, однако, это только меняет спрайт. Не анимационный клип. (Этого больше не происходит в Unity)

Так, а спрайт переворачивается, как только анимационный клип начинает играть, он переворачивается вправо (так как единственный анимационный клип у меня есть для правого спрайта).

это единственный способ сделать это, чтобы перевернуть спрайты в Photoshop, или есть способ сделать это в Unity?

спасибо!

обновление: с фактическими версиями unity, если вы масштабируете преобразование, умножая его на -1, анимационные кадры также масштабируются.

4 ответов


я, наконец, понял это, сделав это:

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;
}

Это из примера 2D-платформера Unity.

для реализации какой-то проверки, который использует 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"));

}

void FlipHorizontal()
{
    animator.transform.Rotate(0, 180, 0);
}

вы также можете сделать это при преобразовании себя (без аниматора). Но в этом случае значение вращения может быть переопределено animator


вот как я это сделал-почти так же, как и другая техника Jestus с Unity script.

var facing : String = "right";

function updateFacing(curr : String){
    if(curr != facing){
        facing = curr;
        var theScale : Vector3 = gameObject.transform.localScale;
        theScale.x *= -1;
        gameObject.transform.localScale = theScale;
    }
}

//put to use
function controls(){
    if(Input.GetKey (KeyCode.LeftArrow)){
        updateFacing("left");
    } else if(Input.GetKey (KeyCode.RightArrow)){
        updateFacing("right");
    }      
}

Если вы анимируете в Unity:

  1. скопируйте все кадры (спрайты) анимации, которые вы хотите перевернуть.
  2. вставьте эти кадры в новую анимацию и выберите все на первом кадре.
  3. измените масштаб x первого кадра с 1 на -1.
  4. сделайте то же самое с самым последним кадром вашей анимации.

теперь он должен играть в другую сторону!