오블완 22

Unreal Object Handling

언리얼 오브젝트 핸들링이란? UObject 시스템의 기능에 대한 개요로,클래스, 프로퍼티, 함수에 적합한 매크로로 마킹해주면,UClass, UProperty, UFunction 으로 변한다.그러면 언리얼 엔진이 접근할 수 있어,다수의 내부적인 처리 기능을 구현할 수 있다. 자동 프로퍼티 초기화 UObject는 생성자 호출 전 초기화시 자동으로 0으로 채워진다.이러한 초기화 과정은1) 전체 클래스, 2) UProperties(GC시스템에 의해 관리되는 변수들), 3) 네이티브 멤버(C++로 선언된 일반 멤버 변수)모두를 포함한다. 이후 생성자에서 원하는 값으로 초기화할 수 있다. 즉, 이 말은자동 초기화 후에, 생성자에서 커스텀 초기화가 가능하다는 뜻이다.자동 추기화는 앞서 말했듯이UObject가 생성될 ..

UE5 08:11:17

STL의 vector, push_back()과 emplace_back()

push_back , emplace_back 둘의 공통점push_back , emplace_back은두 함수 모두 vector컨테이너가 주어졌을 때 한 칸을 늘리고 해당 값을 넣어주게 된다. 둘의 차이점그러나 내부적으로 동작하는 것은 조금 다른데, push_back의 경우push_back의 경우 메모리를 이동하거나 임시 객체를 이용하여임시객체가 생성되고 넣어준 뒤에 임시 객체가 삭제되는 호출이 있다.-> 복사의 개념 emplace_back의 경우대신 emplace_back은 받은 인수를 이용해 내부에서 생성자를 통한 객체 생성 후추가를 하기 때문에 임시 객체의 생성, 파괴가 없어서 push_back보다 효율적일 수 있다.-> 이동의 개념

Custom Editor - Asset Duplicate Editor 플러그인 생성

해당 Type은 플러그인이 영향을 미칠 콘턴츠의 경로가 결정된다.이것은 게임 코드에 영향을 미치는 플러그인이라면 런타임이 되기를 바라겠지만,이제 내가 만들 건 편집 도구이니까, Editor에 영향을 미치길 바란다.따라서 영향을 미치는 Type을 Editor로 변경해준다.따라서 이 플러그인(모듈)은 로드되는 시기에 결정된다.  이제 LoadingPhase를 기본값으로 설정된 것 대신 사전 기본값으로 변경하자.이제 이 플러그인은 게임 모듈보다 먼저 로드되며,이러한 설정은 내가 만들고자 하는 사용자 정의 편집기 도구에 적합한 설정이다. 사용자 정의 편집 도구의 기능은 총 2가지를 가질 것이다. 첫째는, 애셋의 수를 줄이고 늘리거나 하는 에셋에 대한 작업둘째는 레벨에 올려져있는 액터 자체에 대한 작업이다. 에셋..

언리얼 내부 - 모듈 (Modules)

모듈이란?모듈은 언리얼 엔진과 우리가 사용하는모든 것을 구성하는 블록이라고 생각할 수 있다.언리얼 엔진 내부는 기본적으로 모듈이다.그리고 편집기를 확장하려면 자체 모듈과리소스 드롭다운을 만들어야 한다. 이전에 모듈에 대해서 포스팅을 했으니이번 포스팅에서는 간단히프로그래머가 알아야 할 세가지 주요 사항만 언급하겠다. 프로그래머가 알아야 할 세 가지 모듈의 주요 사항1. 모듈은 좋은 코드 분리를 강제하며 이런 특징은 매우 유용하다.언리얼 내부에는 많은 코드가 있지만어떻게든 코드끼리는 서로 통신해 하는 상황에서 모듈은 좋은 구조를 가진다.언리얼 엔진은 상호 종속적인 모듈과 플러그인을 지원한다.프로젝트 모듈은 파일에서 플러그인을 활성화하여 플러그인에 종속될 수 있다.프로젝트 모듈은 엔진 모듈에 종속될 수 있지만..

UE5 2024.11.25

프로그래머스 LV.1 모의고사

https://school.programmers.co.kr/learn/courses/30/lessons/42840 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr    해당 문제는 완전탐색 문제이다. 완전 탐색이란,가능한 경우의 수를 모두 나열하면서 원하는 답을 찾는 방법이다.따라서 해당 경우의 수를 하나하나 if문으로 찾아주면 된다.  내가 처음에 낸 풀이#include #include #include using namespace std;vector solution(vector answers) { vector answer; vector results = { 0,0,0 }; ..

인터페이스

C++ 에는 인터페이스가 없다.따라서 추상클래스로 인터페이스를 구상한다.근데 추상클래스와 인터페이스는 어떻게 구분할까?Interface와 abstract의 차이는 Interface는 함수만 있다는 것이다.또한 인터페이스는 다음과 같이 정의한다. // IFlyable.hclass IFlyable{public: virtual void Fly = 0}; 인터페이스는 클래스 명 앞에 I라는 대문자를 붙여준다.이는 인터페이스임을 명확하게 하기 위해서이다. 또한 함수는 순수가상함수로 만들어준다.인터페이스는 다중 상속을 허용한다. 인터페이스 정리 인터페이스 C++은 자체적으로 인터페이스를 지원하지 않는다. 순수 추상 클래스를 사용해서 Java의 인터페이스를 흉내낸다 순수 가상 함수만 가진다 멤버..

가상 소멸자와 비 가상 소멸자

비 가상 소멸자가상 소멸자를 안쓰는 경우는 어떻게 될까?가상 소멸자가 뭐길래, 가상 생성자는 없으면서가상 소멸자가 메모리 누수를 방지한다고 할까?왜 소멸자에 가상 키워드를 넣어야할까? 그에 대한 예시를 다음과 같이 추상화한 그림을 통해 알아보자. myCat이 delete될 경우(virtual 소멸자가 아닌 경우) 왜 그럴까?전에 정리한 가상 테이블을 기억해내면 금방 왜 그런지 알 수 있다. 만약 virtual 키워드를 붙였을 경우 즉 자신의 실 자료형에 맞는 소멸자를 호출하기 위함이다. 가상 소멸자는 매우 중요하다.반드시 유의할 점은,모든 클래스마다 가상 소멸자를 꼭 써줘야 한다.근데 가상함수 느리다면서가상 소멸자가 있는 클래스를 상속받지 않아도 이러라고? 싶을 수 있다. 근데 업캐스팅 해서 쓸 때,부모..

프로그래머스 LV.1 달리기 경주

https://school.programmers.co.kr/learn/courses/30/lessons/178871 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 1. 이중 포문으로 풀기 (시간 초과) 시간 초과가 난 코드 - 아마 이중 포문 때문일 거 같다. player의 길이가 50000까지이고, calling의 길이가 1000000이니 시간 초과가 날만하다. #include using namespace std; bool cmp(const pair& a, const pair& b) { return a.second < b.second; } vector solution(vector players, ve..

카테고리 없음 2024.11.20

템플릿의 장단점

템플릿의 장점템플릿이 다른 제네릭 프로그래밍보다 Type Safe하다.템플릿은 컴파일 타임에 받을 수 있는 모든 타입을 오버로딩한다.따라서 템플릿은 제대로 사용하기만 한다면 타입 안전성을 보장한다.하지만 다른 제네릭 프로그래밍은void*로 변환하여 값을 받아오기 때문에,위험성이 따른다.템플릿의 단점템플릿은 동형(homogenous)데이터 구조만 지원한다.데이터 구조마다 한가지 타입으로 된 객체만 저장할 수 있다.앞서 말했듯 템플릿은 동형 데이터 구조만을 지원하며,이를 위해 컴파일 타임에 받아올 모든 타입을 오버로딩하기 때문에,최종 바이너리 코드의 크기가 커지는코드 비대 현상이 발생한다.각 템플릿 인스턴스에 고도로 특화된 코드는그보다 느리지만 범용적인 코드보다 길어지는 경향이 있다.+템플릿과 상속 둘 중 ..

힙을 이용한 데이터 리스트 병합

유전자 관련 생명의학 응용 프로그램에서대용량 데이터셋을 처리하는 경우를 가정해보겠다.유사성을 계산하려면 정렬된 DNA 순위가 필요하다. 그러나 데이터셋이 너무 방대하기 때문에 단일 머신에서 처리할 수 없다.그러므로 분산 클러스터에서 데이터를 처리하고 저장하며,각각의 노드는 일련의 정렬된 값이 있다. 주 처리 엔진은 이들 데이터를 모아서 정렬된 단일 스트림으로 변환해야 한다.다수의 정렬된 배열을 합쳐 하나의 정렬된 배열을 만드는 기능을 벡터로 제작해보자. 각각의 리스트는 이미 정렬되어 있기 때문에각 리스트의 최소 원소는 맨 앞에 위치한다.힙에서 최소 원소를 가져온 후 이를 제거하고,최소 원소가 있던 리스트에서 그 다음으로 작은 원소를 선택해 힙에 추가한다. 힙의 노드는 이 원소를 어느 리스트에서 가져왔는지..