오브젝트
ㄴ UObject를 상속받는 클래스
ㄴ UObject에는 가비지 컬렉션, UProperty, 로딩 및 저장 직렬화 기능이 구현되어 있음
클래스
ㄴ C++나 블루프린트로 생성될 수 있다.
ㄴ 특정 액터나 오브젝트의 행동과 프로퍼티를 정의한다.
블루프린트 클래스
ㄴ 콘텐트 제작자가 기존의 클래스 위에 다른 함수성을 쉽게 (비주얼 스크립팅) 추가할 수 있도록 해주는 애셋
게임플레이 클래스
ㄴ 각 게임플레이 클래스 소스 파일 위에는, 클래스에 대해 (자동 생성되는) 제너레이티드 헤더 파일을 포함시켜 줘야 한다.
ㄴ A 접두사 : 스폰 가능한 오브젝트(액터)의 서브클래스들에 붙음
ㄴ U 접두사 : 월드에 직접 인스턴싱 될 수 없는 오브젝트, 보통 액터에 포함되는 컴포넌트를 의미함
ㄴ 클래스 헤더 : 각 게임플레이 클래스 소스 파일 위에는, 클래스에 대해 (자동 생성되는) 제너레이티드 헤더 파일을 포함시켜 줘야 한다.
#include "ClassName.generated.h"
ㄴ 클래스 선언 : UCLASS 매크로를 사용하여 엔진 및 에디터 전용 속성을 전달한다.
클래스 지정자나 메타데이터 지정자가 전달된다.
UCLASS([specifier, specifier, ...], [meta(key=value, key=value, ...)])
class ClassName : public ParentName
{
GENERATED_BODY()
}
에디터에서 C++ Classes 폴더에서 C++ 클래스를 추가할 수 있고, 여기서 부모 클래스를 지정하면서 만들 수 있다. 접두사는 에디터가 부모 클래스 종류를 보고 알아서 붙여준다.
자동으로 만들어지는 헤더 파일에는 UCLASS와 GENERATED_BODY 매크로가 자동으로 포함되어 있다.
헤더에서는 새로 추가할 프로퍼티들 윗줄에 UPROPERTY 매크로를 추가해줘야 한다.
클래스를 설계할 때 C++ 전용 / 블루프린트 전용 / 혼합형 으로 만들 수 있다.
C++ 전용으로 만든 클래스를 블루프린트 클래스가 상속받도록 하면 블루프린트로 확장할 수 있지만 해당 클래스에서 생성한 함수, 변수, 컴포넌트는 블루프린트에 접근할 수 없다. 다음과 같은 지정자가 있어야 한다.
ㄴ 이벤트 함수에는 UFUCTION 매크로와 BlueprintNativeEvent 지정자
ㄴ 프로퍼티에는 UPROPERTY 매크로와 BlueprintReadOnly 혹은 BlueprintReadWrite 지정자
ㄴ UCLASS 매크로에는 Blueprintable 지정자
C++ 클래스를 상속받는 블루프린트 클래스를 생성하면, 블루프린트 관리 창에서 상속한 클래스에서 만든 프로퍼티, 함수들이 보인다. 이벤트 그래프나 Construction Script를 활용하여 기존 함수의 기능들을 오버라이딩 할 수 있다.
액터
ㄴ 액터 인스턴스는 SpawnActor로 생성한다.
ㄴ 레벨에 배치할 수 있는 모든 오브젝트 (유니티의 게임오브젝트 역할)
ㄴ 액터 자체에는 트랜스폼 정보가 없지만 루트 컴포넌트로 씬 컴포넌트를 가진다면 액터가 트랜스폼 정보를 활용할 수 있다.
ㄴ 가비지 컬렉팅 대상이 아니므로 Destroy를 사용하여 명시적으로 소멸시켜줘야 한다.
컴포넌트
ㄴ 액터에 서브 오브젝트로 붙을 수 있는 특수한 타입의 오브젝트
ㄴ 일반적인 서브 오브젝트의 기본 작동방식과는 상반되게, 액터 안에 서브 오브젝트로 생성된 컴포넌트는 인스턴스로 생성됩니다. 특정 클래스의 액터 인스턴스 각각은 컴포넌트의 고유 인스턴스를 별도로 갖는다
핵심 컴포넌트 3가지
UActorComponent : 액터 컴포넌트
ㄴ 기능만 가지고 있는 컴포넌트, 모든 컴포넌트의 베이스 클래스
USceneComponent : 씬 컴포넌트
ㄴ 트랜스폼 정보가 있는 컴포넌트(계층 구조를 이룰 수 있는), 액터 컴포넌트의 자식 클래스
UPrimitiveComponent : 프리미티브 컴포넌트
ㄴ 씬 컴포넌트의 자식 클래스, 그래픽적 표현을 갖는 컴포넌트 (메시, 콜리전, 빌보드, 파티클 시스템 등)
컴포넌트가 매 틱마다 업데이트 되려면 액터 컴포넌트가 등록되어 있어야 한다. 액터가 스폰될 때 해당 액터의 서브 오브젝트로 생성되는 컴포넌트는 자동으로 등록되지만 게임 중간에 생성되는 컴포넌트는 수동 등록해줘야 한다. RegisterComponent 함수를 사용한다.
폰
ㄴ 액터의 서브클래스
ㄴ 주로 플레이어나 NPC로 사용됨
ㄴ 폰의 서브클래스로 DefaultPawn이나 SpectatorPawn을 사용할 수도 있다.
캐릭터
ㄴ 폰의 서브클래스
플레이어 컨트롤러
ㄴ 주로 플레이어를 나타내는 캐릭터나 폰을 Possess(빙의)한다.
ㄴ 플레이어의 입력을 게임 안의 상호작용으로 변환
ㄴ 멀티플레이어 게임의 주요한 네트워크 상호작용 지점
AI 컨트롤러
ㄴ 사용자는 플레이어 컨트롤러를 사용하여 폰을 제어하고 AI 플레이어는 AI 컨트롤러를 사용하여 폰을 제어한다.
플레이어 스테이트
ㄴ 게임 참여자의 스테이트를 말한다.
ㄴ 멀티플레이어 게임의 경우 모든 컴퓨터에 모든 플레이어의 플레이어 스테이트가 존재한다.
게임 모드
ㄴ 플레이 중인 게임의 규칙을 설정한다.
ㄴ 멀티플레이어 게임의 경우 게임 모드는 서버에만 존재한다.
ㄴ 하나의 레벨에는 하나의 게임 모드만 존재할 수 있다.
게임 스테이트
ㄴ 게임 내의 모든 클라이언트에 복제할 정보가 들어 있는 컨테이너 (서버가 모든 클라이언트에 전달해야 할 정보)
ㄴ 멀티플레이어 게임의 경우 게임 스테이트에 대한 로컬 인스턴스가 각 플레이어의 컴퓨터에 하나씩 있고, 로컬 게임 스테이트 인스턴스는 서버의 게임 스테이트 인스턴스에서 업데이트된 정보를 가져온다.
브러시
ㄴ 큐브, 구체와 같은 3D shape을 묘사하는 액터
ㄴ Gemoetry Mode에서 진행
ㄴ 레벨 및 오브젝트의 초기 프로덕션 단계에서 프로토타입을 빠르게 제작하는 데 유용하지만 레벨 디자인의 최종 방식으로는 권장되지 않는다.
볼륨
ㄴ 연결된 효과에 따라 용도가 달라지는 바운드된 3D 공간
ㄴ 투명벽, 트리거를 만들 수 있다.
레벨과 월드
ㄴ 레벨은 작은 단위의 게임플레이 영역이고 월드는 레벨들의 컨테이너
ㄴ 각 레벨은 .umap 파일로 저장됨
ㄴ 월드 세팅의 일반적인 세팅 그룹에는 게임 모드와 탐색에 영향을 주는 등의 세팅이 있다. 기타 좀 더 특수한 세팅은 게임의 라이팅, 오디오, 피직스 등을 환경설정하는 데 사용된다.