Unity/개인 공부

[ Unity ] 9. 조건에 따른 애니메이션 변화

코딩하는냥이 2026. 5. 24. 15:18
반응형

Animator

 

애니메이션을 넣다보면 다음과 같이 대기 상태에서 이동 상태로 변경해주어야 할 때가 있습니다.

 

Animator

 

우클릭을 눌러 다음과 같이 선을 연결한 후, 저는 픽셀 그래픽이기 때문에 Exit Time와 Transition Duration을 0으로 맞췄습니다.

혹여나 부드러운 모션 전환이 필요한 3D 게임을 만든다면 다음 기능이 쓸모가 있겠지만,

2D 픽셀 그래픽을 사용하는 현재의 저로서는 해당 기능을 제외시켰습니다.

 

Animator Prametars

 

그리고 파라미터에 Bool 값을 받을 자료형 하나를 만들어줍니다.

저희는 이것의 여부에 따라 이동과 대기 애니메이션을 구분해줄겁니다.

 

Idle -> Walk

 

화살표 가운데에 있는 방향을 클릭하면 우측 정보창에 다음과 같은 것이 뜨는데

Conditions에 조건을 추가하여 Walking이 true라면 넘어가는 조건을 넣어줍니다.

반대로 돌아가는 화살표에는 Walking이 false라면 넘어가게 하면 되겠죠?

 

// 윗 단에서 선언해줄 것
SpriteRenderer spriteRenderer;
Animator animator;

// Awake에서 초기화
spriteRenderer = GetComponent<SpriteRenderer>();
animator = GetComponent<Animator>();

// Update에서 설정
if (inputVec != Vector2.zero)
    animator.SetBool("isMove", true);
else
    animator.SetBool("isMove", false);
    
// 추가적으로 Flip을 원한다면 Update에서 추가
if (inputVec.x != Vector2.zero.x)
    spriteRenderer.flipX = inputVec.x < 0;

 

그리고 플레이어 코드에서 다음과 같이 추가해주면 깔끔하게 이동하는 것을 확인할 수 있습니다.

※ SetBool에 들어가는 값이 isMove인 이유는 작업하면서 파라미터 값을 다시 수정했습니다.

 

캐릭터가 중심이 아닌 경우에..

 

다음과 같이 캐릭터가 스프라이트 중심이 아닌 경우에는 FlipX를 통해서 뒤집으면 중심이 계속 바뀌는 것을 확인할 수 있습니다.

또한 콜라이더 값도 바꿔줘야 하고 꽤나 난감해지는데 해결하는 방법은 단순합니다.

 

그냥 플레이어 오브젝트 아래에 스프라이트 랜더링을 해줄 스프라이트 오브젝트를 생성해주면 됩니다.

 

Sprite Object의 정보

 

저의 경우 오른쪽을 볼 때에는 0.227, 왼쪽을 볼 때에는 -0.227일 때 가장 이상적인 모습을 보여줬었습니다.

그렇기에 이처럼 어느 정도 이동해야 중앙으로 오는지 확인하고 다시 코드를 이에 맞게 수정해줍니다.

 

// 따로 가져오는 코드가 있지만 저는 더욱 단순한 방법으로 진행했습니다.
// 윗 단에서 Ojbect를 가져오기 위해서 선언
public Object sprite;

// Awake에서 SpriteRenderer, Animator 초기화 방식 변경
spriteRenderer = sprite.GetComponent<SpriteRenderer>();
animator = sprite.GetComponent<Animator>();

 

이렇게 하고..

 

Object Sprite를 가져오는 모습

 

유니티 엔진에서 오브젝트인 Sprite를 가져옵니다.

그럼 다시 기존과 같이 잘 작동하는 것을 볼 수 있습니다.

하지만 굳이 이렇게 하지 않아도 코드를 통해서 가져올 수 있으니,

어떠한 방법이 정답이고 어떤 것이 오답인 것은 없으니 편하게 해주시면 됩니다.

 

잘 작동하는 것을 확인할 수 있다

 

잘 작동하죠?

 

코드를 이후 수정하기 편하게 짜두고 싶다면?