# 전체내용 둘러보기(Overview) – Link
# 메카님 애니메이션(Mecanim Animation)
메카님은 Unity버전이 4.0으로 업그레이드 되면서 나온 기술로, 애니메이션 미들웨어 엔진이다. 기존의 애니메이션에서 처리하기 어려웠던 유연한 애니메이션을 처리할수 있게 해준다. 메카님은 리타켓팅 기능을 제공하여 인체형(휴머노이드) 모델의 필수 본(Bone) 구조와 일치하면 다른 모델의 애니메이션이나 모션 캡쳐 애니메이션을 바로 적용할 수 있다. 따라서 타 모델에 적용한 애니메이션을 재사용할 수 있고 모델에 고품질의 모션 캡쳐 동작을 적용하여 품질을 높일수 있다는 장점이 있다. 메카님 애니메이션에서 인간형이 아닌 모델링 파일은 제너릭 타입으로 동작시키고, 인간형은 휴머노이드형으로 애니메이션을 동작시킨다.
# 메카님 애니메이션 실습1(휴머노이드 형태의 애니메이션 기본 구현)
a) 프로젝트 생성후 씬 추가
b) Button UI 4개를 추가후 각각 “btnIdle”, “btnWalk”, “btnRun”, “btnJump”로 이름을 변경
c) 애셋스토어에서 “Space Robot Kyle”을 검색하여 다운로드
d) 다운로드 완료시 “Robot Kyle”이라는 이름으로 디렉토리가 생성되는데 이것을 “Resources”디렉토리 밑으로 이동
e) “Resource” > “Model” > “Robot Kyle” 모델을 선택하고 “Rig”탭을 선택하여 “Animation Type”을 Legacy에서 Humanoid로 변경후 “Apply”버튼 누름(아바타 에셋이 생성, “Robot KyleAvatar”)
f) Model밑에 있는 “Robot Kyle”모델을 드래그 앤 드롭하여 “Hierarchy”로 추가한다.
g) “Hierarchy”에 추가된 “Robot Kyle”을 “Project”뷰의 “Prefabs”디렉토리 밑으로 드래그 앤 드롭하여 추가하면 프리팹으로 추가된다.(모델링 파일은 반드시 프리팹으로 만들어서 사용해야 추가적인 부분이 업데이트 될 경우 다른 Scene에 모두 자동적으로 반영이 된다.
h) “Project”뷰에서 “Prefabs”디렉토리밑의 “Robot Kyle”의 Prefab을 선택한후 “Inspector”뷰를 보면 Animator컴포넌트를 볼 수 있다. 메카님 애니메이션은 “Animator”컴포넌트를 사용한다. 메카님 애니메이션을 구성하려면 애니메이션 컨트롤러를 만들고 “Inspector”뷰의 Animator탭의”Controller”에 연결해야 한다.
i) 유니티에서 제공하는 기본적인 휴머노이드 타입의 애니메이션을 적용한다. 메뉴에서 “Assets” > “Import Package” > “Character”를 선택
j) Import Unity Package 창이 나오면 None을 눌러 모두 해제하고 “ThirdPersonCharacter”아래에 있는 Animation만 체크하여 Import처리한다.
k) 추가가 완료될 경우 “Project”뷰에서 “Standard Assets” > “Character” 디렉토리 밑에 추가되는 것을 확인할 수 있다.
l) “Controller”디렉토리 밑에 “kyle_anim”이라는 애니메이션 컨트롤러를 추가(메뉴에서 “Assets” > “Create” > “Animator Controller”)
j) “kyle_anim”을 더블클릭하면 “Animator”뷰가 오픈된다.
k) csMecanim1이라는 스크립트를 아래와 같이 생성한후 “Hierarchy”뷰의 “Robot Kyle”게임 객체의 스크립트 컴포넌트로 추가한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class csMecanim1 : MonoBehaviour { Animator anim; // Use this for initialization void Start () { anim = GetComponent<Animator>(); } // Update is called once per frame void Update () { } public void doIlde() { anim.SetInteger("aniStep", 0); } public void doWalk() { anim.SetInteger("aniStep", 1); } public void doRun() { anim.SetInteger("aniStep", 2); } public void doJump() { //anim.SetInteger("aniStep", 3); // Jump는 연속동작이므로 Coroutine으로 호출 StartCoroutine("coJump"); } IEnumerator coJump() { anim.SetInteger("aniStep", 3); // Jump애니메이션 호출 yield return new WaitForSeconds(0.8f); // 0.8초 이후 Idle애니메이션 호출 anim.SetInteger("aniStep", 0); } } |
l) btnIdle, btnWalk, btnRun, btnJump의 OnClick함수로 “Robot Kyle”에 스크립트 컴포넌트로 연결된 함수를 연동한다.
m) “Hierarchy”뷰에서 “Robot Kyle” 게임 객체를 선택하고 “Inspector”뷰에서 Animator컴포넌트의 “Apply Root Motion”옆에 있는 체크박스를 해제