언리얼 엔진 튜토리얼 정리.
링크 - https://dev.epicgames.com/community/learning/tutorials/lMr9/unreal-engine-begin-play-programming
모듈 : 여러 클래스의 집합. C# 빌드 파일 하나가 클래스의 빌드 방식 설명.
플러그인 : 모듈과 에셋의 집합.
게임 피처 플러그인(Game Features Plugin) : 런타임에 기능을 활성화할 수 있는 특별한 플러그인.
Unreal Build Tool : C#으로 짜여진 툴. 언리얼 프로젝트 파일 생성. SDK의 플랫폼 별 의존도 체크.
프로젝트 파일 생성
소스 코드 : 모듈과 플러그인으로 이루어져 있음. c++ 코드.
컴파일 : IDE나 에디터로 진행됨.
Unreal Automation Tool : C#으로 짜여진 툴. 빌딩, 쿠킹, 패키징을 진행.
빌드 : 소스코드를 컴파일하고, 바이나리 파일 생성.
쿠킹 : 에셋들을 언리얼 내부 포맷에서 플랫폼 특화 포맷으로 변환.
패키징 : 컴파일된 코드와 쿠킹된 에셋들을 묶어 pak 파일로 만듬.
이후 배포 및 출시를 위한 최적화나 환경설정 등을 진행.
C++ 코드의 요소를 블루프린트와 필요한 언리얼 시스템에 노출시킴.
UObject : 모든 엔진 클래스의 베이스 클래스. 자바로 따지면 Object 클래스인듯. 엔진에 노출되어 자동 메모리 관리나 리플렉션 등등 가능해짐. 파생 클래스들은 앞글자가 U.
Actor : 레벨에 배치될 수 있는 모든 것의 베이스 클래스. 세션이나 커넥션?도 처리? Tick() 내재. components를 보관하는 용기. 파생 클래스는 앞글자가 A.
Components : Actor에 붙어서 게임을 실제로 표현하는 것들.
Life Cycle
Asset Loaded
PostLoad/PostActorCreated
initialize Components
OnActorSpawned
BeginPlay
생성 :
UObject는 NewObject로 동적 생성.
AActor는 SpawnActor로 동적 생성.
파괴 :
AActor는 Destroy() 호출 가능.
UObject는(Actor도 UObject) 레퍼런싱 하고 있는게 아무것도 없을 때 가바지 컬렉터가 알아서 메모리 해제.
※ new나 delete, 스마트 포인터 등으로 직접 메모리 관리를 하려고 하지 말것. 가비지 컬렉터에 맡겨라.
※ UPropery 매크로 없이 UObject에 포인터를 사용하지 마라.
Smart Pointers
UObject 파생 클래스에 사용하는 포인터 :
UObject 아닌 것에 사용하는 포인터 :
각자가 무슨 역할인진 나중에 더.
Interface :
우리가 아는 그 인터페이스. 다른 언어와 다르게 인터페이스의 모든 함수를 구현할 필요는 없다고 함. blueprint에 노출됨. c++에서 인터페이스를 다뤄본 기억이 없는데 java 인터페이스랑 비슷하려나?
정적 함수 라이브러리 Static Fuction Library :
어디서든 호출 가능한 정적 함수 만드는 라이브러리. 구조체에 함수 기능 추가할 때 유용.
Data Object
데이터 보관용 오프젝트.
Delegate, Event :
listener를 Bind했다가 event를 broadcast.
SubSystem :
추가하면 원래 있는 클래스들을 건드릴 필요 없이 모듈적으로 기능 확장 가능. Engine, Editor, GameInstance, LocalPlyaer 스코프 서브시스템으로 나뉨. 자세한 건 언리얼 사이트의 프로그래밍 서브클래스 참조.
Async Task Graph :
여러 CPU에서 사용되거나 비동기 스레드 작업에 사용될 수 있는 task graph. task graph가 뭐지..?
에셋 로딩 :
자동적으로 로드 할 수도 있고 소프트 레퍼런스에서 로드하도록 요청도 가능.
Garbage Collector :
UPROPERTY 멤버를 자동으로 메모리 관리. 아무도 레퍼런싱 하지 않는 객체는 메모리 해제 대상이 됨.
※ 하드 vs 소프트 레퍼런스 차이 :
A가 B를 하드 레퍼런싱 하면 A 에셋이 로드 될 때 B 에셋도 같이 로딩됨. 반면 소프트 레퍼런싱을 할 경우엔 에셋을 로드하지 않고 그냥 주소만 갖고 있음. 소프트 레퍼런스와 인터페이스를 통해 하드 레퍼런스의 의존도를 줄일 것.
GameInstance :
게임 프로그램이 실행 될 때 부터 꺼질 때까지 살아있는 오브젝트.
GameMode :
실행 흐름을 정의하는 클래스. 서버에만 존재. 레벨 별 오브젝트. 하드 레벨 전환시 소멸.(하드 vs 소프트 레벨 전환은 나중에 더 공부.)
GameState :
게임 모드의 보조 클래스. 서버와 클라이언트, 양 쪽에 존재하고 서버 -> 클라이언트로 리플리케이트 됨. 팀 대전 게임에서 점수 상황이라던가 플레이어 목록 같은거 저장해 놓는 용도.
Player / AI Controller :
폰(Pawn)의 두뇌 역할. 플레이어를 상징하는 클래스 같은 느낌. 서버와 소유하고 있는 클라이언트에 존재. 서버와 클라이언트는 이 컨트롤러를 통해 소통. 조종하는 폰을 쉽게 바꿀 수 있기 때문에 입력 같은 건 폰 말고 컨트롤러 클래스에서 정의하는 걸 권장.
Pawn / Character :
폰은 컨트롤러가 조종하여 행동을 수행하는 물리적인 몸 actor. 캐릭터는 걷고 뛸 수 있는 폰의 한 종류.
Movement Component :
폰에 부착되어 여러 움직임을 구사할 수 있는 컴포넌트. Online-ready movement framework -> 온라인에서도 자연스럽게 보일 수 있게 여러 기능을 보조하는 듯..? 더 공부해 볼 것.
Input Component :
플레이어 입력을 지정된 곳으로 전달. 언리얼 5에서는 Enhanced Input으로 대체되어 가는 듯.
Cheat Manager :
배포 버전에 실수로 포함시킬 걱정 없이 개발에 필요한 치트 구현하는 곳.
기타
Ticking :
틱. 한 틱에 실행될 코드를 Tick()에 넣어둠. 간격 설정 가능. 틱은 단일 스레드로 처리됨. 무거우니 최대한 적게.
Gameplay Ability System :
RPG나 MOBA 타이틀에서 볼 수 있는 어빌리티 및 어트리뷰트 유형을 구축하기 위한 고도로 유연한 프레임워크. 게임플레이 어빌리티 시스템과 상호작용하는 액터에는 어빌리티 시스템 컴포넌트(Ability System Component) 가 있어야 함.
Mass :
매스 엔티티(MassEntity) 는 언리얼 엔진 5에서 사용 가능한 데이터 지향 계산을 위한 프레임워크.. 라는데 잘 와닿지 않음. 대규모 데이터 계산이 필요할 때 사용하는 프레임워크인듯.
Game Features :
런타임에 안전하게 활성/비활성화 가능.
Replication :
클라이언트/서버 중심. 세션과 연결, 각 플랫폼에서 클라이언트-서버 간 통신 등을 처리.
라고 써져있긴한데 이렇게 쓰니까 뭔가 와닿진 않네..
Actor Replication :
property와 모든 컴포넌트를 리플리케이트 가능.
관련성(Relevance) :
플레이어와 관련성 있는 액터만 클라이언트에게 리플리케이트 됨.
Replication Graph :
이 플러그인을 통해 액터가 다른 클라이언트에 어떻게 리플리케이션 되는지 정할 수 있음. 가시성이나 거리같은거.
소유권(Ownership) :
플레이어가 소유한 액터만이 서버에 데이터 전송 가능. 서버는 다 가능.
RepNotify :
리플리케이티드 변수가 바뀔 때마다 실행될 로직을 여기에 설정 가능.
Property Replication :
UProperty가 replicated로 설정되었다면 그 값이 바뀔때마다 서버가 클라이언트에게 알려줌.
RPCs :
원결 프로시저 호출(Remote Procedure Calls). 다른 클라이언트에 함수를 호출하는 기능.
안정성(Reliability) :
Reliable calls는 호출이 발생할 것을 보장함. unreliable은 트래픽 문제 등으로 안될 수도 있음.
리플리케이션 설정 보면 Reliable 체크하는 게 있던데 중요한 것들은 이걸 체크하면 좀 더 리소스를 써서 호출을 보장하고, 별로 안 중요한 것들은 해제해 놓는 그런 거 말하는듯.
Logging :
UE_LOG 매크로로 로그 사용. 여러 카테고리 있음.
Visual logger :
타임라인 기반으로 작동하는 로깅 툴. 여러 시각적인 표현 생성 가능.
Console :
에디터에 있는 콘솔창으로 여러 명령 실행 가능.
Unreal Insights :
메모리라던가 분석에 특화된 툴인듯. 개발자가 병목 현상을 식별하여 애플리케이션 최적화를 통해 퍼포먼스를 개선할 수 있도록 지원..한다고 함.
CSV Profiler :
프레임 별 렌더랑 게임 스레드 분석용. 언리얼 인사이트 쓰는 게 낫다함.
LLM :
태그 기반 저수준 메모리 추적기. Low Level Memory tracker. 언리얼 인사이트 쓰는 게 낫다함222
ProfileGPU :
gpu 분석기인가부지.
DumpGPU :
한 프레임의 내부 리소스를 모두 덤핑한 후, 이걸 인터렉티브 html을 만들어서 보여줌.
Gauntlet :
빌드 실행하고 유효성 검사하는 프레임워크.
여러 플랫폼에서 세션 실행 자동화하는 것이 목적. 자동화 테스트에 적합.