[Unity] Tween Engine과 DOTween

Filed under tutorials, unity | Comments Off

(DOTween)

일반적으로 캐릭터의 움직임과 같이 복잡한 애니메이션은 3ds Max와 같은 전문 애니메이션 소프트웨어에서 제작해서 유니티로 불러온다. 인간형 캐릭터의 경우, 최상위 노드( node)에서 말단의 손가락이나 발가락에 이르기까지의 복잡한 계층 구조를 가진다. 이런 대상의 움직임을 굳이 유니티 내부에서 제작하는 것은 바람직한 선택이 아니다. 그런데 게임에 사용되는 애니메이션이 모두 캐릭터처럼 복잡하지는 않다. 예를 들어, 퀘스트를 가진 NPC 머리 위에서 빙글빙글 돌아가는 물음표를 생각해 본다. 이 물음표의 움직임을 처리할 수 있는 몇 가지 방법이 있다.

  • 3ds Max같은 외부 소프트웨어에서 애니메이션을 만들어 불러온다.
  • 유니티에서 Anim 애셋을 만들고, Animation 창을 이용해서 애니메이션을 만든다.
  • 스크립트에서 Transform과 Time 관련 함수와 변수를 이용해서 애니메이션을 재현한다.
  • 물리를 이용한다(Rigidbody + ConstantForce).

위 방법은 각각 다음과 같은 장단점을 지닌다.

  • 3ds Max에서 애니메이션을 만들어 불러온다.
    • 장점 : 정교한 애니메이션을 원하는대로 쉽고 빠르게 만들 수 있다.
    • 단점 : 애니메이션을 수정할 때마다 3ds Max로 가서 다시 애니메이션을 내보내야 한다. 물론 3ds Max와 같은 소프트웨어가 있어야 가능한 얘기다.
  • 유니티에서 Anim 애셋을 만들고, Animation 창을 이용해서 애니메이션을 만든다.
    • 장점 : 유니티에서 모든 애니메이션을 처리한다.
    • 단점 : 전문 저작도구가 아닌 관계로 사용이 불편하다. 한편 3ds Max를 이용한 방식과 마찬가지로 anim 애셋을 만든다. 따라서  anim 애셋을 재생하기 위해 animator나 animation 같은 컴포넌트를 제어해야  한다.
  • 스크립트에서 Transform과 Time 관련 함수와 변수를 이용해서 애니메이션을 재현한다.
    • 장점 : 별도의 애셋이나 컴포넌트 없이, 기존 코드를 이용해서 애니메이션을 처리할 수 있다.
    • 단점 : 키 애니메이션에서 간단한 처리할 수 있는 애니메이션이 코드에서는 이외로 복잡하고 어려운 경우가 많다. 또한 정교한 ‘손맛’을 살리기도 어렵다.
  • 물리를 이용한다 (Rigidbody + ConstantForce).
    • 장점 : 키 애니메이션 없이 어느 정도 자연스러운 움직임을 만들 수 있다.
    • 단점 : 물리적 사실성을 넘어선, 손맛을 움직임에 담기에는 많은 제약이 따른다. 또한 애니메이션을 사용하는 대상이 많아지면, 물리 연산이 부담이 될 수 있다.

 

여기까지만 보면 각 방식이 나름 경합을 벌인다고 할 수 있다. 그런데 문제가 남아있다. 전통적인 개념의 애니메이션, 즉 대상의 움직임 외에도 게임에는 수 많은 애니메이션이 존재한다는 점이다. 위에서 NPC 머리 위의 물음표를 예를 들었다. 이 물음표가 단순히 회전하는 게 아니라 주기적으로 깜빡인다고 해보자. 재질에서 색상 또는 색상의 강도를 제어하는 값이 시간에 따라서 변하는 것이다.

게임에서는 이러한 움직임이 아닌 값의 변화 혹은 보간(interpolation)도 애니메이션이라고 생각할 수 있다. 라이트가 깜박이거나, 물을 표현하기 위해 텍스처의 UV Offset 값이 변하거나, 카메라의 Background Color가 변하거나 하는 것들이 다 이런 확장된 개념의 애니메이션에 속한다. 애니메이션의 개념을 이렇게 확장하면, 게임에는 정말로 많은 애니메이션이 필요하다고 할 수 있다. 이런 류의 애니메이션에서는 위에서 설명한 3ds Max 같은 외부 저작 도구와 물리를 이용하는 방식이 사실상 사용될 수 없다.

결국 게임에서 수많은 애니메이션은 각각의 장단점을 지닌 애니메이션 에디터가 아니면 스크립트로 처리해야 한다(AnimationCurve 클래스를 이용하면 스크립트를 통해 커브 에디터 방식의 인터페이스를 제공할 수도 있다). 바로 이런 상황에서 트윈 엔진(Tween Engine)이 큰 역할을 한다.

기본적으로 유니티에서 트윈 엔진은  게임오브젝트의 특정 컴포넌트가 지닌 값을 일정 시간 동안 다른 값으로 바꿔주는 역할을 한다. 이 과정에서 다양한 부가적인 기능을 제공하며 개발에 큰 도움을 준다. 대표적인 트윈 엔진이  iTween이다. 트윈 엔진은 스크립트 기반이지만, 접근성을 높이기 위해 iTween Visual Editor 같이 GUI를 통한 제어도 지원하는 게 보통이다.

 

 

iTween의 편리함과 효과가 널리 입증되며, 그 단점을 보완하거나 새로운 기능을 앞세운 LeanTween, HOTween 같은 엔진 들이 속속 등장했다. 이번 포스트에서 소개할 트윈 엔진은 바로 그중 하나인 DOTween이다. DOTween은 HOTWeen의 후속 버전인데, 스스로 밝히는 강점 중 하나가 성능이다.  아래 도표는 연산 부담이 극한적으로 큰 상황에서 다른 대표적 트윈 엔진과 DOTween의 성능상의 비교 결과를 보여준다. 제작자의 사이트에 가면 실제 테스트 프로젝트를 받아서 확인할 수 있다.

 

dotween_comp

다음 포스트부터는 DOTween의 실제 사용법을 설명하고, 다양한 활용을 살펴본다.

Comments are closed.