[Unity] 유니티 게임개발

[Unity: 유니티 게임 개발] Player - 플레이어에 애니메이션 Flip하기

ddgoori 2022. 12. 14. 21:59

Player - 플레이어에 애니메이션 Flip하기

지난 시간에 플레이어에 애니메이션을 적용하여 움직일 때마다 반응하도록 했는데, 애니메이션이 뒤로(좌측 방향키)로 움직일 때 마치 문워크하는 것 처럼 움직이는 현상이 있었다. 이때 해야할 작업을 설명한다.

 

나중에 캐릭터가 총을 쏘고 하려면 캐릭터가 어디 다이렉션을 보는지 저장해야하는 이슈가 있다. 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public Rigidbody2D theRB;

    public float moveSpeed;
    public float jumpForce;

    public Transform groundPoint;
    private bool isOnGround;
    public LayerMask whatIsGround;

    public Animator anim;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        // move sideways
        theRB.velocity = new Vector2(Input.GetAxisRaw("Horizontal") * moveSpeed, theRB.velocity.y);

        // handle direction change
        if(theRB.velocity.x < 0) {
            transform.localScale = new Vector3(-1f, 1f, 1f); //x, y, z
        } else if(theRB.velocity.x > 0) {
            transform.localScale = Vector3.one;
        } 

        // checking if on the ground
        isOnGround = Physics2D.OverlapCircle(groundPoint.position, .2f, whatIsGround);

        // jumping
        if(Input.GetButtonDown("Jump") && isOnGround) {
            theRB.velocity = new Vector2(theRB.velocity.x, jumpForce);
        }

        anim.SetBool("isOnGround", isOnGround);
        anim.SetFloat("speed", Mathf.Abs(theRB.velocity.x));
    }
}

 

 

아래 인스펙터를 조절한다. x만 -1수치로 가면 뒤집어지니깐 아래처럼 코드를 입력해준다. else if 수치에서 x = 0이 없는 이유는 단지 속력이 0, 즉 멈췄을때는 갑자기 flip 될 필요가 없어서이다. 이 조건을 입력해주지 않으면 캐릭터가 단순히 움직이지 않을때도 flip된다.  Vector3.one은 x, y, z가 각각 1 1 1 이라는 뜻이다.

 

*그런데 여기서 버그가 생겼다. 제자리에서 좌우가 바뀌는게 아니라 캐릭터가 아예 배경 중간을 기점으로 캐릭터의 위치까지 변경되었다.
-> 해결 방법은 Standing Sprite의 Position X, Y, Z가 0, 0, 0에 위치하면 된다.