유니티에서 애니메이션 스테이트 머신 사용 과정 - Whitmem
유니티에서 애니메이션 스테이트 머신 사용 과정
게임 개발 및 엔진
2026-01-01 21:55 게시 7f5fd267cd2854be7c86

0
0
7
이 페이지는 외부 공간에 무단 복제할 수 없으며 오직 있는 그대로 게시되며 부정확한 내용을 포함할 수 있습니다. 법률이 허용하는 한 가이드 라인에 맞춰 게시 내용을 인용하거나 출처로 표기할 수 있습니다.
This page is not to be distributed to external services; it is provided as is and may contain inaccuracies.
유니티 엔진에서 Animator 에셋 기능을 사용해서 애니메이션을 FSM 스테이트 머신으로 구동하는 방법을 알아보고 이를 소스코드에서 제어하는 방법에 대해 알아보았다.
이전 다른 엔진에서 사용한 방법과 같지는 않지만 형태는 비슷 비슷하다.
우선 일반적인 유한 상태 머신과 동일하다. 다만 여기서는 Entry에서 시작되어 End로 가면 다시 Entry로 돌아가는 듯 싶다. 다만 이는 최상단 레이어일 때 그렇고 하위 노드에서는 Exit시 상단 노드로 올라가는 듯 싶다.
위 상태 노드에서는 프로젝트가 시작되면 일단 무조건 Idle 상태에 머무르고, 상황에 따라 Work, Run 으로 이동한다. Transition 방향은 스테이트에 우클릭해서 Make Transition 버튼을 통해 추가할 수 있다.
각 트렌지션 노드를 보면 아래에 Conditions 항목이 보이는데 여기서 Condition 정보를 추가할 수 있다. 다만, 이미 Animator의 Parameters 에 추가한 파라메터만 추가할 수 있고, 크거나, 작거나, 같거나, 같지 않거나, 트리거 옵션 중에서 선택해야 한다. Parameters는 Animator 창의 좌측 위 Layers 버튼 오른쪽에 존재한다. 여기서 내가 조작할 변수 파라메터를 추가할 수 있다.
한편 각 스테이트의 설정 중에 Has Exit Time 이라는 옵션이 보인은데, 이 옵션을 켜는 경우 애니메이션이 완수되어야 다음 스테이트로 트렌지션 될 수 있다. 바로 바로 이동해야 하는 경우는 비활성화하면 된다. 다만 바로 이동할 경우 애니메이션이 부자연스럽게 끊길 수 있는데, 각 스테이트 트렌지션의 인스펙터 아래 타임라인을 통해서 부드럽게 조합할 수 있다. 해당 트렌지션으로 이동하는 두 스테이트간의 애니메이션을 부드럽게 섞을 수 있다.
위 처럼 Animator 에셋을 추가했으면, 이제 이 에셋을 활용하는 객체의 컴포넌트에 Animator을 추가하고 Animator 의 Controller 에 방금 만든 Animator 에셋을 등록하면 된다.
한편 각 스크립트 코드에서 애니메이터 객체의 값을 조절하거나 트리거 요청을 보내기 위해서는 Animator 컴포넌트를 조회한 뒤 SetTrigger와 같은 명령을 날리면 된다.
Animator 클래스를 받아오는 방법은 다양하다. 애니메이터 컴포넌트가 등록된 지점과 동일한 메시 또는 게임 오브젝트에 스크립트를 추가한 경우 단순히 getComponent 를 통해 같은 오브젝트 인스턴스 하위에 존재하는 Animator 인스턴스를 조회하면 된다. 다른 객체에 붙어있는 경우 public 으로 에디터의 인스펙터 field를 통해 가져오거나, 조회하는 다른 요청문을 사용해서 가져와야 한다.
그리고 각 애니메이터 하위에 SetTrigger 또는 SetFloat 등을 사용하면 된다. 이 때 String 으로 생성한 파라메터 명을 앞에 넣어주면 되는데, String 은 조회하는데 오버헤드가 심하므로 Hash 값으로 미리 변환해두고 Hash int 형으로 조회하라고 한다. 이는 해당 애니메이션 이름에 대해서 해시를 구하는 것이기 때문에, 이름만 같으면 고유 해시는 동일하다. 즉 애니메이션 인스턴스마다 이름 해시가 다른 것이 아니다....
이름에 대한 해시를 구하려면 Animator.StringToHash("") 를 사용하면 된다.
댓글 0개
댓글을 작성하는 경우 댓글 처리 방침에 동의하는 것으로 간주됩니다. 댓글을 작성하면 일회용 인증키가 발급되며, 해당 키를 분실하는 경우 댓글을 제거할 수 없습니다. 댓글을 작성하면 사용자 IP가 영구적으로 기록 및 부분 공개됩니다.
확인
Whitmemit 개인 일지 블로그는 개인이 운영하는 정보 공유 공간으로 사용자의 민감한 개인 정보를 직접 요구하거나 요청하지 않습니다. 기본적인 사이트 방문시 처리되는 처리 정보에 대해서는 '사이트 처리 방침'을 참고하십시오. 추가적인 기능의 제공을 위하여 쿠키 정보를 사용하고 있습니다. Whitmemit 에서 처리하는 정보는 식별 용도로 사용되며 기타 글꼴 및 폰트 라이브러리에서 쿠키 정보를 사용할 수 있습니다.
이 자료는 모두 필수 자료로 간주되며, 사이트 이용을 하거나, 탐색하는 경우 동의로 간주합니다.