프로그래밍 농장

3D Model / Animations 상태전이 [ Unity ] 본문

Unity

3D Model / Animations 상태전이 [ Unity ]

Tennessee201 2022. 2. 4.
728x90

유니티 3D에서 오브젝트의 애니메이션 및 상태를 조건에 맞추어 변경하기 위해서는 상태전이를 사용하여야한다.

아래와 같이 기본적으로 캐릭터 Inspector가 있다고 가정하였을때, 사용자의 조작방식(조건) 에 맞추어 이동모션, 및 뛰는 모션과 같은 모습을 Animator를 통하여 설정해주어야한다. 

 

아래와 같이 현재 캐릭터의 컴포넌트를 보면 Animator라는 부분의 Controller에 'Player'명의 Animator Controller'가 연결되어있고, 아바타는 에셋을 통해 다운받은 캐릭터인것을 확인할수있다.  그리고 그아래에는 사용자의 입력조건에 따른 아바타의 움직임을 설정해놓은 스크립트 파일이 같이 연결되어있다. 

그렇다면 여기서 Player명의 Animator Controller를 열어보면 아래와 같이 Base Layer가 설정되어있다. 

현재는 Idle에 WAIT00이라는 모션 (대기) 가 설정되어있으며, 이는 임의로 지정된 시간마다 RUN00_F라는 모션 (뛰기) 와 반복되어 실행된다는 뜻이다. 


Animator Controller에서, 아래의 몇가지 개념을 정리하자면 아래와 같다. 

Transitions : 선택 중인 상태전이 목록을 뜻함

Solo :  목록 중에 설정된 여러 개의 Solo에서 선택된 것만 활성화

Mute : 해당 상태전이를 실행하지 않는다

Has Exit Time : 종료시간(Exit Time)을 사용할 것인지 설정 

Fixed Duration : Exit Time을 초로 지정할떄 On, 재생 시간의 0-1 비율로 지정할 떄 Off.

Transition Duration : 전이 시 애니메이션 블렌드에 소요되는 시간 (앞에 재생되는 Idle과 뒤에 재생되는 Run, 두 애니메이션이 섞여서 재생되는 시간) 

Transition Offset : 전이되어 재생하는 애니메이션의 재생 시작 시간 (0-1) ( ex. 0.5일 경우 전이되어 재생되는 애니메이션의 50% 프레임부터 시작) 

Interruption Source : 상태전이를 중단할 떄 조건 지정 

Ordered Interruption : 현재 전환이 순서와 관계없이 다른 전환에 의해 중단될 수 있는지 설정 

Conditions : 상태 전이가 일어나 다른 애니메이션으로 전환되기 위한 조건 (현재 Animator Controller의 Parameters에 생성되어 있는 변수만 등록 가능)


그렇다면 여기서, 아바타를 조작할떄 이동속도가 특정값을 초과하면 RUN 모션을 주고, 이에 미치지못하면 WAIT값을 주는 작업을 수행해보겠다.

아래와 같이 Parameters에서 float타입의 파라미터를 생성하고, Idle -> RUN00 과 RUN00 -> Idle 로 이어지는 두 상태변이의 Has Exit Time을 전부 해제하고, Condition에 moveSpeed Parameters를 추가한다.

이후 각각 조건을 0.1로 주어서, 이를 초과(Greate) 혹은 미달(Less)할시에 따른 아바타 모션을 지정해줄수있다. 

Idle -> RUN00
RUN00 -> Idle

이떄 프로젝트를 수행하기전, 아바타에 연결되어있던 PlayerController.cs의 코드를 아래와 같이 I 와 R의 입력에 따라 간단하게 movespeed값을 조정하는 코드를 작성후 수행해보면 속도에 따른 아바타의 상태 전이를 확인할수있다. 

 


이동속도(movespeed)에 따른 아바타의 상태 전이 

press R
press I

728x90