[UE5/Article] Unreal Engine 용어 정리
언리얼 엔진의 핵심 개념과 주요 용어를 간단하고 명확하게 정리한 노트이다.
Blueprints
Blueprint Visual Scripting 블루프린트 비주얼 스크립팅 시스템(또는 줄여서 Blueprint, 블루프린트)은 언리얼 에디터 안에서 노드를 추가하고 연결하는 개념으로 게임플레이 요소를 만드는 비주얼 스크립팅 시스템입니다 코드 한 줄 건드릴 필요 없이 전체 게임을 만들 수 있을 만큼 유연하고 강력한 블루프린트는, 일반적으로 프로그래머만이 가능했던 개념과 도구를 사실상 완벽 지원해 줍니다.
Object
언리얼 엔진의 기본 구성 요소를 Object, 오브젝트라 하며, 거기에는 게임 애셋에 대한 본질적인 “내부적” 함수성이 다수 포함됩니다. 언리얼 엔진 4 의 모든 것이 오브젝트를 상속합(, 다른 말로 함수성을 이어받습)니다. C++ 에서 UObject 는 모든 오브젝트의 베이스 클래스이며, 가비지 컬렉션, 언리얼 에디터로의 변수 노출을 위한 (UProperty) 메타데이터 지원, 로드 & 저장을 위한 시리얼라이제이션 등의 기능을 구현합니다.
Actor
Actor, 액터란 레벨에 배치할 수 있는 오브젝트를 말합니다. 액터는 이동, 회전, 스케일과 같은 3D 트랜스폼을 지원하는 범용 클래스입니다. 액터는 게임플레이 코드(C++ 또는 블루프린트)를 통해 생성(스폰) 및 소멸 가능합니다. C++ 에서 AActor 는 모든 액터의 베이스 클래스입니다. 액터에는 여러가지 유형이 있으며, 몇 가지 예를 들면 다음과 같습니다: StaticMeshActor, CameraActor, PlayerStartActor.
Pawn
Pawn, 폰이란 Actor 의 서브클래스로, 게임내 아바타 또는 페르소나 역할을 하며, 게임에서의 캐릭터를 예로 들 수 있습니다. 폰은 플레이어 또는 플레이 불가능한 캐릭터(NPC) 형태로 게임의 AI 제어를 받을 수 있습니다. 폰이 사람 또는 AI 플레이어의 제어를 받을 때는, Possess 빙의된 것으로 간주합니다. 역으로 폰이 사람 또는 AI 플레이어의 제어를 받지 않는 경우, Unpossess 빙의되지 않은 것으로 간주합니다.
Character
Character (캐릭터)는 Pawn (폰) 액터의 서브클래스로, 플레이어의 캐릭터에 쓰입니다. 캐릭터 서브클래스에는 콜리전 셋업, 이족 보행을 위한 입력키 바인딩, 플레이어가 제어하는 이동에 대한 부가 코드 등이 포함됩니다.
Controller Class
Controller (컨트롤러)는 Pawn (폰) 또는 Character (캐릭터)처럼 폰에서 파생된 클래스를 빙의(possess)하여 그 동작을 제어할 수 있는, 눈에 보이지는 않는 액터입니다. PlayerController (플레이어 컨트롤러)는 사람이 조종하는 폰에 사용되는 반면, AIController (AI 컨트롤러)는 조종하는 폰에 대한 인공지능을 구현하는 데 사용됩니다. 컨트롤러는 Possess 함수로 폰의 제어권을 획득하며, Unpossess 함수로 해제합니다.
PlayerController
PlayerController, 플레이어 컨트롤러는 플레이어 입력을 받아 게임 내 상호작용으로 변환하는 데 사용되는 베이스 클래스이며, 모든 게임에는 최소 하나의 플레이어 컨트롤러가 있습니다. 플레이어 컨트롤러는 종종 게임 내 플레이어의 표상으로 폰 또는 캐릭터를 빙의합니다. 멀티플레이어 게임의 경우 PlayerController 가 주요 네트워크 상호작용 지점이 되기도 합니다. 멀티플레이어 플레이 도중, 서버는 멀티플레이어 게임 내 모든 플레이어에 대해 하나의 플레이어 컨트롤러 인스턴스를 갖는데, 이는 각 플레이어로의 네트워크 함수 호출이 가능해야 하기 때문이며, 각 클라이언트는 자기 플레이어에 해당하는 플레이어 컨트롤러만 갖으며, 이를 통해서만 서버와 통신할 수 있습니다.
AIController
PlayerController 가 게임 내 플레이어의 표상으로 Pawn 을 빙의하듯이, AIController, AI 컨트롤러는 게임내 NPC (플레이 가능하지 않은 캐릭터)의 표상으로 Pawn 을 빙의합니다. 기본적으로 Pawn 과 Character 는 구체적인 PlayerController 에 빙의되거나 별도의 AIController 를 만들어주지 않는 한, 기본 AIController 를 갖게 됩니다.
class
class (클래스)란 언리얼 엔진 게임 제작에 사용되는 특정 액터 또는 오브젝트의 작동방식 및 프로퍼티를 정의합니다. 클래스는 계층구조식으로 되어있어, 부모 클래스를 상속받은( 또는 파생된) 클래스(, 즉 서브클래스)는 그 정보를 자손에게 물려줄 수 있습니다. 클래스는 C++ 코드 또는 블루프린트에서 생성할 수 있습니다.
component
Component, 컴포넌트는 액터에 추가시킬 수 있는 함수성 조각으로, 컴포넌트는 독립적으로 존재할 수는 없지만, 액터에 추가시키면 자립적인 함수성 조각으로, 액터에 포함시켜야 하며, 그 자체로 존재할 수는 없습니다. 예를 들어 스포트 라이트 컴포넌트는 액터가 스포트 라이트처럼 빛을 내도록, 로테이팅 무브먼트 컴포넌트는 액터가 회전하도록, 오디오 컴포넌트는 액터가 사운드를 재생하도록 해 줍니다.
GameState
GameState, 게임 스테이트에는 게임의 모든 클라이언트에게 리플리케이트하고자 하는 정보가 들어있으며, 좀 더 간단히 접속된 모두에 대한 ‘게임의 상태’를 말합니다. 종종 게임 점수, 경기 시작 여부, 월드의 플레이어 수에 따라 스폰시킬 AI 수, 기타 게임 관련 정보가 포함됩니다. 멀티플레이어 게임의 경우, 각 플레이어의 머신마다 GameState 인스턴스가 하나 있으며, 서버의 인스턴스가 오소리티가 됩니다 (또는 나머지 클라이언트는 여기에서 업데이트를 받습니다).
PlayerState
PlayerState, 플레이어 스테이트는 사람 플레이어 또는 플레이어를 흉내내는 봇과 같은 게임내 참여자의 상태를 나타냅니다. 게임 월드의 일부로 존재하는 플레이어가 아닌 AI 의 경우 PlayerState 가 없을 것입니다. PlayerState 에 포함시키기 적합한 예제 데이터라면, 플레이어 이름 또는 점수, 그 현재 레벨 또는 생명력, 깃발뺏기 게임에서 현재 깃발 운반 여부 등입니다. 멀티플레이어 게임의 경우, 모든 플레이어에 대한 PlayerState 는 (PlayerController 와는 달리) 모든 머신에 존재하며, 서버에서 클라이언트로 프로퍼티를 리플리케이트하여 동기화 상태 유지가 가능합니다.
GameMode
GameMode, 게임 모드 클래스는 플레이중인 게임의 규칙 설정을 담당합니다. 규칙에는 플레이어의 게임 참가 방식, 게임 일시정지 가능 여부, 레벨 전환, 승리 조건과 같은 게임 전용 작동방식이 포함될 수 있습니다. 프로젝트 세팅 에서 기본 게임 모드 설정이 가능하지만, 레벨 단위로 덮어쓸 수 있습니다. 게임 모드 구현을 어떻게 하기로 했는지와 무관하게, 레벨당 항상 단 하나의 게임모드가 존재합니다. 멀티플레이어 게임에서 게임 모드는 서버에서만 존재하며, 규칙은 리플리케이션을 통해 접속된 각 클라이언트에 전송됩니다.
Asset
asset (애셋)이란 게임을 만드는 데 사용되는 요소를 말합니다. 콘텐츠 브라우저에서 임포트하거나 만들 수 있는 콘텐츠, 일례로 머티리얼, 스태틱 메시, 텍스처, 파티클 시스템, 블루프린트, 사운드 큐 등이 있습니다. 각 애셋은 별도의 .uasset 파일에 저장됩니다.
Level 레벨
Level, 레벨은 게임플레이에 사용자 정의된 영역입니다. 주로 레벨 안에 액터를 배치하고 트랜스폼을 적용한 뒤 프로퍼티를 편집하는 것으로, 레벨을 생성하고 확인하며 변경합니다. 언리얼 에디터에서, 각 레벨은 별도의 .umap 파일로 저장되기에, 가끔은 맵이라 일컬어지기도 합니다.
World
World, 월드에는 로드된 레벨 목록이 들어있습니다. 레벨 스트리밍 및 동적인 액터 스폰(생성)을 처리합니다. 월드와의 직접 상호작용이 필수는 아니지만, 게임 구조 내 구체적인 언급 지점을 제공하는 데는 도움이 됩니다 (즉, 월드를 직접 언급한다고 레벨이나 맵이나 게임에 대해 말하는 것은 아닙니다).
Collision
Collision (콜리전, 충돌)이란 물리 시뮬레이션 도중 사물이 겹치는 것을 방지하여 오브젝트에 입체성을 부여하기 위한 프로그래밍적인 방법입니다. 콜리전 메시라고도 하는데, 이는 지오메트리의 단순화된 버전으로, 보통 메시를 둘러싼 투명 외피 내지 골격의 형태로 존재합니다. 이렇게 단순화시키는 이유는 퍼포먼스 때문인데, 폴리곤 수가 많은 복잡한 오브젝트도 대략의 형태를 나타내는 간단한 윤곽으로 콜리전을 계산하여 처리속도를 빠르게 하기 위함입니다. “콜리전” 에 non-blocking, 무언가를 막지 않도록 (즉 겹치도록) 설정을 할 수도 있습니다. 이 경우 오브젝트는 서로가 관통되지 못하도록 막기보다는, 그저 콜리전에 서로 관통하(겹치)는 오브젝트라고 등록하면 될 일입니다. 오브젝트에 물리 계산을 통한 시뮬레이션을 적용하기 위해서는 콜리전 표면이 필수입니다.
Play In Editor (PIE)
Play In Editor (PIE) (에디터에서 플레이)는 언리얼 에디터 창에서 레벨의 지정된 위치부터 바로 플레이하며 테스트해 볼 수 있는 모드입니다. 이 모드에서는 현재 레벨을 게임 내에서 플레이했을 때 보이는 모습 그대로 플레이하면서, 게임플레이 기능은 물론 플레이어 컨트롤이나 플레이어의 동작으로 발동되는 레벨 이벤트를 테스트해 볼 수 있습니다.
Simulate In Editor (SIE)
Simulate(시뮬레이트) 버튼을 사용하면 현재 활성 뷰포트에서 Simulate In Editor (에디터에서 시뮬레이트) 세션이 시작됩니다. 시뮬레이션이 시작되면, 플레이어가 게임에 어떠한 작용을 하지 않아도 발동되는 블루프린트 와 C++ 코드도 포함해서 게임플레이가 시작됩니다. 시뮬레이션 도중에는 에디터의 툴에 전부 접근할 수 있어, 씬 자체나 그 내용물을 변경할 수 있고, 심지어 액터를 새로 배치할 수도 있습니다. 현재 AI 에 의해 어떤 동작을 하고 있는 Pawn (폰)을 선택해서 조사해 볼 수도 있어서 빠른 게임플레이 동작 디버깅이나 트윅 작업이 가능합니다. 그러나 시뮬레이션 도중에는 PlayerController 를 사용하지 않기 때문에 게임과 같은 조작은 불가능합니다. 에디터에서 시뮬레이트 세션 도중 가한 변경내용 중 일정 부분은 시뮬레이션 변경내용 유지를 통해 저장 가능합니다.
