이 페이지에서는 언리얼 엔진 으로 작업할 때 자주 사용하는 용어를 설명합니다. "액터(Actor) 가 뭐지?", "컴포넌트(Component) 는 뭐지?" 같은 궁금증이 있는 분이라면, 이 페이지에서 그 질문들과 더 많은 것들에 대한 답을 찾을 수 있습니다.
용어를 이해한 뒤에는, 섹션 끝에 링크된 주제를 확인하여 더 자세히 학습할 수 있습니다.
이 페이지에는 클래스(Class) 와 서브클래스(Subclass) 같은 프로그래밍 개념이 사용됩니다. C++에서 클래스 는 확장 가능한 변수와 행동을 포함하는 코드 템플릿입니다. 서브클래스 는 부모 클래스로부터 코드와 함수 기능을 상속받는 클래스입니다.
이 페이지에서 언급하는 모든 C++ 클래스는 언리얼 엔진의 클래스에 한정됩니다.
프로젝트(Project)
언리얼 엔진 5 프로젝트는 게임의 모든 콘텐츠를 담고 있습니다. 프로젝트에는 Blueprints
, Materials
등 하드디스크 안의 많은 폴더가 포함됩니다. 프로젝트 안의 폴더는 원하는 대로 이름을 변경하고 정리할 수 있습니다. 언리얼 에디터(Unreal Editor) 의 콘텐츠 브라우저(Content Browser) 패널은 하드디스크의 프로젝트
폴더와 동일한 디렉터리 구조를 보여줍니다.
모든 프로젝트에는 연관된 .uproject
파일이 있습니다. .uproject
파일로 프로젝트를 생성하거나, 열거나, 저장할 수 있습니다. 프로젝트는 원하는 수만큼 생성하고 병렬 작업할 수 있습니다.
자세한 내용은 프로젝트 및 템플릿 페이지를 참고하세요.
블루프린트(Blueprint)
블루프린트 비주얼 스크립팅(Blueprint Visual Scripting) 시스템은 노드(Node) 기반의 인터페이스를 사용하여 언리얼 에디터 내의 게임플레이 엘리먼트를 생성하는 완전한 게임플레이 스크립팅 시스템입니다. 여러 일반적인 스크립팅 언어와 마찬가지로, 블루프린트 비주얼 스크립팅도 엔진에서 오브젝트 지향(Object-Oriented, OO) 클래스 또는 오브젝트를 정의하기 위해 사용됩니다. 언리얼 엔진을 사용하다 보면, 블루프린트로 정의된 오브젝트를 '블루프린트'라고 줄여 부르는 것을 흔히 들을 수 있습니다.
자세한 내용은 블루프린트 비주얼 스크립팅 페이지를 참고하세요.
오브젝트(Object)
오브젝트 는 언리얼 엔진에서 가장 기본적인 클래스입니다. 오브젝트는 구성단위 역할을 하며, 에셋에 필수적인 기능을 많이 포함하고 있습니다. 언리얼 엔진에서는 거의 모든 것이 오브젝트로부터 상속받거나 함수 기능을 사용합니다
C++에서 UObject
는 모든 오브젝트의 베이스 클래스입니다. 가비지 컬렉션, 언리얼 에디터에 변수를 노출하기 위한 메타데이터(UProperty
) 지원, 로딩 및 저장 직렬화 등의 기능을 구현합니다.
자세한 내용은 다음 페이지를 참고하세요.
클래스(Class)
클래스 는 언리얼 엔진에서 특정 액터나 오브젝트의 행동과 프로퍼티를 정의합니다. 클래스는 계층적입니다. 즉, 정보를 부모 클래스(해당 클래스가 파생된 클래스)로부터 상속받고 자손 클래스에게 다시 상속합니다. 클래스는 C++ 코드나 블루프린트로 생성될 수 있습니다.
자세한 내용은 다음 페이지를 참고하세요.
액터(Actor)
액터 는 카메라, 스태틱 메시, 플레이어 스타트 위치 등과 같이 레벨에 배치할 수 있는 모든 오브젝트를 가리킵니다. 액터는 이동, 회전, 스케일링 등의 3D 트랜스폼을 지원합니다. 또한 C++ 또는 블루프린트 게임플레이 코드를 통해 생성(스폰) 및 소멸될 수 있습니다.
C++에서 AActor
는 모든 액터의 베이스 클래스입니다.
자세한 내용은 다음 페이지를 참고하세요.
형변환(Casting)
형변환 은 특정 클래스의 액터를 다른 클래스인 것처럼 간주하려 시도하는 작업입니다. 형변환은 성공할 수도 있고 실패할 수 있습니다. 성공하면 형변환한 액터의 클래스 전용 기능에 액세스할 수 있습니다.
예를 들어 플레이어 캐릭터에 다양한 방식으로 영향을 미치는 여러 타입의 볼륨이 있는 게임을 만드는 중이라고 가정합시다. 이러한 볼륨 중 하나는 화염 으로, 시간이 지남에 따라 플레이어의 체력을 감소시킵니다. 레벨에서 플레이어가 어느 볼륨에든 오버랩되면, 해당 볼륨을 화염 으로 형변환 하여 ""플레이어 체력 대미지(damage player health)"" 기능에 액세스를 시도할 수 있습니다.
- 형변환이 성공하여 플레이어가 화염 속에 서 있게 되면, 플레이어의 체력이 감소하기 시작합니다.
- 형변환이 실패하여 플레이어가 다른 타입의 볼륨에 서 있게 되면, 체력에 영향을 받지 않습니다.
형변환은 단순히 액터가 특정 클래스에 속하는지 확인하는 것이 다가 아닙니다. 그 경우 바이너리 응답(예 또는 아니오)을 반환하지만, 해당 클래스의 특정 함수 기능과 상호작용하지는 못합니다.
자세한 내용은 다음 페이지를 참고하세요.
컴포넌트(Component)
컴포넌트 는 액터에 추가할 수 있는 기능 조각입니다.
액터에 컴포넌트를 추가하면, 액터는 해당 컴포넌트가 제공하는 기능을 사용할 수 있습니다. 예를 들면 다음과 같습니다.
- 스포트 라이트 컴포넌트는 액터가 스포트 라이트처럼 빛을 내게 합니다.
- 로테이팅 무브먼트 컴포넌트는 액터가 회전하게 합니다.
- 오디오 컴포넌트는 액터가 사운드를 재생하게 합니다.
컴포넌트는 액터에 추가되어야 하며, 단독으로는 존재할 수 없습니다.
자세한 내용은 다음 페이지를 참고하세요.
폰(Pawn)
폰 은 액터의 서브클래스이며, 인게임 아바타 또는 페르소나(게임 안의 캐릭터 등)의 역할을 합니다. 폰은 플레이어 또는 게임 AI 로 제어되는 NPC(논플레이어 캐릭터) 등이 있습니다.
인간이나 AI 플레이어가 폰을 제어하면, 그 폰은 빙의된(Possessed) 상태로 간주합니다. 반대로 인간이나 AI 플레이어가 제어하지 않는 폰은 빙의 해제된(Unpossessed) 것으로 여겨집니다.
자세한 내용은 다음 페이지를 참고하세요.
캐릭터(Character)
캐릭터 는 플레이어 캐릭터로 사용하기 위한 폰 액터의 서브클래스입니다. 캐릭터 클래스에는 콜리전 설정, 바이페드(Biped) 움직임을 위한 입력 바인딩, 플레이어가 제어하는 움직임을 위한 추가 코드 등이 포함됩니다.
자세한 내용은 다음 페이지를 참고하세요.
플레이어 컨트롤러(Player Controller)
플레이어 컨트롤러 는 플레이어의 입력을 게임 안의 상호작용으로 변환합니다. 모든 게임에는 최소 하나의 플레이어 컨트롤러가 있습니다. 플레이어 컨트롤러는 게임 안에서 플레이어를 나타내는 폰이나 캐릭터에 빙의할 때가 많습니다.
플레이어 컨트롤러는 또한 멀티플레이어 게임의 주요한 네트워크 상호작용 지점입니다. 멀티플레이어 게임의 플레이 동안에는 서버가 각 플레이어에게 네트워크 함수 호출을 할 수 있어야 하기 때문에 게임 안의 모든 플레이어에 대해 하나의 플레이어 컨트롤러 인스턴스를 지닙니다. 각 클라이언트는 자신의 플레이어에 해당하는 플레이어 컨트롤러만을 가지고, 서버와 통신하는 용도로만 사용할 수 있습니다.
연관된 C++ 클래스는 APlayerController
입니다.
자세한 내용은 플레이어 컨트롤러 페이지를 참고하세요.
AI 컨트롤러(AI Controller)
플레이어 컨트롤러가 게임 안에 플레이어를 나타내는 폰을 소유하듯이, AI 컨트롤러 도 게임 안에 NPC를 나타내는 폰을 소유합니다. 폰과 캐릭터는 특정 플레이어 컨트롤러가 빙의했거나 스스로 AI 컨트롤러를 생성하지 말라는 명령을 받지 않았다면 기본적으로 베이스 AI 컨트롤러에 빙의됩니다.
연관된 C++ 클래스는 AAIController
입니다.
자세한 내용은 AI 컨트롤러 페이지를 참고하세요.
플레이어 스테이트(Player State)
플레이어 스테이트 게임 참여자의 스테이트를 말합니다. 인간 플레이어 또는 플레이어를 시뮬레이션하는 봇 등이 있습니다. 게임 월드의 일부로 존재하는 논플레이어 AI의 경우 플레이어 스테이트가 없습니다.
플레이어 스테이트에 포함되는 플레이어 정보의 예는 다음과 같습니다.
- 이름
- 현재 레벨
- 체력
- 점수
- 깃발 뺏기(Capture the Flag) 게임에서 현재 깃발을 들고 있는지 여부
멀티플레이어 게임의 경우 모든 컴퓨터에 모든 플레이어의 플레이어 스테이트가 존재하며, 동기화를 유지하기 위해 서버에서 클라이언트로 데이터를 리플리케이트할 수 있습니다. 이는 특정 플레이어 컨트롤러가 나타내는 플레이어의 컴퓨터에만 존재하는 플레이어 컨트롤러와는 다릅니다.
연관된 C++ 클래스는 APlayerState
입니다.
자세한 내용은 게임플레이 프레임워크 퀵 레퍼런스 페이지를 참고하세요.
게임 모드(Game Mode)
게임 모드 는 플레이 중인 게임의 규칙을 설정합니다. 규칙에는 다음이 포함될 수 있습니다.
- 플레이어가 게임에 참여하는 방법.
- 게임의 일시 정지 가능 여부.
- 승리 조건 등 특정 게임 전용 행동.
프로젝트 세팅에서 디폴트 게임 모드를 설정하고 레벨별로 오버라이드할 수 있습니다. 어떤 방법으로 구현하든, 한 레벨에는 하나의 게임 모드만 존재할 수 있습니다.
멀티플레이어 게임의 경우 게임 모드는 서버에만 존재하며, 연결된 각 클라이언트에 규칙이 복제(전송)됩니다.
연관된 C++ 클래스는 AGameMode
입니다.
자세한 내용은 다음 페이지를 참고하세요.
게임 스테이트(Game State)
게임 스테이트 는 게임 내의 모든 클라이언트에 복제할 정보가 들어 있는 컨테이너입니다. 쉽게 말해 연결된 모든 사람에 대한 '게임의 스테이트'를 뜻합니다.
다음은 게임 스테이트의 몇 가지 예입니다.
- 게임 점수에 대한 정보.
- 대결이 시작됐는지 여부.
- 월드에 있는 플레이어 수를 기준으로 스폰할 AI 캐릭터의 수.
멀티플레이어 게임의 경우 게임 스테이트에 대한 로컬 인스턴스가 각 플레이어의 컴퓨터에 하나씩 있습니다. 로컬 게임 스테이트 인스턴스는 서버의 게임 스테이트 인스턴스에서 업데이트된 정보를 가져옵니다.
연관된 C++ 클래스는 AGameState
입니다.
자세한 내용은 게임 모드와 게임 스테이트 페이지를 참고하세요.
브러시(Brush)
브러시 는 큐브, 구체와 같은 3D 셰이프를 묘사하는 액터입니다. 레벨에 브러시를 배치하여 레벨 지오메트리를 정의할 수 있습니다. 이를 바이너리 스페이스 파티션(Binary Space Partition) 또는 BSP 브러시라고 합니다. 레벨의 윤곽 작업을 빠르게 하고 싶은 경우 등에 유용합니다.
자세한 내용은 다음 페이지를 참고하세요.
볼륨(Volume)
볼륨 은 연결된 효과에 따라 용도가 달라지는 바운드된 3D 공간입니다. 예를 들면 다음과 같습니다.
- 블로킹 볼륨(Blocking Volumes) 은 보이지 않으며 액터가 통과하지 못하게 막습니다.
- 페인 코징 볼륨(Pain Causing Volumes) 은 오버랩되는 액터에 시간이 지남에 따라 대미지를 줍니다.
- 트리거 볼륨(Trigger Volumes) 은 액터가 들어오거나 나갈 때 이벤트를 유발하도록 프로그래밍됩니다.
자세한 내용은 액터 레퍼런스를 참고하세요.
레벨(Level)
레벨 은 여러분이 정의하는 게임플레이 영역입니다. 레벨에는 지오메트리, 폰, 액터 등과 같이 플레이어가 보고 상호작용할 수 있는 모든 것이 포함됩니다.
언리얼 엔진은 각 레벨을 별도의 .umap
파일로 저장합니다. 그래서 때로는 레벨이 맵 이라고 불리기도 합니다.
자세한 내용은 다음 페이지를 참고하세요.
월드(World)
월드 는 게임을 구성하는 모든 레벨이 담겨 있는 컨테이너입니다. 월드는 레벨의 스트리밍과 다이내믹 액터의 스폰(생성)을 처리합니다.
자세한 내용은 다음 페이지를 참고하세요.