공부/Unreal Engine 4 18

UE4 Delegate

Creating Delegate 델리게이트는 매크로를 이용해서 생성을 한당 매크로는 내부에서 TBaseDelegate 객체를 델리게이트 이름으로 타입 정의한닷 델리게이트 생성 매크로는 필요 용도에 따라 종류가 다양하다. 싱글 캐스트 델리게이트 가장 기본적인 Delegate로 함수 1개를 바인드하여 사용합니다. 멀티 캐스트 델리게이트 싱글 케스트와 동일하지만 여러 함수를 바인드 할 수 있습니다. 이벤트 델리게이트 멀티 케스트와 동일하지만 전역으로 설정할 수 없어 외부 클래스에서 추가 델리게이트 선언이 불가능합니다. 다이내믹 델리게이트 다이나믹은 싱글과, 멀티 두개다 존재하며 다이나믹 델리게이트는 직렬화(Serialize)화 되어 블루프린트에서 사용 가능합니다. 델리게이트 생성 매크로는 언리얼 공식 문서에 ..

UE4 플러그인 모듈 참조

플러그인은 다른 모듈을 참조 할 수 있는데, 참조 계층에 따라 참조 할 수 있는 것이 있고, 못 할 수 있는 것이 있다. 언리얼 공식 문서에 따르면, 플러그인과 모듈들은 참조할 수 있는 계층이 정해져 있다. 자신과 같은 층 이상의 모듈과 플러그인만 참조 할 수 있는데, 예를 들면 게임 플러그인은 게임 모듈을 참조 할 수 없단 것이다. 주의할 점은 게임 플러그인은 같은 게임 플러그인을 참조할 수 있다고 나와있지만, 실제로는 의도하지 않은, 권장되지 않은 동작이라는 점이다. 플러그인에서 다른 플러그인의 모듈을 참조할 때 패키징할 때 오류가 나는 것을 확인 할 수 있다. 이는, 엔진이 플러그인을 찾지 못 한다는 것인데, 이유는 엔진이 플러그인 폴더 조사를 게임 플러그인 쪽을 검색을 안 해서 그런 것이다. 엔진..

가비지 컬렉션 / shared_ptr, weak_ptr

가비지 컬렉션 UE4와 C#에선 가비지 컬렉션에서 메모리를 해제해주는 기능을 제공한다. C#은 기본으로 제공해 주지만, UE4에선 UObject를 상속 받는 클래스 객체들만 가비지 컬렉팅 대상이 된다. 가비지 컬렉션은 일정 주기마다 참조되지 않는 메모리를 검색해서 찾아낸다. 검색은 루트라는 곳에서부터 시작해 참조되는 메모리들은 제외하고, 참조되지 않는 메모리들을 가비지 컬렉팅 한다. 루트에는 전역 변수, 스택, 직접 지정한 루트 객체 등이 있다. 가비지 컬렉션은 메모리가 참조가 0이 되는 순간 실행되는 것이 아니고 일정 주기마다 일어나기 때문에 한 번에 많은 양의 메모리를 해제하는 경우가 생긴다. 이 때 프로그램이 버벅이거나 멈추는 일이 생길 수도 있다. shared_ptr c++ 표준에는 참조 카운팅 ..

UE4 UBT(Unreal Build Tool)

UnrealBuildTool (UBT) is a custom tool that manages the process of building Unreal Engine 4 (UE4) source code across a variety of build configurations. Read BuildConfiguration.cs to explore various user-configurable build options. 위는 UBT에 관한 언렬 공식 문서에서 발췌한 글임 쉽게 말해서 다양한 빌드 옵션들과 다양한 플랫폼에 맞게 프로젝트를 자동으로 빌드해주는 툴이다. 언리얼 빌드 툴이 실행되면 프로젝트의 폴더 구조와 소스 파일들을 분석하고 현재 작업하고 있는 플랫폼에 맞게 개발 도구 환경을 자동으로 생성해 준다. 윈도..

UE4 Patch System

빌드, 쿠킹, 패키징 - 빌드란? 선택한 플랫폼에서 실행 가능한 실행 파일을 만드는 것이다. - 쿠킹이란? 선택한 플랫폼에서 사용할 수 있는 포맷으로 컨텐츠들을 변환하는 과정이다. 예를 들어 안드로이드 플랫폼에 대한 쿠킹을 할 땐 텍스쳐 에셋의 RGB 포맷을 안드로이드에서 더 효율적인 ETC 포맷으로 변환 시키는 것이다. - 패키징이란? 패키징이란 사용자에게 배포하기 위해 컨텐츠와 소스들을 컴파일, 빌드, 쿠킹, 패킹을 하는 일련의 과정이다. pak - pak이란? 원래 컨텐츠들이 각자 별개의 umap이나 uasset 같은 형태로 저장되 있는 걸 하나의 파일로 묶은 형태다. - pak을 써야하는 이유 패치를 할 때 uasset을 이용하면 파일의 갯수가 많아 패치 속도가 느려지고, 압축이 안 되 용량도 더..

UE4 Mounting Pak File

UE4에서 pak 파일을 어떻게 마운팅 하는지, 마운팅이 뭔지에 대해 글을 번역한 거다 :) FPakPlatformFile은 pak에 대한 처리를 한다. FPakEntry은 uasset 한 개와 연결되있고, FPakFile은 pak 파일 한 개와 연결되있다. FPakPlatformFile은 FPakFile 배열을 갖고 있고 각 FPakFile은 여러 개의 FPakEntry를 갖고 있다. FindFileInPakFiles란 함수를 보면 알 수 있듯이 인자로 찾을 파일 이름과, FPakEntry, FPakFile 포인터를 넘겨준다. 만약 파일을 찾았다면 FPakEntry 포인터엔 asset에 대한 정보가 들어가고 FPakFile 포인터엔 asset을 찾은 pak에 대한 정보가 들어간다. 이 특정한 FPakE..

UE4 4.24에서 4.25로 버전 업 이슈

4.24에서는 패키징하기 위해서 Codeworks for Android 1R7u1와 NDK r14b를 이용했었음 근데 4.25로 버전 업을 하면서 더 이상 사용이 불가능해지고 Android Studio와 NDK r21을 써야 함 Android Studio를 설치하기 전엔 꼭 기존 Codeworks와 NDK 폴더 삭제해줘야 함 걍 C 디렉토리에 있는 NVPACK 폴더 삭제 권장 관련 언리얼 공식 문서 : https://www.unrealengine.com/en-US/tech-blog/updates-to-required-setup-for-android-ndk-21-in-unreal-engine-4-25

게임에서의 청킹 최적화(Optimizing game for chunked downloading)

중규모 이상의 게임을 패키징할 땐 게임 컨텐츠를 여러 개의 청크로 나눠 초반 다운로드 사이즈를 줄이고 패치 속도를 더 올리고 로딩 시간을 줄인다. PC랑 콘솔에선 큰 크기의 청크를 소수 만드는게 좋고 모바일 환경에선 작은 크기의 청크를 여러 개 만드는 게 좋다. 언리얼 엔진 4에선 청킹을 하고 분석과 최적화를 위한 툴들을 제공한다. 청킹 셋업 청크란 독립적으로 배포가 가능하고 다운로드를 할 수 있는 에셋 묶음이다. 프로젝트는 기본적으로 모든 게임의 컨텐츠를 포함하고 있는 Chunk0 이라고 부르는 한 개의 청크를 갖고 있다. 에셋들을 여러 개의 청크로 분리한 후엔 엔진은 각 청크마다 독립적으로 .pak파일을 생성해준다. 청크를 만들 땐 AssetManager을 쓰는 방법이 가장 대표적인 방식이다. 에셋을..