3D 게임에서는 다양한 애니메이션을 제공합니다. 액터를 이동하거나 회전하는 것부터 캐릭터가 달리고 점프하는 것까지 다양한 애니메이션 기능을 제공합니다. 이제 애니메이션을 배워봅시다.
시퀀서로 움직이기
3D 모델은 그 자체로 움직일 수 없습니다. 생성된 레벨을 플레이 해도 그저 화면에 그려지기만 할 뿐입니다. 여기에 움직임을 부여하는 것이 애니메이션 입니다. 언리얼엔진에서는 다양한 움직임을 부여 할 수 있는 기능이 여러가지가 있습니다.
언리얼 엔진에서 애니메이션을 구현하는 주요 방법
언리얼 엔진에서는 다음과 같은 방법으로 애니메이션을 구현할 수 있습니다:
•
시퀀서(Sequencer): 영화적인 장면이나 컷신을 만들기 위한 도구로, 카메라 움직임, 이펙트, 사운드 등을 시간순으로 배치할 수 있습니다.
•
애니메이션 블루프린트(Animation Blueprint): 캐릭터의 상태에 따라 다른 애니메이션을 재생할 수 있도록 로직을 구성하는 시스템입니다.
•
스켈레탈 메시 애니메이션(Skeletal Mesh Animation): 캐릭터나 생물체의 뼈대를 기반으로 한 애니메이션으로, 걷기, 달리기, 점프 등의 동작을 구현합니다.
•
모션 워핑(Motion Warping): 기존 애니메이션을 실시간으로 조정하여 환경에 맞게 자연스럽게 적용시키는 기술입니다.
•
컨트롤 리그(Control Rig): 고급 애니메이션 제어 시스템으로, 더 세밀한 캐릭터 움직임을 구현할 수 있습니다.
•
타임라인(Timeline): 블루프린트 내에서 간단한 애니메이션을 구현할 수 있는 도구로, 위치, 회전, 크기 등의 변화를 시간에 따라 조절할 수 있습니다.
각 방식은 목적과 복잡성에 따라 적절히 선택하여 사용할 수 있습니다. 시퀀서는 주로 영화적인 연출에, 애니메이션 블루프린트는 게임플레이 중 캐릭터 애니메이션에 주로 사용됩니다.
액터를 움직이는 시퀀서
액터는 그 자체에 다양한 정보가 있고, 이를 기반으로 표시가 이루어집니다. 여기서 액터가 화면에 표시되는 정보로는 위치, 방향, 크기 등이 있습니다. 그리고 이러한 설정 정보의 값을 시간에 따라 변화시켜 액터를 움직여 보겠습니다.
애니메이션 테스트용 레벨을 새로 만들어 봅시다.
그리고 큐브 액터를 하나 추가 해 줍니다.
이제 시퀀서를 만들어 봅시다. 시퀀서에는 몇 가지 종류가 있는데, 이번에 만들 것은 레벨 시퀀서 입니다. 레벨시퀀서는 레벨에서 작동하는 제일 기본적인 시퀀서입니다.
레벨 시퀀서(Level Sequencer): 언리얼 엔진의 시네마틱 툴로, 영화적인 시퀀스나 게임 내 컷신을 제작할 수 있는 타임라인 기반 도구입니다. 카메라 움직임, 액터 애니메이션, 사운드, 이펙트 등을 시간에 따라 조절할 수 있습니다.
추가하게되면 아래 그림과 같은 시퀀서 에디터가 열립니다.
시퀀서 인터페이스 구성 요소
시퀀서 에디터는 다음과 같은 주요 구성 요소로 이루어져 있습니다:
•
툴바(Toolbar): 시퀀서 상단에 위치한 도구 모음으로, 저장, 재생, 정지, 추가 등의 기본 기능을 빠르게 접근할 수 있는 버튼들이 있습니다. 또한 시퀀서 설정과 보기 옵션을 조정할 수 있는 버튼들도 포함되어 있습니다.
•
트랙 목록(Track List): 시퀀서 왼쪽에 위치하며, 시퀀스에 포함된 모든 오브젝트와 그에 연결된 트랙을 계층 구조로 보여줍니다. 여기서 카메라, 액터, 사운드 등의 요소를 추가하고 관리할 수 있습니다.
•
트랙 타임라인(Track Timeline): 시퀀서의 주요 작업 영역으로, 각 트랙의 키프레임과 애니메이션 커브를 시간에 따라 시각적으로 보여줍니다. 여기서 드래그하여 키프레임을 이동시키거나, 커브를 조정하여 애니메이션의 속도와 흐름을 제어할 수 있습니다.
•
애니메이션 조작 버튼(Animation Control Buttons): 주로 시퀀서 하단이나 툴바에 위치하며, 재생(Play), 정지(Stop), 되감기(Rewind), 한 프레임씩 이동(Step Forward/Backward) 등의 기능을 제공하여 애니메이션을 미리 보고 테스트할 수 있게 합니다.
이러한 구성 요소들을 활용하여 시간에 따른 액터의 변형(Transform), 속성 변경, 이벤트 트리거 등을 설정할 수 있습니다. 시퀀서는 단순한 오브젝트 움직임부터 복잡한 카메라 워크, 다중 액터 간의 상호작용까지 다양한 애니메이션 시퀀스를 만들 수 있는 강력한 도구입니다.
트랙에 Actor를 추가해줍니다.
그리고 큐브를 펼치면 액터의 위치, 회전, 스케일링 값을 조정 할 수 있는 항목들이 나옵니다.
당장 이 항목들을 편집하면 설정 값이 변화 하는 애니메이션을 만 들 수 있습니다.
커브 에디터를 열어 봅시다. 다음 그림과 같이 생긴 버튼 입니다.
트랜스폼 → Location → X 를 클릭하고 커브 에디터를 열어봅시다.
시작 위치에 key 를 추가합니다.
끝나는 위치, 중간에도 에도 Key 를 추가해줍니다.
중앙의 키값을 드래그하여 변경해봅니다.
키 좌우로 컨트롤 포인트가 있는데 이 원을 클릭한후 돌려주면 기울기값에 변화를 줄 수 있습니다.
그리고 키값의 범위도 0~500으로 바꿔줍니다.
이제 커브에디터를 닫고 다시 시퀀서로 돌아갑니다.
녹색선은 재생 범위의 시작지점이고 빨간 선은 끝나는 지점입니다. 각각 선들을 움직여서 재생의 범위를 변경도 가능합니다. 최종적으로 x값으 변화량으로 시퀀서 애니메이션을 재생이 됩니다.
실제 게임내에서 재생 시키려면 시퀀서에다가 Auto Play 버튼을 활성화 해주면 됩니다.
그외에 다양한 회전이나 스케일 같은것도 변경해서 한번 실습해보세요!
머테리얼 애니메이션
시퀀서를 이용하면 여러가지 값들을 변화시켜줄수 있는 모든 것들에 값변화를 줄수 있습니다.
머테리얼도 대표적인 예시입니다. 머터리얼 파라미터 컬렉션을 사용 해보겠습니다. 시퀀서와 함께
일단 이전 수업에 만들어 두었던 메테리얼로 교체해주세요. 또는 새로이 만들어서 진행해도 됩니다.
그리고 머테리얼 파라미터 컬렉션도 추가합니다.
그리고 해당 메테리얼 그래프를 클릭하여 열어봅시다.
컬렉션 파라미터 노드를 추가해봅니다.
컬렉션 파라미터에서 아까 생성한 메테리얼 파라미터 컬렉션을 선택해줍니다.
그리고 메테리얼 파라미터 컬렉션에도 다음과 같이 param값을 2개 추가해주겠습니다.
그리고 패널을 복제한뒤 각각 param1 , param2 로 파라미터 네임을 설정해주세요.
그리고 그래프노드를 다음과같이 연결해줍니다.
기존에 X,Y에 연결되어 있는 노드는 자동으로 분리됩니다.
이제 시퀀서로 해당 파라미터를 조작해 보겠습니다. 시퀀서로 다시 돌아와서 +Add 버튼을 클릭하면 머테리얼 컬렉션 트랙에서 아까 만들어둔 파라미터 컬렉션을 선택합니다. 그리고 메테리얼 파라미터에서 + 버튼을 클릭하여 Param1, Param2를 추가해줍니다.
각각 키를 추가해주고 다음과 같이 수정해줍시다.
그리고 시퀀서를 재생해주거나 레벨을 재생하면 다음과 같이 메테리얼 출력에 필요한 색도 변경이 되는것으 확인 할 수 있습니다.
추가적으로 카메라 액터도 추가하여 카메라 액터도 시퀀스 애니메이션을 넣어보세요.
아마 카메라를 추가해서 자동 플레이어 활성화 탭에서 player0으로 세팅한후 재생을 시켜보면 동그란 구체가 보일 것입니다.
폰(Pawn)과 카메라 액터의 관계
방금 봤던 수상한 구체는 사실 '폰(Pawn)'이라고 불리는 언리얼 엔진의 핵심 클래스입니다. 폰은 플레이어나 AI가 제어할 수 있는 모든 액터의 기본 클래스로, 게임 내에서 물리적 표현을 가집니다.
폰에 대한 주요 특징:
•
게임 내 표현체: 폰은 게임 세계에서 플레이어의 물리적 표현을 담당하는 객체입니다.
•
컨트롤러와의 연결: 플레이어 컨트롤러(PlayerController)나 AI 컨트롤러가 폰을 제어합니다.
•
기본 입력 처리: 키보드, 마우스 등의 입력을 받아 게임 내 동작으로 변환합니다.
카메라 액터와 폰의 관계:
•
카메라 액터가 폰이 되는 이유: 시퀀서에서 카메라를 Player 0으로 설정하면, 게임 실행 시 해당 카메라가 자동으로 폰으로 지정됩니다. 이렇게 하면 플레이어의 시점이 해당 카메라의 위치와 방향으로 설정됩니다.
•
자동 생성 메커니즘: 게임이 시작될 때 플레이어 컨트롤러는 자동으로 폰을 생성(또는 기존 폰을 소유)하여 플레이어가 게임 세계와 상호작용할 수 있게 합니다.
•
시점 제어: 카메라 액터가 폰이 되면, 플레이어는 해당 카메라의 시점으로 게임 월드를 경험하게 됩니다.
실제 게임 플레이 과정에서의 동작:
1.
게임이 시작되면 플레이어 컨트롤러가 생성됩니다.
2.
플레이어 컨트롤러는 폰을 찾거나 생성하여 '소유(Possess)'합니다.
3.
시퀀서에서 카메라를 Player 0으로 설정했다면, 해당 카메라가 플레이어의 폰이 됩니다.
4.
플레이어는 이제 해당 카메라 시점으로 레벨을 보게 됩니다.
5.
시퀀서 애니메이션이 있다면, 카메라(폰)은 애니메이션에 따라 움직이며 플레이어에게 해당 시점을 제공합니다.
이러한 시스템 덕분에 우리는 레벨에서 카메라를 통해 게임 세계를 탐색하고, 시퀀서를 통해 카메라 움직임을 제어함으로써 다양한 시네마틱 경험을 만들 수 있습니다.
따로 카메라 액터를 선택하지 않았기에 자동으로 카메라액터 폰을 생성하여 레벨에 편입시켜 동작가능하게 했던것 입니다.
그럼 폰은 어디에서 관리 될까요?
게임모드와 월드 세팅
폰은 게임모드에서 관리됩니다. 게임모드는 게임에 사용 되는 중요 기능들을 설정하기 위한 것으로, 폰등을 커스터마이징 할 수 있습니다.
게임모드(Game Mode)는 언리얼 엔진에서 게임의 기본 규칙과 동작을 정의하는 핵심 클래스입니다. 게임모드는 게임이 시작될 때 어떤 폰을 사용할지, 플레이어가 죽었을 때 어떻게 처리할지 등의 기본적인 게임 로직을 관리합니다.
게임모드의 주요 기능
•
기본 폰 클래스 설정: 플레이어가 게임에 입장할 때 어떤 폰을 사용할지 결정합니다.
•
플레이어 컨트롤러 클래스 설정: 플레이어 입력을 처리할 컨트롤러 클래스를 지정합니다.
•
게임 상태 관리: 점수, 게임 시간 등의 게임 상태 정보를 관리합니다.
•
플레이어 시작 위치 결정: 플레이어 스타트 포인트를 통해 플레이어의 시작 위치를 결정합니다.
•
매치 시작/종료 조건: 게임이나 라운드가 시작되고 끝나는 조건을 정의합니다.
게임모드는 월드 세팅에서 설정할 수 있으며, 레벨별로 다른 게임모드를 지정할 수도 있습니다.
게임모드 설정 방법
1.
프로젝트 세팅에서 기본 게임모드 설정: Edit > Project Settings > Maps & Modes에서 기본 게임모드를 설정할 수 있습니다.
2.
레벨별 게임모드 설정: World Settings > Game Mode에서 특정 레벨에 대한 게임모드를 오버라이드할 수 있습니다.
1.
블루프린트로 커스텀 게임모드 생성: GameMode 클래스를 상속받아 커스텀 게임모드를 만들 수 있습니다.
게임모드는 게임의 시작 시점에만 생성되며, 게임 플레이 도중에는 변경되지 않습니다. 이는 게임의 기본 규칙이 플레이 도중에 바뀌지 않도록 하기 위함입니다.
관련 클래스 계층 구조
•
GameMode: 기본 게임 규칙을 정의합니다.
•
GameState: 모든 플레이어와 관객에게 복제되는 게임 상태 정보를 관리합니다.
•
PlayerController: 플레이어 입력을 처리하고 폰을 제어합니다.
•
PlayerState: 개별 플레이어의 상태 정보(점수, 이름 등)를 저장합니다.
•
Pawn/Character: 플레이어나 AI가 제어하는 게임 내 물리적 표현체입니다.
이러한 클래스들이 함께 작동하여 언리얼 엔진의 게임플레이 프레임워크를 구성합니다.
새롭게 만든 내 게임모드를 월드세팅에서 설정해주시고 Seleted GameMode 에서 Default Pawn 을 None으로 변경해주세요
그다음 레벨을 재생시켜보면 해당 구가 사라졌습니다.