게임플레이 및 시퀀서 애니메이션

게임플레이에서의 애니메이션을 레벨 시퀀스 기반 애니메이션으로 부드럽게 블렌딩하는 방법을 설명합니다.

Windows
MacOS
Linux
추가 참고

시네마틱 시퀀스를 만들 때, 기존 게임플레이 애니메이션과 레벨 시퀀스 안에 포함된 애니메이션을 블렌딩하고 싶을 때가 있습니다. 예를 들어, 플레이가능 캐릭터가 게임플레이 도중 문으로 걸어가면 시퀀서에서 캐릭터 애니메이션을 주고 문을 여는 것이지요. 또는 삼인칭 슈팅 게임에서 캐릭터를 조종하는 플레이어가 막다른 골목에 다다르면 시네마틱 사망 시퀀스로 블렌드 인 할 수도 있습니다. 시퀀서, 블루프린트, 애니메이션 블루프린트를 조합하면 캐릭터의 게임플레이 포즈가 무엇이든 시퀀서에 슬롯 애니메이션으로 정의된 것과 블렌딩할 수 있습니다.

이 예제에서는, 캐릭터가 트리거 볼륨에 들어설 때의 게임플레이 포즈를 가지고 시퀀서 안에서 사망 애니메이션과 블렌딩하도록 하겠습니다.

1 - 시퀀스 구성

여기서는 레벨 시퀀스를 구성하고 플레이가능 캐릭터와 블렌딩 대상 애니메이션을 추가하도록 하겠습니다.

여기서는 블루프린트 삼인칭 템플릿 에 에픽 마켓플레이스에서 무료로 받을 수 있는 Animation Starter Pack 을 사용하고 있습니다.

AnimStarterPack.png

  1. 프로젝트 안에서, 레벨의 ThirdPersonCharacter 를 삭제하고 Ue4ASP_Character 를 추가한 뒤, Auto Possess Player (플레이어 자동 빙의)를 Player 0 으로 설정합니다.

    GameBlend_01.png

    옵션으로, 캡슐 컴포넌트를 선택한 뒤 Hidden in Game (게임에서 숨김) 옵션을 체크하여 캡슐 컴포넌트가 표시되지 않도록 할 수 있습니다.

    GameBlend_01b.png

  2. 메인 툴바에서, 시네마틱 버튼을 클릭한 뒤 레벨 시퀀스 추가 를 선택하고 아무 이름으로 저장합니다.

    GameBlend_02.png

  3. 레벨 시퀀스에서, Ue4ASP_CharacterAnimation Track (애니메이션 트랙)을 추가하고 Death_3 을 애니메이션으로 할당합니다.

    GameBlend_03.png

  4. 키프레임 창에서 애니메이션에 우클릭한 뒤 프로퍼티 아래 When Finished (완료 시)를 Keep State (상태 유지)로 설정합니다.

    GameBlend_03b.png

    그러면 레벨 시퀀스가 끝났을 때 애니메이션 상태가 보존됩니다. 그리고, 아래 강조된 Slot Name (슬롯 이름) 프로퍼티를 받아 적습니다.

    GameBlend_03c.png

    애니메이션 블루프린트가 스켈레탈 메시를 제어할 때, 시퀀서는 해당 블루프린트 내 슬롯의 애니메이션을 재생하며, 이는 Slot Name (슬롯 이름) 프로퍼티를 통해 제어 가능합니다. 그 후 애니메이션 블루프린트는 슬롯 애니메이션과 게임 로직으로 구동된 캐릭터의 애니메이션을 블렌딩할 수 있습니다.

다음 단계에서는 애니메이션 블루프린트와 캐릭터 블루프린트를 구성하여 게임플레이 애니메이션을 이번 단계에서 만든 사망 애니메이션으로 블렌딩할 수 있도록 하겠습니다.

2 - 애니메이션 및 캐릭터 블루프린트 구성

이번 단계에서는 애니메이션 블루프린트를 구성하여 게임플레이 포즈를 가지고 레벨 시퀀스에서 정의한 슬롯 애니메이션으로 블렌딩하도록 하겠습니다.

  1. 콘텐츠 브라우저 에서 UE4ASP_HeroTPP_AnimBlueprint 를 찾아 연 뒤 내 블루프린트 창의 애님 그래프 를 더블클릭합니다.

    GameBlend_04.png

  2. 애님 그래프 에서 기존 Locomotion 스테이트 머신을 끌어 놓고, New Save Cached Pose 를 생성한 뒤 lococache 라 합니다.

    GameBlend_05.png

  3. lococache 를 두 번 사용하여 하나는 Blend 노드의 A 핀에 연결하고, Final Animation Pose (최종 애니메이션 포즈)에 물려줍니다.

    GameBlend_06.png

  4. 다른 lococache 에서 Slot 노드를 사용하여 BlendB 핀에 연결한 뒤, Alpha 에 우클릭하고 변수로 승격 시킨 뒤 Blend Interp 라 합니다.

    GameBlend_07.png

  5. 콘텐츠 브라우저 에서 Ue4ASP_Character 블루프린트를 열고 Crouching 섹션을 아래 그래프로 대체합니다.

    GameBlend_08.png

    위에서 InputAction Crouch 노드를 C 키보드 이벤트와 Flip Flop 노드로 대체하여 웅크리기 상태를 토글합니다.

    이 블루프린트는 원래 다른 프로젝트용으로 만들어져 있어 웅크리기용 입력 키가 설정되어 있었으나, 우리 템플릿 프로젝트는 그렇지 않습니다. InputAction Crouch 를 표준 C 키보드 이벤트로 대체하여, 블루프린트 경고 메시지를 없애고 C 키를 눌러 웅크린 상태와 웅크리지 않은 상태를 토글하도록 합니다.

  6. Float 변수를 새로 만들고 DefaultSlotInterp 라 한 뒤 Instance Editable (인스턴스 편집가능)과 Expose to Cinematics (시네마틱에 노출) 옵션을 True 로 설정합니다.

    GameBlend_09.png

    이 변수를 시퀀서에서 블렌딩에 사용하여 값을 애니메이션 블루프린트 변수 Blend Interp 에 전달, 실제 블렌딩을 처리하도록 합니다.

  7. 함수를 새로 만들어 SetDefaultSlotInterp 라 하고 디테일 패널에서 입력 을 추가한 뒤 유형은 Float, 이름은 Interp 라 합니다.

    GameBlend_10.png

    Set (Property Value Name) 라는 함수를 만드는 것으로 연관된 프로퍼티 값이 바뀔 때마다 시퀀서가 호출하는 프록시 함수를 만들었습니다. 이 함수는 프로퍼티 값이 바뀔 때만 호출되므로 Event Tick 또는 Custom EventTimeline 을 통해 DefaultSlotInterp 프로퍼티 값의 변화를 반영하는 것보다 효율적입니다.

  8. 컴포넌트 창에서 Mesh 를 끌어 놓고 Get Anim Instance 를 사용하여 Cast to UE4ASP_HeroTPP_AnimBlueprint 합니다.

    GameBlend_11.png

  9. As UE4ASP Hero TPP Anim Blueprint 에서 Set Blend Interp 를 사용하여 Interp 값을 Blend Interp 에 전달합니다.

    GameBlend_12.png

    시퀀서를 통해 DefaultSlotInterp 값이 바뀔 때마다, SetDefaultSlotInterp 프록시 함수가 호출되며 플로트 값이 애니메이션 블루프린트의 Blend Interp 값을 통과합니다. 여기서 포즈 블렌딩에 영향을 줍니다.

다음 단계에서는 레벨 시퀀스에 Default Slot Interp 프로퍼티를 추가하여 애니메이션 블루프린트에서 Blend Interp 를 제어할 수 있도록 하겠습니다. 또 레벨에 트리거 박스를 추가하여 레벨 시퀀스를 발동시켜 플레이어가 트리거 박스 볼륨에 들어서면 재생시키도록 하겠습니다.

3 - 시네마틱 노출 변수 사용

여기서는 애니메이션 블루프린트의 interp 에 물려줄 Default Slot Interp 플로트 변수를 추가, 게임플레이 포즈를 슬롯 애니메이션으로 블렌딩하는 시점을 결정하도록 하겠습니다. 또 레벨에 트리거 박스를 추가하여 다음단계에서 이를 사용하여 플레이어가 볼륨에 들어서면 레벨 시퀀스를 재생시킬 수 있도록 하겠습니다.

  1. Ue4ASP_Character 에 대한 레벨 시퀀스 안에서, Track (트랙) 버튼을 클릭하고 새로운 Default Slot Interp 프로퍼티를 할당합니다.

    GameBlend_13.png

  2. 타임라인을 문질러 25 (또는 원하는) 프레임 앞으로 이동한 뒤 Default Slot Interp 에 대한 키를 추가하고 값은 1.0 으로 합니다.

    GameBlend_14.png

  3. 메인 레벨 에디터의 모드 패널에서 Triggerbox 를 끌어 레벨에 놓고 위치와 크기를 원하는 대로 조절합니다.

    GameBlend_15.png

    옵션으로 Actor Hidden In Game (게임에서 액터 숨김)을 false 설정하면 재생 도중 트리거 볼륨을 확인할 수 있습니다.

다음 마지막 단계에서는, 트리거 박스 볼륨에 들어서면 레벨 시퀀스를 재생하는 레벨 블루프린트를 구성하겠습니다.

4 - 시퀀스 재생 발동 및 블렌드

최종 단계에서는 구성을 테스트하기 전, 레벨 블루프린트를 사용하여 플레이어가 트리거 박으세 들어서면 레벨 시퀀스를 가동하도록 합니다. 시퀀스가 시작되면, 시네마틱에 노출된 DefaultSlotInterp 가 변경되어 보간 값 업데이트 프로세스가 시작됩니다. 여기서 애니메이션 블루프린트에게 게임플레이 애니메이션에서 슬롯 애니메이션으로 블렌딩을 시작하라고 합니다.

  1. Triggerbox 를 선택한 채 메인 툴바에서 블루프린트 - 레벨 블루프린트 열기 를 클릭합니다.

    GameBlend_16.png

  2. 그래프에 우클릭한 뒤 트리거 박스에 대한 Collision (콜리전) 아래 Add On Actor Begin Overlap (액터 겹침 시작 시)를 선택합니다.

    GameBlend_17.png

  3. 레벨 뷰포트로 돌아와 레벨 시퀀스를 선택한 뒤, 레벨 블루프린트 에서 우클릭하고 레벨 시퀀스로의 레퍼런스를 추가합니다.

    GameBlend_18.png

  4. 레벨 시퀀스에서 Get Sequence Player 를 사용하여 끌어 놓고 Play 노드를 사용하여 아래와 같이 연결합니다.

    GameBlend_19.png

  5. 컴파일, 저장플레이 를 클릭하여 에디터에서 플레이합니다.

최종 결과

캐릭터가 트리거 볼륨에 들어서면, 현재 애니메이션 상태와 관계 없이 게임플레이 포즈에서 시퀀서에 정의된 사망 포즈로 블렌딩을 시작합니다.

여기서 한 단계 더 나아가 시퀀스에 카메라를 추가하고 시퀀스의 사망 애니메이션 시작 지점을 전환하여 블렌딩을 개선시킬 수 있습니다.

위 예제에서, 플레이어가 걷기, 달리기, 웅크려 걷기, 점프를 통해 트리거에 들어서면 각각의 경우 사망 애니메이션으로 블렌딩이 이루어집니다.

Select Skin
Light
Dark

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼