일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 약참조
- UML관련
- BFS
- 데이터애셋
- unorder_map
- 크리티컬섹션
- UE_LOG
- dataasset
- enumasByue
- 알고리즘
- 애셋로드
- 정렬알고리즘
- 스마트포인터
- 비동기호출방법
- 람다
- C++최적화
- makeweakobjectptr
- 프로그래머스
- 선택정렬
- moreeffectiveC++
- 자료구조
- C++
- 구조적 바인딩
- 언리얼가비지컬렉터
- 정렬
- map
- 델리게이트
- stl
- 강참조
- tweakobjectptr
- Today
- Total
목록전체 글 (432)
기억을 위한 기록들
https://medium.com/devserum/5%EB%85%84%EC%9D%98-%EB%B0%A4-326eaf77f60e 5년의 밤‘518일동안 단 하루도 빠지지 않고 알고리즘을 풀었다.’의 후속글medium.com
C++에서 printf처럼 인자의 개수가 고정되지 않은 함수를 구현할 일이 있다면, va_start를 중심으로 한 헤더의 가변 인자 매크로들이 필요하다. 이 매크로들은 C 스타일에서 유래했으며, 여전히 시스템 프로그래밍이나 엔진 코드에서 종종 사용된다고 한다. va_start 매크로란?va_start는 가변 인자를 순차적으로 읽기 위한 준비를 하는 매크로이다. 함수에서 고정된 인자 이후에 몇 개의 인자가 더 들어올지 알 수 없기 때문에, 컴파일 타임이 아닌 런타임에 인자 목록을 읽어야 한다.이때 va_list라는 타입을 선언하고, va_start를 통해 이 목록의 시작 위치를 잡습니다. 이후 va_arg로 하나씩 꺼내쓰고, 마지막엔 va_end로 정리합니다. 예 : #include #include ..

언리얼엔진에서 월드 내의 특정 액터들을 효율적으로 찾고 순회하는 방법으로 TActorIterator 라는 템플릿 클래스가 있다. UWorld안에 존재하는 액터들을 타입 기반으로 자동 필터링하며 순회하는 템플릿 반복자로써, 액터들을 찾기 위한 함수 중에 하나로 GetAllActosOfClss() 라는 함수를 예전에 사용 했었지만, 결국 이 함수도 내부적으로 TActorIterator를 기반으로 TArray를 할당하고 복사를 발생시켜 비용이 크다. 예시) 월드안에 있는 AMyEnemy 기반 혹은 자식 클래스 액터 탐색하기for (TActorIterator It(GetWorld()); It; ++It){ AMyEnemy* Enemy = *It; if (Enemy->IsAlive()) ..
언리얼엔진에서 UObject 객체들에 참조하려고 할 때, 유효성 검사하더라도 포인터만 남아서 문제가 생길 때가 있다. UObject* CachedObject = GetSomeObject(); // 이 시점엔 유효// ...if (CachedObject) // 이게 true라도 실제 메모리는 이미 파괴되었을 수 있음{ CachedObject->DoSomething(); // 크래시 가능} 혹은 FTimerDelegate TimerDel;TimerDel.BindLambda([=](){ MyObject->DoSomething(); // MyObject는 이미 GC에 의해 삭제됐을 수 있음 });이럴때의 TWeakObjectPtr 템플릿으로 감싸서 IsValid 검사를 하며 사용할 수 있다. 객체가..

블루프린트에서 비동기방식을 다루고 싶다면 UBlueprintAsyncActionBase 클래스를 사용하자. 옛날에 블루프린트 상에서 다른 애셋에 대한 로딩을 하는 과정에서 기다리기 위해 임의로 delay 블루프린트 함수를 쓰는 걸 본 적이 있었다. 다른 좋은 방법은 그 당시에 생각나지 않았고, delay로 임의의 시간을 입력하고 그렇게 사용하는게 좋지 않다는 것만 인지하고 지나간 기억이 있다. 그러다가 최근에 알게된 클래스가 UBlueprintAsyncActionBase 이다. 예를 들어 서버 요청 응답, 외부 SDK 호출이나 다운로드, 내부 로직 처리 대기 등등 을 블루프린트에서 기다리고 싶을때 UBlueprintAsyncActionBase 클래스를 사용하면된다. 예로 살펴보면 해당 코드는 LyraS..
언리얼엔진에서는 문자열 인코딩 타입 변환에 필요한 TCHAR_TO_UTF8 등등의 매크로가 있다. 이 매크로는 사실 DEPRECATED 될 예정이라고 나와있는데, 주석이 되어있는걸 보면 아직 공식적인걸 아니긴 하지만, StringCast함수를 사용하라고 나와있다. 언리얼 5 버전 중에 주석 해제하려고 저렇게 남겨놓지 않았나 싶다... 해당 매크로의 내부를 살펴보면 아래와 같다.#define TCHAR_TO_ANSI(str) /*UE_DEPRECATED_MACRO(5.xx, "TCHAR_TO_ANSI(Ptr) is deprecated, please use StringCast(PtrToTChar) instead.")*/ (ANSICHAR*)StringCast(static_cast(str)).Get()#de..
언리얼엔진에서 모바일 앱들에 대해 앱 이름을 지정해줄 수 있다. 하지만, 추가로 모바일 기기 자체에 설정된 언어에 따라 앱 이름이 현지화 적용되어 필요한 경우도 있다. 그 방법을 살펴보자. Android - strings.xml로 다국어 처리하기1. 경로: "프로젝트/Build/Android/res/"이곳은 Android 리소스가 들어가는 위치로 해당 경로에 추가해줘야한다. 2. 국가별 폴더 생성아래와 같은 형식으로 언어별 폴더를 생성한다한국어: values-ko영어: values-en일본어: values-ja베트남어: values-vi중국어 간체 : zh-rCN중국어 번처 : zh-tTW등등..3. 각 폴더에 strings.xml 생성예시: values-en/strings.xml MyGame 예시:..
std::pair p = {6, 8};auto [w, h] = p; • w는 p.first와 같은 값 (6) • h는 p.second와 같은 값 (8) 즉, pair나 tuple의 요소들을 자동으로 개별 변수로 분해해서 바인딩해주는 문법이다. 하지만 자칫 잘못하면, 더 헷갈릴 요소가 될수도 있을것 같긴하다. int arr[3] = {1, 2, 3};auto [a, b, c] = arr;//a = 1, b = 2, c = 3 struct Point { int x; int y;};int main() { Point pt{5, 7}; auto [x, y] = pt; std::cout
요 근래 몇 개월 동안 바쁘다는 핑계로 블로그에 글을 제대로 쓰지 못했다..이러니저러니해서 어떤 주제로 쓸까에 대해 고민을 하던 와중에, GeekNews에서 흥미로운 주제가 있어서, 가져와 봤다. https://news.hada.io/topic?id=19461 AI 시대에도 블로깅은 여전히 가치가 있습니다 | GeekNews사람들이 모두 ChatGPT, Claude, DeepSeek를 사용하고, AI가 답변을 떠먹여 준다면 블로깅의 의미가 무엇일까? AI 외에 누가 당신이 쓴 글을 읽을까?"블로깅은 그저 읽히는 것이 아니라 배우고 생각하는news.hada.io 주제는 AI 시대를 맞이하면서도, 블로그 자체에 대한 가치 의문증이 나 스스로도 생기고 있었다. 내가 예전에 오랫동안 혼자 공부할 때, 인터넷 서..

최근에 안드로이드 라이브러리를 제공받아 언리얼엔진 프로젝트에 적용해야 하는 작업을 진행했고, 그 과정에서 경험했던것에 대해 나중을 위해 적어보려고 한다. (글에 틀린 부분이 있을 수도 있습니다.) 우선 안드로이드 라이브러리에 대해서 간단하게 알아보면 안드로이드 스튜디오를 통해 작성된 java 기반 aar 파일, 혹은 jar 파일이 있다. jar파일은 Java archive 의 약자로 자바로 생성된 클래스파일과 이미지등의 리소스 파일들의 포함되고, aar파일은 Android archive의 약자로, 안드로이드에 특화된 Jar파일이라고 보면 된다. aar파일은 안드로이드의 layouts, drawables 등 리소스 파일이 포함될 수 있다. (jar파일, aar 파일의 내부를 보려면 확장자를 zip으로 변..
1. Q dir윈도우 용 다중 창 탐색기로 윈도우 탐색기 4개를 동시에 띄워놓고 사용하고 있다. 처음엔 좀 어색했는데 적응하니 편한거 같다. 개인적으로 추천! 2. Beyond Compare퍼포스를 사용해보면서 기본 내장된 diff툴이 마음에 들지 않아 찾아보다가 예전부터 유명한 diff툴로 30일 무료 체험해보고 개인적으로 결제해서 계속해서 쓰고 있다. 다른 diff툴을 많이 사용해보지 않아서 비교하기 어렵지만, 기본 diff툴보단 개인적으로 좋아서 그냥 쓰는 중. 3. Jetbrain Rider언리얼엔진 ide로 visual studio 대신 사용중이다...각각의 장단점이 있고 아직 비교해보기 어렵다. 좀 더 사용해보고 후기를 적어볼까한다 4. Visual Studio Code 활용 ->CSV 뷰어..

(해당 정보는 대부분 웹 서칭을 통해 찾아보고 나중에 제가 혼자 참고하려고 정리해보고 있습니다.) 렌더링 프로세스에 대해 Game thread(게임 스레드)에서 Slate Tick은 프레임당 두 번 위젯 트리를 탐색.1번 틱 :Prepass 트리를 아래->위로 탐색하여 각 위젯의 이상적인 크기( DesiredSize )를 계산.2번 틱: OnPaint 트리를 위->아래로 탐색하여 렌더링에 필요한 Draw Elements 를 계산. Render Thread에서 Slate 렌더링은 두 단계로 나뉜다.1. Widget Render: UI의 RTT를 수행합니다. Retainer Box를 사용하는 경우 Draw Elements는 Retainer Box의 Rtain Target에 렌더링됩니다.2. Slate R..