목록2023/01 (6)
KoreanFoodie's Study

SafeZone 위젯 핵심 : 1. SafeZone 위젯을 사용하면, 콘솔/PC/모바일 등 에서 패널 가장자리에 UI 및 컨텐츠가 제대로 출력이 되지 않는 문제를 해결할 수 있다. 먼저, SafeZone 패널에 대한 언리얼 엔진의 설명은 다음과 같다 : 언리얼 공식 문서에 있는 세이프 존에 대한 그림을 보자. 왼쪽은 SafeZone 위젯이 없는 경우이고, 오른쪽은 SafeZone 위젯이 있는 경우이다. 오른쪽의 경우, Uniform Safe Zone (균등 세이프 존) 영역을 0.9(빨강) 으로 설정했다. 이렇게 세이프 존을 활용하면, 가장자리의 "Unsafe" 한 존에 위젯이 잘리는 것을 방지할 수 있다! 참고 : 언리얼 공식 문서

언리얼의 Cast 동작 원리 핵심 1. Cast 는 UObject 에 쓰여야 한다. Cast 는 static_cast 와는 달리 타입 안정성을 지닌다(nullptr 를 리턴). 2. Cast 의 런타임 비용은 에디터 환경에서는 O(O(Depth(InheritanceTree))) 이고, 에디터가 아닐 때는 O(1) 이다. 3. Cast 는 dynamic_cast 를 사용하지 않는다. dynamic_cast 대신 Cast 를 사용하라! 실제로 언리얼의 Cast 는 다음과 같이 구현되어 있다 : // Dynamically cast an object type-safely. template FORCEINLINE To* Cast(From* Src) { return TCastImpl::DoCast(Src); } 내부..

UObject 의 클래스 타입 체크 (런타임) 우리가 아이템을 사용하는데, 소모품일 경우 수량을 깎는 코드를 짠다고 가정해 보자. 코드는 다음과 같다. if (nullptr != Cast(myItem)) { this->consumeItem(myItem); } else { this->useItem(myItem); } (물론 현실적으로 이런 경우, FConsumable 클래스에서 useItem 을 override 하겠지만.. 여튼) 위처럼, 객체의 클래스 타입을 체크하는 경우, 어떻게 하는 것이 효율적일까? 위와 같은 경우에, 만약 캐스팅이 실제로 필요한 경우가 아니라면(즉, 그냥 타입 체킹만 하면 되는 경우라면), Cast(언리얼의 Cast 는 업/다운 캐스팅을 할 수 있도록 구현되어 있다)를 쓰는 것보다..

텍스트 조회 보통 프로젝트 규모가 커지게 되면, 각종 스트링들을 스트링 테이블에 넣어서 사용할 것이다. 이때 스트링 테이블은 Namespace 와 키 값 두 개가 있고, 원하는 Namespace 에서 키를 대입해 원하는 텍스트를 찾게 된다. Namespace 는 간단히 말해 스트링 테이블 파일의 이름이라고 보면 된다. 실제로 C++ 코드로 짜면, 다음과 같다 : FText findText; FText::FindText(TEXT("your_namespace"), TEXT("your_key"), findText); your_namespace 와 your_key 에 적합한 값을 주면, 원하는 값이 findText 에 들어갈 것이다. 텍스트 데이터를 이용해 테이블과 키값 조회 반대로, 텍스트 데이터를 이용해 테..

Delay 실행 만약 일정 시간이 지난 후 함수가 실행되길 원한다면, FTimerHandle 을 이용해 다음과 같이 코드를 짜면 된다. FTimerHandle myTimerHandle; GetWorld()->GetTimerManager().SetTimer(myTimerHandle, FTimerDelegate::CreateLambda([&]() { // 내가 원하는 코드 구현 DoSomething(); // 타이머 초기화 GetWorld()->GetTimerManager().ClearTimer(fadeOutTimerHandle); }), InDelayTime, false); // 반복 실행을 하고 싶으면 false 대신 true 대입 아, 참고로 FTimerHandle 은 글로벌 타이머 매니저에서 사용하며..
이 병은 예고도 없이 찾아온다. 한 번 왔다고 해서 다시 찾아오지 않는 것도 아니며, 이미 겪어 보았다고 해서 더 견디기 쉬워지는 것도 아니다. 그냥 공허함이 내 몸속을 파고든다. 햇살의 줄기, 그 속에 담긴 입자 하나하나가 내 몸 속 깊은 곳까지 파고들듯이, 공허의 알갱이들은 깊숙히 내 속으로 휘몰아친다. 나는 그 녀석이 올 때마다, 곧 넘쳐 흐를 것만 같이 부글거리는 냄비를 든 아이처럼 어쩔 줄을 몰라 한다. 따뜻해야만 할 가족들의 웃음소리가 마치 싸구려 골판지가 우그러지는 소리처럼 느껴지고, 사랑하는 사람과 함께한 시간은, 마치 대여기간이 정해진 소꿉놀이처럼 느껴지게 만드는 불치병. 지독한 병을 조금이라도 달래기 위해, 환자는 오늘도 연인의 시간을 빌려쓰려 휴대폰을 들어 밝은 목소리를 꾸며낸다.