전체 글 62

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..

[백준] 2677번 - 단지 번호 붙이기

문제 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집들의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된 것이 아니다. 는 을 단지별로 번호를 붙인 것이다. 지도를 입력하여 단지수를 출력하고, 각 단지에 속하는 집의 수를 오름차순으로 정렬하여 출력하는 프로그램을 작성하시오. 입력 첫 번째 줄에는 지도의 크기 N(정사각형이므로 가로와 세로의 크기는 같으며 5≤N≤25)이 입력되고, 그 다음 N줄에는 각각 N개의 자료(0혹은 1)가 입력된다. 출력 첫 번째 줄에는 총 단지수를 출력하시오. 그리고 각..

partial 키워드

Partial Class, Struct, Interface C#은 클래스를 한 곳이 아닌 여러 소스 파일에서 정의를 할 수 있다. 그리고 컴파일할 때 나눠진 partial class들을 합친다. 한 partial class의 코드는 나중에 하나로 합친 클래스에 영향을 미치는데, 예를 들어 순수 가상 함수를 한 partial class에서 정의하면 클래스 전체가 추상화 된다. 또 서로 다른 partial class에서 여러 클래스들을 상속 받았을 때 컴파일 과정에서 전체 클래스는 partial class들이 상속 받은 모든 클래스들을 모두 상속 받는다. partial class Earth : Planet, Rotate {} partial Class Earth : Moon {} partial class Ea..

공부/C++ \C# 2020.07.14

double linked list 구현

싱글 링크드 리스트와는 다르게 노드가 이전 노드와 이후 노드를 둘 다 가르기코 있음!.! 특이하게도 처음 생성자에서 head와 tail이 아무런 값을 가지고 있지 않은 더미 노드를 가르키게 만들어 준당 더블 링크드 리스트에선 특정 위치의 노드를 삭제하거나 삽입 할 때 노드들을 연결해주는 linkNodes를 구현했다 :) template class doubleLinkedList { public: // push back element! void push_back(T element) { node* newNode = new node(element); linkNodes(tail, newNode); ++size; } // find element at selected index node* findNode(int fi..