본문 바로가기

지식창고/Unity엔진

Unity5 Mecanim Animation Tutorial - Part5-2

반응형

Part5-2. Import 시킨 MMD모션을 Mecanim Animation을 이용하여 구현하기.

 

[그림 30 - 0]

저처럼 MMD캐릭터뿐만 아니라 춤모션도 함께 Import하여 추출하신 분들은 Project탭에서 해당 MMD캐릭터의 폴더에 보시면 캐릭터파일이 있을 것입니다.

 

캐릭터파일에 보시면 오른쪽 정중앙에 화살표모양을 클릭하여 주시기 바랍니다.

 

[그림 30 - 1]

화살표 모양을 눌러보시면 해당 캐릭터 파일이 지니고 있는 파일들(프리팹,애니메이션, 아바타 등등)이 나열되는데 그 중에서도 함께 Import하여 추출하였던 춤모션 파일을 클릭하여 주신 후 Ctrl + D로 해당 애니메이션 파일의 복사본을 생성(그림 30 - 2)합니다.

 

[그림 30 - 2]

 

[그림 30 - 3]

해당 애니메이션의 복사본을 확인하셨다면 01. Animation 폴더로 드래그 앤 드랍으로 이동시켜주도록 하겠습니다.

 

[그림 30 - 4]

이동시킨 애니메이션 파일의 이름을 Girls_Audio로 변경하여주시기 바랍니다.

(해당 애니메이션 파일명에 _Audio를 붙힌 이유는 해당 애니메이션이 구동될 때 Girls노래가 나오도록 나중에 설정해줄 것이기 때문입니다.)

 

애니메이션 파일의 이름을 변경시켜 주신 후 Animator탭에 드래그 앤 드랍으로 추가 시켜줍니다.

 

[그림 30 - 5]

그러면 애니메이션 파일명과 동일한 노드가 Animator탭에 생성되는 것을 확인하실 수 있음과 동시에 Inspector탭에서는 Motion부분이 None이 아닌 해당 애니메이션 파일이 적용되어져 있는 것을 확인 하실 수 있을 것입니다.

 

이렇게 새롭게 추가한 애니메이션 노드와 기존 애니메이션 노드와 연결을 해주도록 하겠습니다

 

[그림 30 - 6]

먼저 기존 애니메이션 노드인 Idle노드에서 우클릭하여 Make Transition을 클릭하여 주면,

Idle노드를 기준으로 하얀색 연결선이 활성화 되실 것입니다.

 

[그림 30 - 7]

이렇게 활성화된 Transition을 방금 추가한 Girls_Audio 애니메이션 노드와 연결 시켜주시면 됩니다.

 

두 개의 노드를 연결하였다고 바로 사용할 수 있는 것이 아니기 때문에 간단한 설정과 스크립트를 작성하여 주도록 하겠습니다.

 

[그림 30 - 8]

Animator탭에서 보시면 Parameters라는 항목이 보이실 것인데 해당 항목을 클릭하여 줍니다.

 

[그림 30 - 9]

Parameters를 클릭하면 + 모양이 보이실 것인데 +클릭하면 총 4개의 변수형(Float, Int, Bool, Trigger)이 보이실 것입니다.

 

이 중에서도 Bool형을 클릭하여 해당 변수형의 변수명을 Girls로 변경하여 주시기 바랍니다.

(Girls 모션이 아닌 다른 춤모션을 사용하셨다면 해당 춤모션의 이름으로 변경하시는 것을 추천합니다.)

 

[그림 30 - 10]

그림 30 - 9와 같이 하셨다면 해당 이름의 변수가 생성된 것을 확인할 수 있을 것입니다.

 

[그림 30 - 11]

Idle 노드와 Girls_Audio노드를 연결하고 있는 Transition을 클릭하여 줍니다.

 

[그림 30 - 12]

Transition을 클릭하시면 Inspector탭에 해당 Transition의 설정 항목들이 활성화 되는데 이 중에서도 Conditions 항목에서 + 모양을 클릭해주시기 바랍니다.

 

[그림 30 - 13]

그럼 조금전에 생성한 Girls이름을 가진 Bool형 변수가 true로 설정되어 적용되어지는 것을 확인하실 수 있을 것입니다.

 

[그림 30 - 14]

지금까지 Animator에서의 설정을 끝낸 후 유니티에서 Play를 눌러보아도 MMD캐릭터는 여전히 Idle 애니메이션만 구동하고 있는 것을 확인하실 수 있을 것입니다.

 

그 이유는 아직 노드간 연결하여 주고 있는 Transition에 적용된 Parameter형 Bool변수 값을 변경해주지 못했기 때문인데 이것을 스크립트로 컨트롤 해주도록 하겠습니다.

 

[그림 31 - 1]

먼저 Project 탭의 Assets에서 우클릭하여

Create -> C# Script를 선택하여 새로운 C# 스크립트를 생성해주도록 하겠습니다.

 

[그림 31 - 2]

새롭게 생성된 스크립트의 이름을 DanceController로 변경하여 주신 후 더블클릭하여 줍니다.

 

[그림 31 - 3]

우리는 시작 전에 유니티의 스크립트를 비쥬얼 스튜디오에서 편집할 수 있도록 설정하여 주었기 때문에, 비쥬얼 스튜디오로 해당 스크립트가 열릴 것 입니다.

 

비쥬얼 스튜디오로 열린 스크립트를 그림 31 - 3과 같이 작성하여 주시기 바랍니다.

 

[그림 31 - 4]

코드 작성이 다 되신 다음에 Ctrl + S로 스크립트를 저장시켜 주신 후 유니티 창으로 돌아와

DanceController스크립트를 Hierarchy탭에 있는 MMD캐릭터 오브젝트로 드래그 앤 드랍으로 추가시켜 주시기 바랍니다.

 

[그림 31 - 5]

이렇게 해당 오브젝트로 드래그 앤 드랍한 스크립트는 그림 31-5와 같이 Inspector 탭에 해당 오브젝트에 스크립트가 추가된 것을 확인하실 수 있을 것입니다.

 

[그림 31 - 6]

그림 31-6까지 하신 다음에 Play버튼을 눌러보시면 Girls애니메이션이 구동될 때가 있고 안될 때가 있는 것을 확인하실 수 있을 것입니다.

 

그 이유를 설명드리도록 하겠습니다.

 

먼저 Animator 탭에서 Idle노드와 Girls_Audio노드를 연결하고 있는 Transition을 클릭하시면, Inspector탭에 Has Exit Time 항목에 체크가 되어 있는 것을 보실 수 있을 것입니다.

 

Has Exit Time이란 해당 애니메이션을 1번 구동 시킨 뒤 몇 초뒤에 재구동 시킬 것인지를 설정하여 주는 항목입니다.

또는 스크립트에 의해 다른 노드의 애니메이션을 구동시킬 때 해당 애니메이션을 1번 완료한 후 몇 초뒤에 구동 시킬 것인지에 대한 설정이기도 합니다.

 

그렇기 때문에 그림 31-5까지 하신 다음에 Play버튼을 눌러보시면 Idle애니메이션이 종료되는 시점에 맞춰 1번 키를 눌러야만 Girls 애니메이션이 구동되는 것을 보실 수 있을 것입니다.

 

하지만 우리가 원하는 것은 언제 누르든 Girls 애니메이션을 구동시켜 주고 싶은 것이기 때문에 다음 그림 31-7과 같이 Has Exit Time의 체크를 해제하여 주시기 바랍니다.

 

[그림 31 - 7]

자 그럼 이번에는 과연 우리가 원하는 때에 1번키를 눌렀을 때 Idle 애니메이션에서 Girls애니메이션으로 변경되어 제대로 작동되어지는 확인하여 보도록 하겠습니다.

 

[그림 31 - 8. Idle상태의 모습]

유니티에서 Play버튼을 누르면 Idle애니메이션이 제대로 구동되는 것을 다시 한번 확인 가능하실 것입니다.

 

과연 이번에는 Idle 애니메이션 중 아무때나 키보드의 1번키를 눌렀을 때 Girls 애니메이션이 구동되는지 확인 해보도록 할까요?

 

 [그림 31 - 9. Girls상태의 모습]

1번키를 누르시면 그림 31-9과 같이 Idle애니메이션에서 Girls애니메이션으로 노드가 바로 변경되어 Game뷰에서도 Girls애니메이션이 구동되는 것을 확인하실 수 있을 것입니다.

 

여기서 제 블로그의 RPG제작노트 부분을 보셨던 분이라면 MMD 캐릭터의 머리카락이 지금막 샴푸한 것처럼 찰랑거리는 것을 보셨을 건데요.

 

하지만 지금까지 한 작업에서 유니티에서 아무리 Play버튼을 눌러보아도 머리카락이 플라스틱마냥 딱딱해보이면서 전혀 변화가 없는 것을 보실 수 있을 겁니다.

 

찰랑거리는 머리카락의 움직임을 위하여 간단하게 설정 변경법을 알려드리고 넘어가겠습니다.

 

[그림 31 - 10]

Hierarchy탭에서 MMD캐릭터 오브젝트를 클릭하시면, Inspector탭에서 MMD4 Mecanim Model이라는 스크립트가 보이실 것입니다.

 

해당 스크립트에서 보시면 Physics항목을 클릭하여 보시면 Physics Engine 항목이 None으로 되어 있는데요.

 

 

[그림 31 - 11]

Physics Engine항목을 클릭하여 None이 아닌 Bullet Physics를 클릭하여 변경하여 주시면 되겠습니다.

 

이렇게 설정을 변경하여 주셨다면 MMD캐릭터의 머리카락이 다음 그림 2장(그림 31-12, 31-13)과 찰랑거리게 바뀐 것을 확인하실 수 있을 겁니다.

 

[그림 31 - 12]

 

[그림 31 - 13]

하지만 현재의 스크립트는 한도 끝도 없이 Girls 애니메이션이 구동되어지게 되기 때문에

스크립트를 변경하여 원하는 키를 눌렀을 때 Girls애니메이션 노드에서 다시 Idle애니메이션 노드로 돌아가 Idle애니메이션을 구동시켜주도록 변경해보도록 하겠습니다.

 

 

[그림 32 - 1]

DanceController스크립트를 다시 열어 그림 32-1과 같이 코드를 변경하여 주시기 바랍니다.

 

[그림 32 - 2]

코드를 변경하여 준 후 Ctrl + S를 눌러 항상 저장해주셔야 변경한 코드가 스크립트에 적용되므로 항상 코드를 변경하셨다면 저장해주시는 습관을 가지시는 것을 추천합니다.

 

코드 변경 후 저장까지 하셨다면 Animator 탭에서 Girls_Audio노드에서 우클릭을 하여

Make Transition을 클릭하여 줍니다.

 

[그림 32 - 3]

Idle노드와 Girls_Audio노드를 연결했던 방식대로 이번에는 Girls_Audio노드와 Exit노드를 연결하여 줍니다.

 

[그림 32 - 4]

Girls_Audio노드와 Exit노드를 연결하였다면, 두 개의 노드를 연결하고 있는 Transition을 눌러 Inspector탭에서 Conditions 항목에서 +를 눌러 Girls 변수를 추가하여 주고, 이번에는 true가 아닌 false로 변경하여 줍니다.

 

Has Exit Time의 체크도 해제하여 주시기 바랍니다.

 

지금까지 잘 따라오셨다면 Play버튼을 눌러 1키와 W키를 번갈아 눌러보면 Animator탭에서 Idle애니메이션 노드와 Girls_Audio애니메이션 노드가 변경되는 것이 확인될 것이며,

Game 뷰에서 또한 각 노드의 애니메이션이 캐릭터에 적용되어 구동되어지는 것을 볼 수 있을 것입니다. 

 

이렇게 금일 튜토리얼인 Part5-2. Import 시킨 MMD모션을 Mecanim Animation을 이용하여 구현하기.가 끝났습니다.

반응형