모든 C++ 코드(엔진, 프로젝트) 는 모듈에 속해 있다.

 

Unreal Build Tool 은 Cross-Platform 빌드 시스템이다.

 

각각의 모듈은 DLL로 컴파일된다.

 

플러그인은 모듈/ 애셋의 컬렉션이다.

플러그인을 사용하면 다른 프로젝트로 쉽게 코드를 공유할 수 있고 패키징하여 마켓플레이스에 올릴 수도 있다.

 

Feature Plugin

런타임에 활성화할 수 있는 Feature

 

Platform Extension

플랫폼 전용 코드를 독립시킨다.

 

 

UObject를 참조하는 모든 프로퍼티는 UPROPERTY 레퍼런스 이거나 Weak포인터 타입이어야 한다.

 

Struct는 Blueprint 함수를 가질 수 없다.

 

FString : 기본 String, Mutable

 

FName : global map에서 문자열을 해쉬/캐쉬 한다. FName은 단순히 인덱스를 저장하기 때문에 빠른 비교연산이 가능하다. 이름과 경로에 적합하다.

 

FText : 현지화 지원 가능한 문자열, 엔진의 Localization 시스템에서 지원한다. user face 텍스트에 사용된다.

 

LifeCycle

새로운 UObject 할당 : NewObject 함수

새로운 액터 : SpawnActor 함수

 

UObject는 다른 오브젝트들에 의해 참조되지 않으면 자동으로 제거된다.

액터는 Destroy 함수에 의해 제거되고 Garbage 컬렉터에 의해 메모리에서 제거된다.

 

UPROPERTY 매크로 없이 UObject를 만드는 경우 가비지 컬렉터에 보이지 않게 된다.

오브젝트가 컬렉팅 되었을 때 포인터가 메모리의 invalid 데이터를 가리키게 될 수 있다.

 

UObject를 가리키는 포인터

TObjectPtr

TWeakObjectPtr

TSubclassOf

TSoftPtr

TSoftClassPtr

 

UObject를 가리키지 않는 포인터

TUniquePtr

TSharedPtr

TSharedRef

TWeakPtr

 

인터페이스는 C++과 Blueprint에서 선언 가능하다. 블루프린트에서 선언된 인터페이스는 다른 블루프린트에서만 사용 가능하기 때문에 C++에서 선언하기가 권장된다.

 

- Static Function Library

특정 UObject에 속하지 않는 함수, Struct에 기능을 추가할 때 좋은 방법이다.

 

Data Object

데이터 조직, 로딩 방법을 제공한다.

- Data Asset, Data Table, Curve

 

- Delegate & Event

C++에서 이벤트를 구독하고 싶다면 이벤트가 구현되어 있어야 한다.

 

- Subsystem

기존의 클래스를 수정하지 않고도 기능을 확장할 수 있게 해준다.

전역에서 접근할 수 있다.

 

- Async Task Graph

다수의 CPU core에서 실행시키고 싶은 작업하고 싶을때 사용한다.

내부적으로 Thread pool을 사용한다.

 

 

맵 로드나 소프트 레퍼런스를 사용한 Object 로드 요청은 사용자에 의해 핸들링 가능하다.

하드 레퍼런스는 parent Asset에 의해 재귀적으로 로드된다.

 

하드 레퍼런스는 편리하지만 어떤 한 애셋이 프로젝트 나머지 애셋을 모두 참조하는 상황이 만들어지면 메모리와 로드 시간에 문제가 생길 수 있다.

 

가비지 컬렉터는 레퍼런스되지 않거나 Pending Kill 상태인 오브젝트를 1분에 한번씩 제거한다. 이 기능은 오버라이드 될 수 있다.

 

가비지 컬렉터는 Mark & Sweep 메서드를 사용한다. 멀티 쓰레드 작업이며 1프레임에 진행된다. 하지만 실제 Object 파괴는 여러 프레임에 걸쳐 진행된다.

 

- GameMode

레벨마다 존재하는 Object

멀티 게임에서는 서버에만 존재

레벨 변화 시 초기화되므로 데이터 저장에 적합하지는 않음

 

- GameInstance

애플리케이션 라이프타임을 가짐

global singleton이어서 전역에서 접근 가능

 

- GameState

서버에서 클라이언트로 Replicated됨

게임 정보

 

- PlayerState

서버에서 클라이언트로 Replicated 됨

개인 정보

 

- PlayerController

플레이어 컨트롤러는 소유한 클라이언트와 서버에만 존재한다.

 

- Movement Component

다양한 무브먼트 모드 지원

예측을 사용하기 떄문에 온라인에서도 지원되는 기능

 

- Cheat Manager

콘솔 커맨드를 사용하여 기능을 구현할 수 있다.

Ship할때는 지워짐

 

- Ticking

두 그룹으로 나눌 수 있다. Physics 도중, Physics 전

Transform이나 Collision을 사용하지 않는다면 Physics 도중에 틱하는게 좋다.

오브젝트마다 Tick rate, Tick dependency, Tick 활성화 여부를 결정할 수 있다.

Tick은 싱글 스레드로 실행되기 때문에 게임 성능에 중요하다.

매 프레임 Tick할 필요가 없는 오브젝트에 대해서는 Tick Frequency를 줄이자.

 

- Gameplay Ability System

Gameplay Ability를 다루는 멀티플레이어 지원 프레임워크

 

- Mass

많은 수의 개체에 대한 행동을 State Graph를 사용하여 분산 실행하여 다루는 방법

 

- Game Feature 

런타임에서 게임 기능을 켜고 끌 수 있는 플러그인

게임 모드를 컴포넌트 처럼 사용하는 것?

 

 

- 액터 리플리케이션

UProperty 혹은 컴포넌트 전체를 리플리케이트 할 수 있다.

 

- RepNotify

리플리케이트 설정한 변수 값이 바뀌었을 때 로직을 실행할 수 있게 해준다.

 

- OwnerShip

액터를 소유한 플레이어 컨트롤러만이 서버에 데이터를 보낼 수 있다.

서버는 모두에게 데이터를 보낼 수 있다.

 

- Replication Graph 플러그인

어떤 것이 다른 멀티플레이어에게 영향을 줄 것인지에 대한 규칙을 정할 수 있다.

예를 들면 Distance, Visibility 등

어떤 플레이어와 관련 있다고 간주되는 액터만 서버에서 클라이언트로 리플리케이트 하게 해준다.

대규모 멀티플레이어 게임에서 효율적으로 동작할 수 있다.

 

- Remote Procedure Calls (RPCs)

다른 클라이언트에 있는 함수를 호출할 수 있게 해준다.

RPC를 Reliable 혹은 Unreliable 하게 설정할 수 있다.

 

https://forums.unrealengine.com/t/difference-between-property-replication-and-rpc-technically/755737

 

Difference between Property Replication and RPC technically

Property Replication and RPC both replicate data between server and clients. And I have some questions about them. When they replicated? Is it end of tick or something? Is there bandwidth difference between two?

forums.unrealengine.com

 

언리얼 엔진 전용 툴, 플랫폼 전용 툴 모두 프로젝트에서 실행 가능하다.

 

- Visual Logger

Timeline Based 로깅

이벤트를 위한 디버그 비주얼과 메타데이터를 녹화한다.

별도의 구성 없이 네트워크 리플리케이션 로그도 지원한다.

 

- Console 

커맨드를 호출하거나 cVars를 수정하여 Feature를 활/비활성화 하여 Cost를 테스트할 수 있다.

나만의 콘솔 함수/변수를 만들 수 있다.

 

- Unreal Insights

Session Frontend 내부에 있던 나머지 기능들이 이것으로 대체됨

에디터 툴 메뉴에서 실행된다.

이전 툴에 없던 추가적인 기능으로 모든 스레드에서 일어나는 이벤트를 자세하게 보여준다.

메모리 할당 및 각각의 네트워크 패킷을 분석할 수 있다.

CPU, TPU 분석도 가능

에디터와 패키지 빌드 모두에서 사용할 수 있다. (Shipping Build 제외)

프로파일링 데이터를 저장하고 리플레이할 수 있다.

네트워크를 통해 다른 컴퓨터나 장치에 remote Profiling도 가능하다.

Instrumentation 매크로를 코드에 추가하여 세분화된 프로파일링을 할 수 있다.

 

- ProfileGpu

Console Command 한 프레임의 timing을 조사

 

- DumpGPU

한 프레임에서 사용된 모든 리소스들을 Interactive한 html 페이지를 사용하여 조사할 수 있게 해줌

draw Call, internal 버퍼 포함

 

- Gauntlet

빌드된 프로젝트를 실행하고 검증

멀티 플랫폼 자동화 테스트 용도

'언리얼 5 > 에픽 게임즈 공식 강의' 카테고리의 다른 글

Blueprint Communication  (0) 2023.02.22
Gameplay  (0) 2023.02.21
Enhanced Input Binding with Gameplay Tags C++  (0) 2023.02.21
Geometry Script  (0) 2023.02.20
Engine Structure  (0) 2023.02.20

+ Recent posts