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에 위치하면 된다.
'[Unity] 유니티 게임개발' 카테고리의 다른 글
[Unity: 유니티 게임 개발] Camera - 플레이어를 따라가는 카메라 (0) | 2022.12.15 |
---|---|
[Unity: 유니티 게임 개발] Player - 플레이어에 애니메이션 적용하기 (0) | 2022.12.14 |
[Unity: 유니티 게임 개발] Player - 플레이어 점프시키기 (0) | 2022.12.14 |
[Unity: 유니티 게임 개발] Player - 플레이어 움직이기 (1) | 2022.12.13 |
[Unity: 유니티 게임 개발] Player - 플레이어 만들기 (0) | 2022.12.13 |