Unity 애니메이션 스크립팅 가이드
Unity의 애니메이션 시스템은 애니메이션화된 캐릭터를 만들 수 있는 강력한 도구입니다. 아래에서는 애니메이션 블렌딩, 애니메이션 레이어, 애니메이션 믹싱 등 다양한 개념과 그 활용을 설명합니다.
애니메이션 시스템 개요
Unity의 애니메이션 시스템은 다음과 같은 기능을 지원합니다: - 애니메이션 블렌딩 - 애니메이션 믹싱 - 애니메이션 레이어 - 캐릭터 애니메이션 재생 제어
애니메이션화된 캐릭터를 만들기 위해, 캐릭터의 움직임에 따라 애니메이션을 전환하는 것이 중요합니다. 자세한 내용은 캐릭터 컨트롤러 페이지를 참고하십시오.
애니메이션 블렌딩
애니메이션 블렌딩은 서로 다른 애니메이션을 부드럽게 전환할 수 있도록 합니다. 예를 들어, 캐릭터가 대기 애니메이션에서 걷기 애니메이션으로 전환할 때 블렌딩을 사용합니다. 기본적인 코드는 아래와 같습니다.
function Update () {
if (Input.GetAxis("Vertical") > 0.2)
animation.CrossFade("walk");
else
animation.CrossFade("idle");
}
위 코드를 사용하려면, Unity의 에셋 메뉴에서 새 자바스크립트 파일을 생성하고 해당 코드를 붙여넣기 한 후, 애니메이션이 있는 GameObject에 드래그하십시오.
애니메이션 레이어
애니메이션 레이어는 여러 애니메이션을 그룹화하여 우선순위를 설정할 수 있는 개념입니다. 아래는 애니메이션 레이어를 사용하는 예제입니다.
function Start () {
animation.wrapMode = WrapMode.Loop;
animation["shoot"].wrapMode = WrapMode.Once;
animation["shoot"].layer = 1;
animation.Stop();
}
function Update () {
if (Mathf.Abs(Input.GetAxis("Vertical")) > 0.1)
animation.CrossFade("walk");
else
animation.CrossFade("idle");
if (Input.GetButtonDown("Fire1"))
animation.CrossFade("shoot");
}
여기서 각 애니메이션은 레이어를 통해 서로에게 영향을 미치지 않도록 설정됩니다.
애니메이션 믹싱
애니메이션 믹싱은 특정 애니메이션이 특정 신체 부위에만 적용되도록 하여 애니메이션의 수를 줄일 수 있습니다. 이를 통해 여러 애니메이션을 조합할 수 있습니다. 예를 들어 손을 흔드는 애니메이션을 대기나 걷기 애니메이션과 동시에 재생할 수 있습니다.
var shoulder : Transform;
animation["wave_hand"].AddMixingTransform(shoulder);
또한 경로를 사용한 믹싱 예제는 아래와 같습니다.
function Start () {
var mixTransform : Transform = transform.Find("root/upper_body/left_shoulder");
animation["wave_hand"].AddMixingTransform(mixTransform);
}
애디티브 애니메이션
애디티브 애니메이션을 활용하면 현재 재생 중인 애니메이션 위에 다른 효과를 덮어씌울 수 있습니다. 아래는 왼쪽 또는 오른쪽으로 기울이는 애니메이션을 구현하는 예제입니다.
private var leanLeft : AnimationState;
private var leanRight : AnimationState;
function Start () {
leanLeft = animation["leanLeft"];
leanRight = animation["leanRight"];
leanLeft.layer = 10;
leanRight.layer = 10;
leanLeft.blendMode = AnimationBlendMode.Additive;
leanRight.blendMode = AnimationBlendMode.Additive;
leanLeft.wrapMode = WrapMode.ClampForever;
leanRight.wrapMode = WrapMode.ClampForever;
leanRight.enabled = true;
leanLeft.enabled = true;
leanRight.weight = 1.0;
leanLeft.weight = 1.0;
animation["walk"].wrapMode = WrapMode.Loop;
animation.Play("walk");
}
function Update () {
var lean = Input.GetAxis("Horizontal");
leanLeft.normalizedTime = -lean;
leanRight.normalizedTime = lean;
}
애니메이션 재생 및 샘플링
Unity는 가변 프레임 속도에서 애니메이션을 샘플링해야 하므로, 애니메이션이 정확한 프레임에서 재생될 수 없는 경우가 많습니다. 이를 해결하기 위해 애니메이션 이벤트를 사용하여 특정 프레임에서 코드를 실행하는 것이 좋습니다.
결론
이 문서를 통해 Unity의 애니메이션 시스템의 기본 개념과 활용 방법에 대해 알아보았습니다. 각 기능을 잘 활용하는 것이 게임 개발에 있어 중요한 요소입니다. 궁금한 점이 있다면 공식 문서를 참고하거나 Unity 커뮤니티를 통해 질문할 수 있습니다.