

언리얼 엔진 5 프로젝트는 게임의 모튼 컨텐츠를 담고 있다.
프로젝트에는 Blueprints, Materials 등 하드디스크 안의 많은 폴더가 포함
프로젝트 안의 폴더는 원하는 대로 이름을 변경하고 정리 가능
언리얼 에디터 (Unreal Editor) 의 콘텐츠 브라우저 (Content Brower) 패널은 하드디스크의 프로젝트 폴더와 동일한 디렉터리 구조를 보여줌
모든 프로젝트에는 연관된 .unproject 파일 존재
.unproject 파일로 프로젝트를 생성하거나, 열거나, 저장 가능
프로젝트는 원하는 수만큼 생성하고 병렬 작업 가능
참고
블루프린트 비주얼 스크립팅 (Blueprint Visual Scripting) 시스템은 노드 (Node) 기반의 인터페이스를 사용하여 언리얼 에디터 내의 게임플레이 엘리먼트를 생성하는 완전한 게임플레이 스크립팅 시스템
여러 일반적인 스크립팅 언어와 마찬가지로, 블루프린트 비주얼 스크립팅도 엔진에서 오브젝트 지향 (Object-Oriented, OO) 클래스 또는 오브젝트를 정의하기 위해 사용
언리얼 엔진을 사용하다 보면, 블루프린트로 정의된 오브젝트를 '블루프린트'라고 줄여 부름
참고
오브젝트 는 언리얼 엔진에서 가장 기본적인 클래스
오브젝트는 구성단위 역할을 하며, 에셋에 필수적인 기능을 많이 포함
언리얼 엔진에서는 거의 모든 것이 오브젝트로부터 상속받거나 함수 기능을 사용
C++ 에서 UObject 는 모든 오브젝트의 베이스 클래스
가비지 컬렉션, 언리얼 에디터에 변수를 노툴하기 위한 메타 데이터 (UObject) 지원, 로딩 및 저장 직렬화 등의 기능을 구현
참고
클래스 는 언리얼 엔진에서 특정 액터나 오브젝트의 행동과 프로퍼티를 정의
클래스는 계층적
즉, 정보를 부모 클래스 (해당 클래스가 파생된 클래스)로부터 상속받고 자손 클래스에 다시 상속
클래스는 C++ 코드나 블루프린트로 생성 가능
참고
액터 는 카메라, 스태틱 메시, 플레이어 스타트 위치 등과 같이 레벨에 배치할 수 있는 모든 오브젝트를 가리킴
액터는 이동, 회전, 스케일링 등의 3D 트랜스폼을 지원
또한 C++ 또는 블루프린트 게임플레이 코드를 통해 생성(스폰) 및 소멸 가능
C++에서 AActor 는 모든 액터의 베이스 클래스
참고
형변환 은 특정 클래스의 액터를 다른 클래스인 것처럼 간주하려 시도하는 작업
형변환은 성공할 수도 있고 실패할 수도 있다.
성공하면 형변환한 액터의 클래스 전용 기능에 액세스 가능
예를 들어 플레이어 캐릭터에 다양한 방식으로 영향을 미치는 다수 타입의 볼륨이 있는 게임을 만드는 중이라고 가정
이러한 볼륨 중 하나는 화염 으로, 시간이 지남에 따라 플레이어의 체력을 감소
레벨에서 플레이어가 어느 볼륨에든 오버랩되면, 해당 볼륨을 화염 으로 형변환 하여 ""플레이어 체력 대미지 (damage player health)"" 기능에 엑세스를 시도할 수 있다.
형변환은 단순히 액터가 특정 클래스에 속하는지 확인하는 것이 다가 아님
그 경우 바이너리 응답 (예 또는 아니오)을 반환하지만, 해당 클래스의 특정 함수 기능과 상호작용 하지는 못한다.
컴포넌트 는 액터에 추가할 수 있는 기능 조각
액터에 컴포넌트를 추가하면, 액터는 해당 컴포넌트가 제공하는 기능 사용 가능
예시
컴포넌트는 액터에 추가되어야 하며, 단독으로는 존재할 수 없다.
참고
폰 은 액터의 서브클래스이며, 인게임 아바타 또는 페르소나(게임 안의 캐릭터 등)의 역할
폰은 플레이어 또는 게임 AI 로 제어되는 NPC(논플레이어 캐릭터) 등이 있다.
인간이나 AI 플레이어가 폰을 제어하면, 그 폰은 빙의된(Prossessed) 상태로 간주
반대로 인간이나 AI 플레이어가 제어하지 않는 폰은 빙의 해제된(Unprossessed) 것으로 여겨진다.
참고
캐릭터 는 플레이어 캐릭터로 사용하기 위한 폰 액터의 서브클래스
캐럭터 클래스에는 콜리전 설정, 바이페드 (Biped) 움직임을 위한 입력 바인딩, 플레이어가 제어하는 움직음을 위한 추가 코드 등이 포함
참고
플레이어 컨트롤러 는 플레이어의 입력을 게임 안의 상호작용으로 변환
모든 게임에는 최소 하나의 플레이어 컨트롤러가 있다.
게임 안에서 플레이어를 나타내는 폰이나 캐릭터에 빙의할 때가 많다.
플레이어 컨트롤러는 또한 멀티플레이어 게임의 주요한 네트워크 상호작용 지점
멀티 플레이어 게임의 플레이 동안에는 서버가 각 플레이어에게 네트워크 함수 호출을 할 수 있어야 하기 때문에 게임 안의 모든 플레이어에 대해 하나의 플레이어 컨트롤러 인스턴스를 지닌다.
각 클라이언트는 자신의 플레이어에 해당하는 플레이어 컨트롤러만을 가지고, 서버와 통신하는 용도로만 사용 가능
연관된 C++ 클래스는 PlayerController
참고
플레이어 컨트롤러가 게임 안에 플레이어를 나타내는 폰을 소유하듯이, AI 컨트롤러도 게임 안에 NPC를 나타내는 폰을 소유
폰과 캐릭터는 특정 플레이어 컨트롤러가 빙의했거나 스스로 AI 컨트롤러를 생성하지 말라는 명령을 받지 않았다면 기본적으로 베이스 AI 컨트롤러에 빙의
연관된 C++ 클래스는 AIController
참고
플레이어 스테이트 게임 참여자의 스테이트를 지칭
인간 플레이어 또는 플레이어를 시뮬레이션 하는 봇 등이 있다.
게임 월드의 일부로 존재하는 논플레이어 AI의 경우 플레이어 스테이트가 없다.
플레이어 스테이트에 포함되는 플레이어 정보의 예시
멀티 플레이어 게임의 경우 모든 컴퓨터에 모든 플레이어의 플레이어 스테이트가 존재하며, 동기화를 유지하기 위해 서버에서 클라이언트로 데이터를 *리플리케이트 가능
이는 특정 플레이어 컨트롤러가 나타내는 플레이어의 컴퓨터에만 존재하는 플레이어 컨트롤러와는 다름
연관된 C++ 클래스는 PlayerState
참고
게임 모드 는 플레이 중인 게임의 규칙을 설정
규칙에는 다음이 포함될 수 있다
프로젝트 세팅에서 디폴트 게임 모드를 설정하고 레벨별로 오버라이드 가능
어떤 방법으로 구현하든, 한 레벨에는 하나의 게임 모드만 존재 가능
멀티플레이어 게임의 경우 게임 모드는 서버에만 존재하며, 연결된 각 클라이언트에 규칙이 복제 (전송)
연관된 C++ 클래스는 GameMode
참고
게임 스테이트 는 게임 내의 모든 클라이언트에 복제할 정보가 들어 있는 컨테이너
쉽게 말해 연결된 모든 사람에 대한 '게임 스테이트'를 뜻함
게임 스테이트의 예시
멀티플레이어 게임의 경우 게임의 경우 게임 스테이트에 대한 로컬 인스턴스가 각 플레이어의 컴퓨터에 하나씩 존재
로컬 게임 스테이트 인스턴스는 서버의 게임 스테이트 인스턴스에서 업데이트된 정보를 가져온다.
연관된 C++ 클래스는 GameState
참고
브러시 는 큐브, 구체와 같은 3D 셰이프를 묘사하는 액터
레벨에 브러시를 배치하여 레벨 지오메트리를 정의 가능
이를 바이너리 스페이스 파티션 (Binary Space Partition) 또는 BSP 브러시라고 함
레벨의 윤곽 작업을 빠르게 하고 싶은 경우 등에 유용
참고
레벨 은 개발자가 정의하는 게임플레이 영역
레벨에는 지오메트리, 폰, 액터 등과 같이 플레이어가 보고 상호작용할 수 있는 모든 것이 포함
언리얼 엔진은 각 레벨을 별도의 .umap 파일로 저장
때로는 레벨이 맵 이라고 불림
참고