본문 바로가기
개발/Unity 내일배움캠프 TIL

Unity2D 셀 애니메이션

by 석시 2023. 9. 7.



유니티 상에서 애니메이션을 만드는 방법이 여러 가지 있겠지만, 오늘은 셀 애니메이션에 대해 소개해보고자 한다.


출처 및 스프라이트 준비

일단 애니메이션을 만들 스프라이트들을 준비하자.

나는 골드메탈님의 유튜브 강좌를 참고하였다.

2D 셀 애니메이션🏃제작하기 [유니티 뱀서라이크 03]
유니티에서 2D 애니메이션을 만드는 방법을 쉽게 설명한 강좌입니다. 플레이어 스프라이트는 4종류가 있으니 원하는 것으로 따라해보아요~🤭 그리고 힘들게 만든 애니메이터를 재활용하는 방법까지 상세하게 소개해드리고 있습니다. 📚 뱀서라이크 개발 채널 https://www.youtube.com/playlist?list=PLO-mt5Iu5TeZF8xMHqtT_DhAPKmjF6i3x 📖 챕터 01 00:00 방향 바라보기 02 05:44 셀 애니메이션 03 09:26 애니메이터 설정 04 17:44 코드 작성하기 05 20:33 애니메이터 재활용 #유니티강좌 #유니티기초 #뱀서라이크 #뱀파이어서바이버
https://youtu.be/vizfd1TeRMI?si=57U73WSg3-qSONn0
Undead Survivor Assets
B02 DinoRun (Remake) Assets
https://www.goldmetal.co.kr/post/undead-survivor-assets


애니메이션 생성

오브젝트에 한 번에 여러 장의 스프라이트를 드래그 앤 드롭하면 그 즉시 애니메이션이 만들어진다.

갖다 놓는 즉시 anim 파일을 생성할 대화상자가 뜬다.

이와 같은 방식으로 Stand_Player0.anim Run_Player0.anim Dead_Player0.anim 총 세 개의 애니메이션 파일을 만들어주었다.

애니메이션과 애니메이션 컨트롤러(AcPlayer)가 생성된 모습


애니메이터 보기

애니메이션 컨트롤러를 더블클릭해서 애니메이터를 열어보면 State Diagram으로 된 애니메이션 구성을 볼 수 있다.

Exit는 안보이는 사람도 있을텐데, 구석 저 너머에 숨어있는 경우가 많다.

일단 배치를 다음과 같이 바꾸고 설명하자.

이름은 인스펙터에서 살짝씩 바꿔줬다.

State와 Transition에 대한 이해가 필요한데, 해당 내용에 대해서는 다음 글을 참고하자.

Unity2D 애니메이터 State와 Transition
애니메이터 StateTransitionParametersConditionsSettings특수 State들Entry, ExitAny State예시) 기본, 달리기, 피격 상태 구현예시1. Any State의 Can Transition To Self 사용예시 2. Trigger 사용예시 3. Exit 활용 애니메이션을 구현하다보면, 단계별로 진행되는 애니메이션이 아니라 말그대로 특정 조건을 만족하기만 하면 애니메이션을 재생하도록 설정하고 싶은 경우도 있다. 피격 모션이나, 죽을 때 애니메이션과 같은 경우가 그것이다. 해당 기능들을 구현하기 위해 쓰는 각 State와 Transition들에 대해 알아볼 것이며, 예시로 State Diagram을 어떻게 구성하는지 소개할 것이다. 애니메이터 State 애니메이터..
https://seoksii.tistory.com/43

우리는 처음 캐릭터가 생성되었을 때 애니메이션 상태는 Stand여야 한다.

Entry에서 Run이 아닌 바로 Stand로 가게 하려면 어떻게 해야할까?

Stand 우클릭 → Set as Layer Default State

Stand가 기본 State로 바뀌었다.


트랜지션 만들기

트랜지션은 한 애니메이션에서 다른 애니메이션으로 넘어가게 하는 오브젝트이다.

Stand 우클릭 → Make Transition

내가 지금 어떤 상태에 있는지 상관 없이 특정 조건만 넘어가면 항상 넘어가는 State도 존재할 것이다.

Dead의 경우가 그런데, 체력이 0 이하가 되기만 한다면 나의 현재 상태에 상관 없이 Dead 애니메이션이 재생되어야 하지 않겠는가?

그런 항상 넘어가야하는 조건을 위해 Any State라는 블럭이 존재한다.

Any State와 연결된 Animation은 현재 State에 구애받지 않는다.


조건을 위한 파라미터 추가

Animator 편집창 왼쪽 위를 자세히 보면 Parameters라는 공간이 있다.

이 곳에서 Transition 조건을 위한 파라미터를 만들어줄 수 있다.

애니메이터 왼쪽 상단. 아직은 비어 있다.

+버튼을 눌러 네 가지 종류의 값을 추가할 수 있다.

다음과 같이 float 파라미터 Speed, bool 파라미터 Dead를 하나씩 만들어주자.

이제 transition에 파라미터 조건을 추가해주자.

(Stand → Run Transition에서) Conditions의 + 버튼

Stand → Run Transition의 Inspector.

Speed, Greater, 0.01로 설정해주면 된다.

마찬가지로 Run → Stand Transition에서는 Condition을 하나 추가해서 Speed, Less, 0.01로 설정해주자.

Run → Stand Transition의 Inspector.

AnyState → Dead Transition은 Condition을 아까 추가했던 bool 값인 Dead로 추가해주고, Dead, true로 설정해주자.

AnyState → Dead Transition의 Inspector


참고) Duration 최소화

참고로 셀 애니메이션이기 때문에

애니메이션을 부드럽게 전환해주는 기능인 Duration은 필요가 없다.

이를 최대한 줄여 바로바로 애니메이션이 변할 수 있도록 모든 Transition Duration을 0으로 바꿔주자.

바꾸기 전.
바꾼 후.

마찬가지로 State가 넘어갈 때 현재 재생 중인 애니메이션을 모두 재생한 뒤 Transition을 하는 옵션인 Has Exit Time 역시 꼭 체크 해제해주자.


코드 작성하기

스크립트를 생성하여 다음과 같이 코드를 작성해주자.

Animator anim;

void Awake()
{
    anim = GetComponent<Animator>();
}

void LateUpdate()
{
    // 1 대신 velocity나 Move input의 Vector2 Magnitude를 넣어줘도 됨.
    anim.SetFloat("Speed", 1);
}

이제 애니메이션은 완성이다.

움직임 구현에 대해서는 다음의 게시글을 참고하자.

Unity 플레이어 캐릭터 이동 구현하기
1. Input.GetAxisGetAxisGetAxisRawInput Manager2. Input.GetKey3. Input System 패키지와 event 활용Input System 패키지 설치Input Actions 오브젝트 생성Input Actions 편집스크립트 작성키 입력 받는 스크립트 작성참고) event를 사용했을 때의 이점Entity 이동 스크립트 작성컴포넌트 추가 플레이어 캐릭터 이동 구현에 대한 글이다. 다양한 방법으로 구현해볼 수 있겠지만총 세 가지 방법에 대해 다뤄보도록 하겠다. 1. Input.GetAxis 수평, 수직 키 값을 입력받아 추출해주는 함수이다. GetAxis public class TopDownCharacterController : MonoBehaviour { [Se..
https://seoksii.tistory.com/37


참고) 애니메이터 재활용

이번 애니메이션 게시글에서 어쩌면 가장 중요할 수도 있는 부분.

애니메이터를 한 번 만들때마다 State를 다시 설정하고, Transition 만들고… 이런 과정들을 매 번 반복할 수는 없을 것이다.

특히나 캐릭터가 바뀌는 게임이라면 이러한 작업을 캐릭터의 개수마다 해줘야하는 것인가?

당연히 아니다.

그런걸 피하기 위해 애니메이터를 재활용하는 방법에 대해 알아보겠다.

아까 애니메이션 생성에서 했던 것처럼 Player 오브젝트에 드래그 앤 드롭을 해서 Dead_Player1.anim Run_Player1.anim Stand_Player1.anim 이렇게 세 가지를 또 만들어주자.

그 뒤 Animator를 다시 열어보면 추가했던 애니메이션이 바로 뜨는 것을 알 수 있다.

자동으로 추가된 애니메이션은 과감하게 지워주자.

이제 새로운 오브젝트를 만들 것이다.

바로 Animator Override Controller이다.

Animator Override Controller는 애니메이션만 덮어 씌우는 에셋이다.

(Project의 + 버튼 또는 우클릭 → Create) → Animator Override Controller

아이콘이 살짝 다르다.

이걸 이제 설정해주자.

먼저 어느 Controller를 Override할지 Inspector에서 설정해줘야 한다.

아까 만든 AcPlayerAnimator Override ControllerController에 드래그 앤 드롭해주자.

그 후 덮어씌울 애니메이션들을 모두 설정해주면 된다.

그 후 캐릭터의 오브젝트가 바뀌게 된다면, 그 오브젝트의 Inspector에서 Animator 컴포넌트의 Controller만 방금 만든 Animator Override Controller로 바꿔주기만 하면 된다는거!

기존의 Animation Contoroller랑 동일 취급이다.

이제 끝이다!

하나의 애니메이션 컨트롤러로 두 개체의 애니메이션을 컨트롤한다!

이 방법을 몰라서 프로젝트할 때 많이 해멨었다.

실제로 캐릭터의 오브젝트가 바뀌는 기능을 만든다면, 오브젝트의 프리팹을 만들어 그 안에 Animator Override Controller를 넣으면 될 듯하다.


Uploaded by N2T