카메라 에니메이션

Camera 에니메이션 구현 방식에 대해 알아보자.

Camera Animation 타입을 이용

UnrealEngine3 의 Matinee 기능을 이용하여 키 프레임을 잡고 그것을 활용하는 방식의 에니메이션이다. Matinee 로 만들어진 카메라 에니메이션은 엔진 내부적으로 Camera Animation 이라는 리소스타입으로 분류된다.

이 방식은 기획자나 그래퍼가 에디터에서 원하는대로 키를 잡고 즉시 확인해 볼 수 있다는 장점이 있다. 만들어진 Camera Animation 은 다음과 같은 방식으로 활용이 가능하다.

AnimNodeSequence 에 설정

AnimTree 에서 사용되는 AnimNodeSequence 에 Camera Animation 을 설정하는 방식이다. 해당 AnimNodeSequence 가 재생될 때에만 Camera Animation 이 재생되도록 할 수 있으며 이때에는 반드시 Loop 에니메이션만 가능하다.

AnimNodeSequence 의 속성에서 다음의 값을 채워넣어야 한다.

  • Playing : 체크
  • Loop Camera Anim : 체크
  • Camera Anim : Matinee 카메라 설정

주의해야 할 점은 Skip Tick When Zero Weight 를 체크하지 말아야 한다는 점이다. 이것이 체크되면 UAnimNodeSequence::TickAnim 에서 종료신호를 받지 못하게 되고 Camera Animation 은 영원히 지속된다. (보통 이걸 원치는 않을 것이다.)

관련 코드를 보면 다음과 같다.

// UnAnimPlay.cpp
void UAnimNodeSequence::TickAnim( FLOAT DeltaSeconds, FLOAT TotalWeight )
{
    ...
 
    if ( ActiveCameraAnimInstance != NULL )
    {
        ACamera* const Cam = GetPlayerCamera();
        if ( Cam && bPlaying && bRelevant )
        {
            ...
        }
        else
        {
            StopCameraAnim();  // 이 부분에서 Camera Animation 종료, 만약 Skip Tick When Zero Weight 가 체크되어 있다면 이부분으로 들어오지 않게 된다.
        }
    }
    else if ( CameraAnim && bPlaying && bLoopCameraAnim && bRelevant )
    {
        StartCameraAnim();     // 이 부분에서 Camera Animation 시작
    }
}

SkeletalMesh Animation 을 이용