Unity3D/Import Anim

Unity 3D Imported Animation

Soul-Learner 2014. 3. 20. 09:09

유니티 3D 에서 외부 애니메이션(FBX)을 임포트하여 사용하는 예


유니티에서는 다양한 3D 모델링 툴로부터 생성된 모델을 임포트하여 사용할 수 있는데, FBX 파일포맷은 내부에서 별다른 변환과정을 거치지 않고 바로 사용된다고 한다. 여기서는 FBX 모델에 포함된 애니메이션을 유니티로 임포트하여 적절히 설정하고 사용하는 예제를 작성하려고 한다

예제에서 사용된 3D 모델은 TF3DM 사이트에서 다운로드하였다

http://tf3dm.com/3d-model/animation-warrior-rig-63855.html

Warrior.zip


유니티에서 프로젝트를 새로 생성하고 Project 뷰의 Assets 폴더 위에서 마우스 우측을 클릭하여 Import New Assets...을 선택하고 FBX 파일(애니메이션이 포함된 FBX 파일)을 임포트한다

임포트한 FBX 파일을 Project 뷰에서 선택하면 Inspector 뷰에 애니메이션을 설정할 수 있는데 아래의 그림과 같이 Model, Rig, Animation 항목으로 구분하여 설정할 수 있다




먼저 Model 탭을 선택하고 아래의 그림처럼 모델의 스케일을 적절히 조정하고 하단에 있는 Apply 버튼을 눌러 적용한다



Rig 탭을 선택하고 Animation Type 항목에 디폴트로 Generic 이 선택되어 있는데, Legacy로 변경하여 선택하고 아래에 있는 Apply 버튼을 눌러서 적용한다



위에서 Legacy 항목을 선택한 다음 아래 그림처럼 Apply 버튼을 누른다




Animation 탭을 선택하고 클립 중에서 디폴트로 Take 001 이라는 이름이 붙여진 한개의 클립을 클릭하면 클립을 더 추가하거나 삭제할 수 있는 툴이 보이는데 이 툴은 잠시 후에 사용하기로 하고 Wrap Mode 의 설정을 Default 에서 Loop 으로 변경하고 하단의 Appliy 버튼을 눌러서 적용한다

반드시 Loop 로 설정하는 것은 아니며 애니메이션이 한번만 실행되고 멈추기를 바란다면 Default 나 Once 등으로 선택하면 된다



위와 같은 방법으로 애니메이션의 모든 설정을 마치고 테스트하려면 Project 뷰에서 애니메이션을 드래그하여 Hierarchy 뷰에 등록하여 Scene 뷰에 나타나도록 하고 Play 모드로 테스트하면 된다. 위에서 Loop 모드로 선택했기 때문에 애니메이션이 무한 반복되는 것을 확인할 수 있다.




한개의 FBX 애니메이션 클립으로부터 다수개의 클립을 잘라내어 별도의 애니메이션으로 실행하는 예


여기서는 강남 스타일 춤 애니메이션이 한개의 FBX에 한개의 애니메이션 클립으로 포함되어 있는 경우에 춤 동작의 유형에 따라서 3가지 애니메이션 클립으로 분리하여 저장하고 방향키를 누르면 그 때마다 다른 애니메이션 클립이 실행되도록 하려고 한다


아래의 예제에서 사용된 FBX 애니메이션은 아래의 사이트에서 다운로드할 수 있다

http://tf3dm.com/download-page.php?url=nightwing-gangnam-style-animation-with-bvh-21627

nightwing anim.zip



FBX 모델 임포트 및 모델에 텍스쳐 적용하기

다운로드한 FBX 모델과 텍스쳐 이미지를 유니티의 Project 뷰의 Assets 폴더로 임포트하고 메시를 마우스로 선택하면 Inspector 뷰에서 Material 섹션에서 텍스쳐 이미지를 설정할 수 있기 때문에 모델 임포트와 동시에 텍스쳐가 적용되지 않는다면 텍스쳐 이미지를 Inspector 뷰로 드래그하여 적용하면 된다.

Projector 뷰에서 모델의 메시를 선택하면 Inspector 뷰의 하단에 Preview 화면이 작게 보이는데 텍스쳐가 적용된 상태를 확인할 수 있다


임포트된 애니메이션 확인

기본적인 설정방법은 위와 동일하므로 애니메이션을 3개로 분리하여 별도로 실행하기 위한 설정에 대해서만 알아본다

아래 그림과 같이 Project 뷰에서 임포트된 모델을 선택하고 Inspector 뷰에서 Animation 탭을 누르면 현재 FBX 파일에 애니메이션이 포함되어 있는 경우에는 Clips 테이블에 애니메이션 클립이 표시된다. 이 파일의 경우에는 2개의 클립이 포함되어 있는데 Default Take 라는 이름이 붙여진 클립이 제대로 실행되는 것으로 확인되었기 때문에 Default Take 클립을 Preview 로 애니메이션을 확인한 후에 Default Take 클립을 동작유형에 따라서 3개의 클립으로 분리하여 별도의 애니메이션으로 실행되도록 설정하려고 한다


위의 그림에서 포함된 애니메이션 클립 중에 Default Take 라는 이름을 클릭하면 아래의 그림과 같이 클립을 분리하는 툴이 나타나는데, Wrap Mode를 Default 에서 Loop 상태로 변경해 주면 애니메이션 실행시에 무한반복 되도록 설정할 수 있다. Preview 화면으로 애니메이션을 드래그하면 미리보기가 가능하다




위의 그림에서 Clips 테이블 하단에 +, - 아이콘이 보이는데, + 기호를 누르면 클립을 생성할 수 있는 기능이 준비되고 - 기호를 누르면 현재 선택된 클립이 삭제된다. + 기호를 눌러서 애니메이션 클립을 생성하고 아래의 그림처럼 설정한다



위의 그림에서 Inspector 뷰의 Preview 화면에 모델이 서 있는 자세가 아니라 바닥에 누운 자세로 있는 것처럼 보이지만 이는 모델링 툴의 축방향과 유니티에서 축방향이 서로 다를 수 있기 때문에 나타나는 현상이고 Scene 뷰에 올려놓고 쉽게 교정할 수 있으므로 잠시 후에 해결하도록 한다

Preview 실행버튼을 누르면 Default Take 클립 중에서 위에서 설정한 10~95 프레임이 분리되어 별도의 애니메이션으로 실행되는 것을 확인할 수 있다


위와 동일한 방법으로 두번째 클립을 생성할 때는 다음과 같이 설정한다

애니메이션 클립의 이름 : Gangnam02

클립의 범위 : Default Take 클립의 116~180

Wrap Mode : Loop

Apply 버튼 클릭

Preview 실행버튼 클릭


세번째 클립을 생성할 때는 다음과 같이 설정한다

애니메이션 클립의 이름 : Gangnam03

클립의 범위 : Default Take 클립의 185~285

Wrap Mode : Loop

Apply 버튼 클릭

Preview 실행버튼 클릭



위와 같이 설정을 마치면 다음 그림과 같이 3개의 생성된 클립이 Inspector 뷰와 Project 뷰에서 확인된다




Project 뷰에서 모델을 드래그하여 Hierarchy 뷰에 놓으면 아래 그림과 같이 Scene 뷰에 모델이 보이게 되는데, 이경우에는 모델의 축방향이 유니티와 맞지 않은 상태이기 때문에 모델을 회전하여 유니티의 Global 방향과 일치하도록 설정하고 빈 게임오브젝트에 포함시키면 된다.

빈 게임오브젝트에 포함시키면 모델의 위치나 회전변환이 요구될 시에 모델의 부모 오브젝트인 빈 게임오브젝트를 변환하면 된다




회전툴을 이용하여 모델이 Scene 뷰에서 정면을 바라보면서 춤을 추도록 변환하고 빈 게임오브젝트에 포함한 후 Play 모드로 확인한다




Play 모드로 테스트하면 다음과 같이 애니메이션이 제대로 실행되는 것을 확인할 수 있는데 여기서 실행되는 애니메이션은 앞서 새로 생성한 클립이 아니라 Default Take 클립이며 처음 부터 마지막 프레임까지 모두 다 실행되는 것을 볼 수 있다.




앞서 작성된 애니메이션 클립 3개는 이용자의 키보드 방향키 입력에 따라서 동적으로 실행되도록 스크립트에서 지정해야 한다

다음과 같은 스크립트를 Project 뷰의 Assets 폴더에 작성하고 드래그하여 Hierarchy 뷰의 모델에 포함시킨다


#pragma strict


function Start () {

animation.Play('Default Take');

}


function Update () {

if ( Input.GetKeyDown(KeyCode.UpArrow))

{

animation.CrossFade('Gangnam02');

print("UP");

}

if ( Input.GetKeyDown(KeyCode.DownArrow))

{

animation.CrossFade('Gangnam01');

print("DOWN");

}

if ( Input.GetKeyDown(KeyCode.LeftArrow))

{

animation.CrossFade('Gangnam03');

print("LEFT");

}

if ( Input.GetKeyDown(KeyCode.RightArrow))

{

animation.CrossFade('Default Take');

print("RIGHT");

}

}



위에서 작성된 스크립트를 Hierarchy 뷰의 모델에 드래그하여 포함시키고 Play 모드로 테스트할 때 방향키를 누를 때마다 다른 춤 동작이 나오는지 확인한다





LEFT 키가 눌린 경우





UP 키가 눌린 경우





DOWN 키가 눌린 경우