Unity 루트 모션 사용 가이드
이 문서는 Unity의 루트 모션 시스템을 이해하고 사용하는 방법에 대해 설명합니다. 루트 모션은 애니메이션이 캐릭터를 이동시키는 데 사용되는 기술입니다. 이 문서에서는 고정 애니메이션을 루트 모션으로 변환하는 단계와 예제를 설명합니다.
개요
애니메이션이 "고정" 상태인 경우, 캐릭터는 애니메이션이 재생되더라도 이동하지 않습니다. 루트 모션을 사용하면 애니메이션과 캐릭터 이동을 연동할 수 있습니다.
루트 모션 설정하기
다음은 고정 애니메이션을 루트 모션으로 수정하는 단계입니다.
- FBX 파일 연 후 설정 확인
FBX 파일을 Unity의 인스펙터에서 연 후,Animation탭으로 이동합니다. - Muscle Definition이 제어할 아바타로 설정되었는지 확인합니다.
- 애니메이션 클립 선택
사용할 애니메이션 클립을 선택합니다. - Loop Pose 설정이 올바른지 확인합니다.
- 애니메이션 미리보기
애니메이션 뷰어에서 미리보기를 실행하여 애니메이션의 처음과 끝이 부드럽게 정렬되었는지 확인합니다. - 속도 커브 생성
애니메이션 클립에 캐릭터의 속도를 제어할 커브를 추가합니다. Animation Import inspector에서Curves -> +를 선택하고Runspeed같은 의미 있는 이름을 붙입니다.- Animator Controller 생성
새 Animator Controller를 생성하고, 이름을RootMotionController로 설정합니다. - 원하는 애니메이션 클립을 추가하고 상태를 만듭니다 (예:
Run). - 파라미터 추가
커브와 동일한 이름인 파라미터(Runspeed)를 컨트롤러에 추가합니다. - 캐릭터 설정
Hierarchy에서Dude캐릭터를 선택하고, Animator 컴포넌트가 있는지 확인합니다. - Animator Controller를 드래그하여 적용합니다.
- 스케립트 생성
루트 모션을 제어하기 위해RootMotionScript.cs파일을 생성하고 아래 코드를 포함합니다.
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(Animator))]
public class RootMotionScript : MonoBehaviour {
void OnAnimatorMove() {
Animator animator = GetComponent<Animator>();
if (animator) {
Vector3 newPosition = transform.position;
newPosition.z += animator.GetFloat("Runspeed") * Time.deltaTime;
transform.position = newPosition;
}
}
}
- 스크립트 연결
위 코드를Dude오브젝트에 연결하면, Animator 컴포넌트는OnAnimatorMove함수를 감지하여Apply Root Motion속성을Handled by Script로 설정합니다. - 애니메이션 재생 확인
이제 플레이를 누르면Dude가 제자리에서 뛰는 모습을 확인할 수 있습니다.
활용 및 응용 예제
- 캐릭터 이동 제어: 루트 모션을 통해 자연스러운 캐릭터 움직임을 구현할 수 있습니다.
- 적응형 애니메이션: 다른 속도의 애니메이션을 사용하여 캐릭터의 상태에 따라 옵션을 조정할 수 있습니다.
- 멀티플레이어 환경: 각 플레이어의 애니메이션 및 이동을 동기화하여 보다 매끄러운 멀티플레이어 경험을 제공합니다.
결론
루트 모션은 Unity에서 캐릭터 애니메이션을 보다 자연스럽고 직관적으로 제어할 수 있는 강력한 기능입니다. 위의 단계를 통해 설정하고 활용하는 방법을 익히면, 다양한 프로젝트에 응용할 수 있습니다.