분류 전체보기 121

[언리얼 C++] External UI 인터페이스(온라인 서브시스템)

일부 온라인 서비스는 게임 콘솔처럼 전용 디바이스에서 실행되는 경우라면 특히나, 특정 작업을 실행할때마다 뜨는 표준화된 내장 유저 인터페이스가 있습니다. 예를 들어 친구 추가, 매치 참가를 위한 초대 전송, 신용 카드 등록과 같은 작업을 하면 게임과 무관한 별도의 양식, 오버레이, 화면, 워크플로를 통해 사용자가 조작하게 될 수 있습니다. 그렇게 하는 이유는 보통 민감할 수도 있는 작업을 항상 똑같은 방식으로 처리하기 위해서입니다. 그리고 개별 타사가 아닌 온라인 서비스를 소유한 회사가 제어할 수 있도록 하기 위해서입니다. 이 기능이 모든 온라인 서비스에 전부 표준이 아닐 수도 있으며, 어떤 경우에는 한 특정 서비스나 시스템에만 존재할 수도 있습니다. 이처럼 제 각각인 기능을 처리하기 위해, 온라인 서브..

[언리얼 C++] Achievements 인터페이스(온라인 서브시스템)

Achievements는 플레이어에게 도전 과제, 동기 부여, 보상을 제공하여 게임에서 제공하는 내용을 보다 많이 경험할 수 있도록 이끌어 주는 수단으로, 게임을 다시 플레이하는 가치를 높이거나 플레이어와 친구들 사이 경쟁을 지원할 수도 있습니다. 다수의 온라인 서비스에서 Achievements에 보상을 주는 기능을 제공하며, 온라인 서브시스템에서는 Achievements 인터페이스를 통해 지원하고 있습니다. 온라인 서브시스템은 Achievements 시스템 사용을 위한 게임 내 함수 기능을 제공하지만, Achievements 자체를 생성, 삭제, 어떤식으로든 수정하는데 관련된 기능을 처리하지는 않습니다. 각 온라인 서비스에서 별도의 백엔드 시스템을 통해 Achievements 관리를 지원하고 있습니다...

[언리얼 C++] 온라인 서브시스템

언리얼 엔진에서는 온라인 플랫폼 관련 다양한 서브시스템을 제공해줍니다. 이를 온라인 서브시스템이라고 합니다. 온라인 서브시스템 및 그 인터페이스는 Steam, Xbox, Live, Facebook 등의 온라인 서비스 기능을 공통된 방식으로 액세스할 수 있는 방법을 제공합니다. 여러 플랫폼에 출시하거나 여러 온라인 서비스를 지원하는 게임을 만들때, 온라인 서브시스템을 사용하면 개발자는 각 지원 서비스에 맞게 구성만 조정해주면 됩니다. 1. 디자인 철학 온라인 서브시스템은 근본적으로 다양한 온라인 서비스와 비동기 통신을 처리하도록 설계되었습니다. 네트워크 연결 속도, 서버 지연시간, 백엔드 서비스 실행 시간 모두 로컬 머신이 알 수 없으므로, 이 시스템과의 상호작용에 시간이 얼마나 걸릴지도 예측할 수 없습니..

[언리얼 C++] 언리얼 프로젝트(애셋, 레벨, 액터)

언리얼 프로젝트의 모든 것은 프로젝트 디렉터리에 들어있습니다. 프로젝트는 원하는 갯수만큼 만들 수 있지만, 각각은 그 자체로 완결성을 가집니다. 언리얼 엔진의 프로젝트 브라우저를 사용하여 새 프로젝트를 생성하면 디렉터리 구조나 언리얼 에디터에서 열어볼 수 있는 언리얼 프로젝트 파일([ProjectName].uproject) 등의 필수 프로젝트 프레임워크가 구성됩니다. 1. 애셋 애셋은 프로젝트의 Content 폴더에 들어있으며, .uasset 파일로 저장됩니다. 애셋에는 머티리얼, 스태틱/스켈레탈 메시, 블루프린트, 사운드 큐, 텍스처 등이 포함되며, 이들은 프로젝트의 오브젝트에서 불러올 수 있는 템플릿입니다. 2. 레벨 레벨 또한 프로젝트의 Content 폴더에 들어있으며, .umap 파일로 저장됩니다..

[언리얼 C++] 프로그래밍 서브시스템

언리얼 엔진 4의 서브시스템은 수명이 관리되는 자동 인스턴싱 클래스입니다. 이 클래스는 사용하기 쉬운 확장점을 제공하여, 프로그래머는 블루프린트 및 Python에 바로 노출시킴과 동시에 복잡한 엔진 클래스 수정 또는 오버라이드를 피할 수 있습니다. 1. 서브시스템 서브시스템 상속 원본 Engine UEngineSubsystem 클래스 Editor UEditorSubsystem 클래스 GameInstance UGameInstanceSubsystem 클래스 LocalPlayer ULocalPlayerSubsystem 클래스 위 표는 현재 지원되는 서브시스템들입니다. 여기서 GameInstance 서브시스템을 커스터마이징했을때, 커스터마이징한 서브시스템의 수명에 대해 설명드리겠습니다. class UMyGame..

[언리얼 C++] 게임플레이 디버거

게임플레이 디버거는 런타임에 실시간으로 게임플레이 데이터를 분석하고 감시할 수 있도록 해주는 툴입니다. 심지어 리플리케이션을 사용하는 네트워킹 게임 내 클라이언트에서도 가능합니다. 에디터에서 플레이, 에디터에서 시뮬레이트, 독립형 게임 세션에서도 잘 돌아가며, 모든 데이터가 게임 뷰포트 위에 겹쳐 표시됩니다. 게임 전용 데이터의 디버깅을 가능하게 하기 위해 확장시킬 수 있는 프레임워크도 제공됩니다. 게임플레이 디버거로 뷰포트에 표시할 수 있는 내용은 다음과 같습니다. Pawn에서의 기본 데이터 AI 컨트롤러에서의 기본 데이터 비헤이비어 트리 및 블랙보드 관련 데이터 실행된 인바이런먼트 쿼리(EQS) 관련 데이터 인지 시스템에서의 데이터 플레이어 또는 선택된 Pawn 주변 내비메시에 링크나 영역같은 디테일..

[언리얼 C++] 구조체 선언 및 정의

1. 구조체 선언 USTRUCT([Specifier, Specifier, ...]) struct StructName { GENERATED_BODY() }; 게임플레이 클래스의 구조체는 일반 C++ 구조체 선언 위에 USTRUCT 매크로를 사용하여 선언하며, USTRUCT 매크로에 구조체 지정자를 추가하여 엔진 및 에디터의 다양한 부분에서 어떤식으로 작동할지를 제어할 수 있습니다. 그리고 구조체 안에는 일반 변수, UProperty 변수, 함수, 연산자를 포함할 수 있습니다. 구조체 선언시 주의할 점은 구조체는 클래스 선언 이전에 선언되어야 한다는 것입니다. 2. 구조체 지정자 구조체 지정자 효과 Atomic 이 구조체는 항상 하나의 단위로 Serialize 됨을 나타냅니다. BlueprintType 이 ..

[언리얼 C++] 프로퍼티 선언

1. 프로퍼티 선언 UPROPERTY([specifier, specifier, ...], [meta(key=value, key=value, ...)]) Type VariableName; 프로퍼티는 위의 예제 코드처럼 표준 C++ 변수 문법 위에 UPROPERTY 매크로를 사용하여 선언합니다. 그리고 UPROPERTY 매크로에 프로퍼티 메타데이터와 변수 지정자를 붙여 엔진 및 에디터에서의 작동 방식을 제어할 수 있습니다. 2. 코어 데이터 유형 정수형 변수 유형 설명 uint8 8-bit unsigned uint16 16-bit unsigned uint32 32-bit unsigned uint64 64-bit unsigned int8 8-bit signed int16 16-bit signed int32 3..

[언리얼 C++] 인터페이스 클래스

인터페이스 클래스는 관련이 없는 클래스 세트가 공통의 함수 세트를 구현할 수 있도록 해줍니다. 그대로라면 유사성이 없었을 크고 복잡한 클래스들에 어떤 게임 함수 기능을 공유시키고자 하는 경우 매우 좋습니다. 1. 인터페이스 선언 인터페이스 클래스 선언은 일반 언리얼 클래스 선언과 비슷하지만 크게 두가지 차이점이 있습니다. UINTERFACE([specifier, specifier, ...], [meta(key=value, key=value, ...)]) class UClassName : public UInterface { GENERATED_BODY() }; 첫째, 인터페이스 클래스는 UCLASS 매크로 대신 UINTERFACE 매크로를 사용하며, UObject 대신 UInterface를 상속합니다. 둘째..

[언리얼 C++] 게임플레이 모듈

언리얼 엔진에서 게임플레이 모듈이란 DLL에 컴파일되는 게임 프로젝트에 속하는 게임플레이 클래스의 모음입니다. 엔진 자체가 여러 모듈로 이루어져 있는 것과 마찬가지로, 각 게임은 하나 이상의 게임플레이 모듈로 이루어져 있습니다. 이들은 관련 클래스들의 모음을 담는 그릇이라는 점에서 이전 버전 엔진에서의 패키지와 비슷합니다. 언리얼 엔진 4에서는 게임플레이가 모두 C++로 처리되기에, 모듈은 별도의 패키지 파일이라기 보다는 사실상 DLL에 가깝습니다. 1. 모듈 생성 게임플레이 모듈에는 반드시 최소한 하나의 헤더(.h) 파일, C++(.cpp) 파일, 빌드(.Build.cs) 파일이 들어있어야 합니다. 헤더 파일은 모듈 디렉터리의 Public 폴더, 즉 [게임프로젝트명]\Source\[모듈명]\Public..