목록Game Dev/Unreal C++ : Dev Log (52)
KoreanFoodie's Study

[언리얼] 스크롤박스에서 왼쪽 클릭으로 드래그하기 핵심 : 1. UScrollBox 에서는 기본적으로는 오른쪽 클릭을 통해 잡아끌기(마우스 클릭으로 드래그) 가 가능하다. 2. 좌클릭으로 드래그를 활성화 하려면, 하위 위젯에 버튼을 넣고, 버튼에서 Click Method / Touch Method 설정을 각각 Precise Click, Precise Tap 으로 바꾸어 주면 된다. 3. 자세한 것은 영상 참조. UScrollBox 에서 좌클릭으로 스크롤을 하고 싶으면, UScrollBox 아래에 버튼을 만들고, 버튼의 속성을 위와 같이 변경해 주면 된다. 참고로, Horizontal 하게 아이템을 담을 때는 WrapBox 를, Vertical 하게 아이템을 담을 때는 VerticalBox 를 UScrol..

[언리얼] UnrealVS 로 메모리 이슈 예방하기 (-stompMalloc) 핵심 : 1. Stomp Allocator 로 잠재적인 메모리 이슈를 잡아낼 수 있다. 2. 바인딩을 꼬리물기처럼 만들면 안된다(상위 > 중위 > 하위 위젯 순으로 열리는 경우, 같은 타입의 델리게이트가 바인딩되면 안됨) 3. stompmalloc 은 실제 가상 메모리 대신 물리 메모리 주소에 할당/해제 작업을 직접적으로 하도록 도와준다. 게임을 다 만들고 나서 실행을 했는데, 자꾸 크래시가 나서 게임이 꺼져버리면 매우 허망할 것이다. 특히 메모리 이슈의 경우, 정확히 어디서 메모리가 오염되었는지 개발 단계에서는 파악하기가 매우 어렵고 테스트 비용이 큰 편이다. 메모리 이슈를 디버깅하기 위한 좋은 방법이 하나 있는데, 바로 U..

언리얼에서 TMap 에 Compare Functor 지정하기 핵심 : 1. C++ 에서는 Functor class 를 넣어 주기만 하면 된다. 2. TMap 에서는 TMap 자체가 그냥 unordered_map 이라 그런 건 없다. 만약 Predicate 를 지정하고 싶으면, TSortedMap 을 사용하자! 3. TMap 을 정렬할 때는 Sort 를 사용하자... 후... C++ 에서는 TMap 에서 Key 값을 이용한 정렬을 역순으로 하고 싶을 때, std::less 나 std::greater 같은 predicate 클래스를 사용했다. 혹은 아래와 같이 Functor class 를 만들어 3번째 인자에 넣어 주기만 하면 되었는데... #include #include #include class MyCo..

언리얼 에러 : Missing '*' in Expected a pointer type 핵심 : 1. UFUNCTION 함수의 인자로, UStruct 타입이 있는데 포인터 형식이 아닐 경우 2. 추후 추가 3. 추후 추가 언리얼 에러 로그 중 아래와 같은 내용이 뜰 때가 있다 : Missing '*' in Expected a pointer type 위와 같은 에러의 경우, 정확히 뭘 고치라는지 몰라 헤멜때가 있다. 그럴 때는 아래와 같은 상황을 체크해 보자! 1. UFUNCTION 함수의 인자로, UStruct 타입이 있는데 포인터 형식이 아닐 경우 다음과 같은 예제를 보자 : UFUNCTION() void OnSomeEvent(UObject* InObject, UUserWidget& InWidget); ..

[언리얼] 어떤 개념 : 어떻게 하기 핵심 : 1. 2. 3. 언리얼 서밋 온라인 2022 를 훑어 보면서, 최적화 및 프로파일링과 관련한 내용이 있어 기록차 요약해 보려 합니다. 현재 개발 중인 버전이 언리얼5 가 아니라서 아쉬운 부분은 있지만... 일단 알아두면 많은 도움이 되겠죠 😅 언리얼 서밋 온라인 2022 를 보며 내용을 정리했으니, 궁금하신 분은 풀 영상을 보시길 바랍니다! 😄 Hitching 이 언제 발생하는지 파악하여 어떤 부분에서 병목현상이 발생하는지 파악해야 한다. 카트라이더의 경우 GameThread 에서 병목이 발생하여 이를 집중적으로 다루었다고 함. 강의에서는 다루지 않았지만... RenderThread 의 경우, PSO 캐시를 통해 최적화를 진행하였다고 한다. 관련 내용은 공식..

언리얼 인사이트 핵심 : 1. 언리얼 인사이트는 최적화를 위해 프로파일링을 쉽게 도와주는 유용한 툴이다. 2. 게임 쓰레드, 렌더 쓰레드 등 어디에서 병목 현상이 일어나는지를 파악하자 3. 모바일 기기로도 utrace 를 내보내어 분석을 할 수 있다! 언리얼 인사이트라는 툴을 통해 언리얼 최적화 및 프로파일링을 한 번 해 보자! (만약 소스빌드에서 시작할 경우, UnrealInsight 모듈을 빌드하면 UnrealInsights.exe 파일이 생긴다. UnrealInsights-Win64-DebugGame 라는 이름일 수도 있음 😅) 애플리케이션을 실행하면 Trace Sessions(트레이스 세션) (1), Trace Store Directory(트레이스 스토어 디렉터리) (2) 제어, New Conne..

동적으로 위젯 생성하기 핵심 : 1. UUserWidget 은 CreateWidget, UWidget 은 ConstructWidget 을 사용해 위젯을 생성하자. 2. 생성 후, 그냥 WidgetTree 에 붙이기만 하면 된다. 3. AddChild 같은 함수로 부모자식 관계를 설정할 수 있다! 이전 글에서 동적으로 액터 컴포넌트를 만드는 방법을 기록한 적이 있는데, 이번에는 위젯을 동적으로 만드는 법을 알아보자. 코드는 사실 매우 간단하다 😄 원하는 위젯 클래스를 UUserWidget 으로부터 상속받아 만들었다고 하자. 그럼 아래와 같은 식으로 쓰면 된다 : // UTextBlock 을 동적으로 생성하여 WidgetTree 에 붙인다 UTextBlock* textBlock = WidgetTree->Co..
보호되어 있는 글입니다.

[언리얼] Visual Studio 한글 깨짐 (Log 한글 깨짐) 핵심 : 1. 임시 방편으로 한글 대신 영어 로그만 나오게 하기 2. 컴퓨터 환경의 인코딩 세팅을 바꾸기 (불안정) 3. cl-filter 를 수정해서 '완벽'하게 해결하기 구글링 중 세 가지 방법을 찾았고, 각각을 적용해 본 결과를 기록한다. 임시 방편으로 한글 대신 영어 로그만 나오게 하기 이 링크를 참고하자. 첫번째 방법이다. 근데 한글도 나와야 되는 상황이면... 이렇게 하면 안된다. 당근. 컴퓨터 환경의 인코딩 세팅을 바꾸기 (불안정) 이 링크의 두번째 방법을 참고하자. 절대 하지 말기. 기존 파일들 완전 다 깨진다. cl-filter 를 수정해서 '완벽'하게 해결하기 God 실력자 분이 올리신 링크를 통해 수정을 시도했다. (..

TSharedRef 를 클래스 멤버 변수로 선언할 때 에러 핵심 : 1. TSharedRef 를 선언할 때는 반드시 초기화를 해 주자. 2. TSharedRef 를 초기화할 때는 MakeShareable 보다 MakeShared 를 사용하자. 3. 초기화가 힘들면 TSharedPtr 로 선언하는 것도 대안이다. TSharedRef 를 멤버 변수로 선언할 때, 만약 헤더파일이나 생성자에서 초기화를 해 주지 않는다면 아래와 같은 에러를 만나게 된다... void EnsureRetrievingVTablePtrDuringCtor(const TCHAR* CtorSignature) { UE_CLOG(!GIsRetrievingVTablePtr, LogCore, Fatal, TEXT("The %s constructor..