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 커뮤니티를 통해 질문할 수 있습니다.

Read more

Unity 매뉴얼 스크립팅 API 해설

이 문서는 Unity의 매뉴얼 스크립팅 API에 대한 간단한 해설과 활용 예제들을 포함하고 있습니다. Unity는 게임 개발 플랫폼으로, 스크립팅 API를 통해 게임의 다양한 기능을 제어하고 수정할 수 있습니다. 버전 Unity 스크립팅 API는 여러 버전으로 제공됩니다. 주의 깊게 선택하여 사용하는 것이 중요합니다. 버전 설명 2023.2 최신 기능 및 버그 수정이 추가됨

By 이재협/실장/시스템개발실/PHYSIA

Unity 매뉴얼 스크립팅 API 설명서 해설

이 문서는 Unity의 매뉴얼 스크립팅 API에 대한 정보를 제공하며, 버전에 따라 다르게 적용되는 내용들을 설명합니다. 본 문서에서는 주요 내용을 간단히 정리하고 활용 가능 예제를 통해 이해를 돕겠습니다. 기본 개념 Unity에서 스크립팅 API는 게임 오브젝트와 그들의 동작을 제어하기 위한 강력한 도구입니다. 이를 통해 게임의 로직, 물리 엔진, 애니메이션 및 사용자 인터페이스를

By 이재협/실장/시스템개발실/PHYSIA

Unity 스크립팅 API 가이드

이 문서는 Unity의 스크립팅 API에 대해 설명합니다. Unity는 게임 개발을 위한 인기 있는 엔진으로, 강력한 스크립팅 기능을 제공합니다. 이 가이드는 Unity에서 스크립트를 작성하고 사용하는 방법을 이해하는 데 도움을 드립니다. 목차 * Unity 스크립팅 소개 * 기본 스크립트 생성 * 스크립트 사용 예제 * 응용 프로그램 * 참고 자료 Unity 스크립팅 소개 Unity는 C# 프로그래밍 언어를

By 이재협/실장/시스템개발실/PHYSIA