본문 바로가기

Programming/Game Engine

[Unity] 유니티 3D 애니메이터(Animator) 사용하기

728x90
반응형



유니티 3D 애니이메터(Animator) 사용하기


이번 글에서는 유니티의 에니메터를 이용해서 직접 3D 캐릭터의 동작을 제어 하는 기능을 구연합니다.


이 글은 이전에 작성한 "Megical Voxel과 Blender로 Unity 3D 움직이는 캐릭터 만들기" 와 이어지는 


내용입니다.


유니티 Standard Asset 중 Characters 에셋을 사용했습니다.


Unity 3D 5.4.1f1


Google Store : https://play.google.com/store/apps/details?id=com.jmop




1. Animator 만들기




먼저 애니메이터 컨트롤러를 만듭니다.


마우스 오른쪽을 눌러 "Create" -> "Animator Controller" 를 눌러 생성합니다






저는 이름을 "Ani" 라는 폴터를 만들고 "TestRun"이라고 이름지었습니다.






다음 애니메이터를 적용할 FBX파일을 히스토리에 추가 합니다.


저는 "sord"라고 이름지어져 있습니다.


만들면서 참고하기 위해 이전 글에서 사용한 에셋들은 모두 남겨져 있습니다.





"sord"를 선택하고 "Inspector"창을 보면 "Animator" 컴포넌트가 있습니다.


현재 "Controller"에 None으로 컨트롤러가 없습니다.




우리가 생성한 "TestRun"을 선택해서 컨트롤러에 넣습니다.




컨트롤러에 "TestRun"을 넣은 후 더블클릭을 하면 상단 사진처럼 애니메티어 창이 나옵니다.


여기에서 어떤 애니메이션을 사용할지 추가할 수 있습니다.





이제 사용할 애니메이션을 가져와야 합니다.


저는 유니티에서 제공하는 애니메이션을 사용할 예정입니다.


혹시 개인적으로 사용할 애니메이션을 가지고 계시면 그걸 사용해도 됩니다.


없으신 분은 상단 메뉴에서 "Assets" -> "Import Package" -> "Character" 를 해서 가져오시먼 저와 똑같이 작업하실 수 있습니다.


 


"Standard Assets" -> "Character" -> "ThirdPersonCharacter" -> "Animation" 에 보면 각동 애니메이션


이 있습니다.


그 중에서 "HumanoidIdle" 를 선택하면 "Inspector"창에 위의 사진처럼 나옵니다.


아래에서 ▶을 누루면 캐릭터가 어떤 동작으로 움직이는것을 볼 수 있습니다.


현재는 서서 숨만 쉬는 애니메이션입니다.





"HumanoidIdle"를 드래그 해서 애니메이터 창으로 드랍 합니다.


그럼 위의 사진처럼 노드가 하나 생성 되고 "Entry"로 자동으로 이어 줍니다.





상단의 사진과 같이 되어 있는 상태에서


시작을 눌러서 보면 캐릭터에 애니메이션이 적용 되는것을 볼 수 있습니다.






상단의 사진이 시작을 한 상태 입니다.


부드럽게 잘 움직이면 성공입니다. 혹시 안된다면 히스토리 창에서 캐릭터를 선택(저는 "sord")하고


"Inspecter" 창에 "Animater" -> "Controller"에 생성한 애니메이터 컨트롤러가 있는지 확인하세요.


일단 작업 하기 위한 기본 작업이 끝이 났습니다.





2. 입력에 따라 애니메이션 변경하기.



 


다시 작업을 하기 위해서 "HumanoidIdle" 노드를 지웁니다.





빈 공간에서 마우스 오른쪽 -> "Create State" -> "From New Blend Tree" 를 선택해서 노드를 만듭니다.





"Inspector"창에서 이름을 "Running"으로 지정 합니다.





"Running" 노드를 더블 클릭 합니다.





노드 창을 더블클릭 하면 상단의 사진처럼 새로운 창에 들어 옵니다.






이전 작업 창으로 넘거가기 위해서는 위의 사진처럼 되어 있는거에서 "Base Layer"를 누르면 이전으로


돌아 갈 수 있습니다.




"Inspector" 창에 보면 "Motion" 항목이 있습니다.





플러스를 누르고 "Add Motion Field"를 선택합니다.




총 4개를 추가 합니다.



다음으로 모션을 추가 합니다.


"Standard Assets" -> "Character" -> "ThirdPersonCharacter" -> "Animation" 에 있는 것을 활용합니다.


순서대로


"HumanoidIdle"


"HumanoidRun"


"HumanoidRunLeft"


"HumanoidRunRight"


입니다. Left, Right는 "HumanoidRunTurn"를 보면 옆에 작게 화살표가 있습니다. 화살표를 누르면 보입


니다.




다음으로 파라미터를 추가 합니다.


애니메이터 창에서 왼쪽에 보면 "Parameters"가 있습니다. 이를 누르고 "+"를 누르면 파라미터를 추가


할 수 있습니다. "Float"형으로 2개 변수를 만들고 이름을 "Move", "Direction"으로 합니다.






다시 "Inspector"창으로 오면 "Blend Tree" 이름 밑에 "Blend Type"이 있습니다.






생성한 파라미터를 두개 사용해야 하기 떄문에 "Blend Type"을 "2D Simple Directional"로 합니다.


그러면 상단의 사진처럼 바뀝니다.




모션에서 Pos X, Pos Y 값을 상단 사진처럼 입력합니다.


위에서는 "Move"가 Pox X, "Direction"이 Pox Y입니다.


이제 C# 으로 작업을 해야 합니다.



3. C# 작업





C# 파일을 생성합니다.


"Create" -> "C# Script"를 선택해서 만들고 저는 이름을 "RunContoller"로 만들었습니다.



※ 주의할 점


C# 파일을 만들고 처음에 이름을 지정하고 나중에 바꾸면 문제가 발생합니다.


그 이유는 파일 이름하고 파일 안의 클래스 이름이 달라서 생기는 문제입니다.


주의하시기 바립니다.





생성한 C# 파일을 컨트롤 할 캐릭터의 컴포넌트로 추가합니다.


상단의 사진을 보면 제가 사용중인 캐릭터의 "Inspector"창에 "Run Controller"가 추가 되어 있습니다.




가장 간단한 기능만 가용해 보겠습니다.


Animator animator;


애니메이터 인스턴스를 생성하고,


animator = GetConponent<Animator>();


씬이 시작되면 ( Start 함수 ) 애니메이터 컴포넌트를 가져옵니다.




Input.GetKey() 함수는 입력 된 키 값을 받습니다. 여기서는 W, A, S, D 로 방향키처럼 했습니다.


현재 뒤로 가는건 모션을 넣지 않았기 때문에 그냥 했구요.


사실 저렇게 하면 안되지만...


나중에 수정 하기로 하고 일단 입력에 변화 되는거만 보기 위해 했습니다.


animator.SetFloat() 함수는 우리가 지정한 변수에 값을 셋팅 합니다.




유니티 문서에서 보면 위와 같이 되어 있습니다. Float형 말고도 다른것도 지원을 하죠~


무튼 잘 작동 하면 되죠.....


시작 해봅니다~  이번에는 동영상 입니다~




오른쪽에 있는 캐릭터가 이번에 직접 만든 애니메이터 입니다. 왼쪽은 받아서 쓰는거구요~


같은 입력을 받아서 하기 때문에 같이 움직입니다.


다만, 뒤로 (S Key)를 눌렀을때는 하나만 움직이죠~


이후 추가를 해야 합니다~ 


지금까지 하면 전반적인 사용법은 알 수 있을거라 생각합니다~




해당 내용으로 간단히 만든 게임을 구글 라이브러리 등록 하고 구글 스토어에 등록했습니다.


https://play.google.com/store/apps/details?id=com.jmop




반응형