내일배움캠프 TIL

내일배움캠프 22일차 TIL "캐릭터를 뒤집는 방법"

Jooglorystar 2024. 10. 15. 21:03

 

 

기존에 나는 2D 캐릭터를 뒤집는 방법을 Sprite Renderer에서 FlipX을 이용해 뒤집는 방법만 알고 있었다.

그러나 오늘, 다음과 같은 문제가 발생했다.

 

 

 

해당 스프라이트는 여백 공간이 있는 비대칭인 스프라이트였고, 해당 스프라이트를 Flip할 경우 Collider는 같이 뒤집어 지지 않는 상황이 발생했다.

 

우선 나는 다음과 같은 코드를 이용해 해당 현상을 해결하고자 했다.

 

private void FlipSprite(Vector2 direction)
{
    if (direction.x < 0)
    {
        charaSpriteRenderer.FlipX = true;
        charaCollider.offset = new Vector2(-charaCollider.offset.x,charaCollider.offset.y);
    }
}

 

스프라이트 렌더러에서 Flip을 이용하고, 동시에 Collider의 Offset값을 조정해 스프라이트에 맞추는 방법을 생각해냈다.

그러나 이 방법은 Collider의 위치도 생각처럼 바뀌긴 했으나, 기존 위치와 바뀐 위치가 빠르게 반복되어, 사실상 의미가 없었다.

 

하지만 더 간단한 방법이 있다는 사실을 알았다. 스프라이트만 뒤집는 것이 아닌, 아예 오브젝트 자체를 뒤집는 법이었다.

 

 

private void FlipSprite(Vector2 direction)
{
    if (direction.x < 0)
    {
        transform.localScale = new Vector3(-1,1,1);
        // 혹은 transform.rotation = Quaternion.Euler(0,180f,0);
    }
}

 

 

오브젝트의 transform의 Rotation의 Y값을 180도로 돌리거나, Scale의 X값은 -1로 하면, 해당 오브젝트를 좌우반전 할 수 있었다.

스프라이트만 뒤집는 간단한 경우에는 플립을 쓸 수 있지만, 콜라이더를 비롯한 다른 것도 같이 뒤집어야하는 경우에는 오브젝트 자체를 뒤집는 방법을 사용할 수 있다.

 

알고나서는 다소 허무한 해결법이었지만, 그만큼 기본이 되는 것을 알 수 있게된 시간이었다.