목록Game Dev/Unreal C++ : Dev Log (50)
KoreanFoodie's Study
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/HTNvQ/btsIOGxL9vY/VSmIKbiDxop7W9sNo7OukK/img.gif)
UTexture2D 사용시 빌드 에러때때로, 아래처럼 UTexture2D 를 로드해서 쓰려는데, Get() 에서 빌드 에러가 발생하는 경우가 있다.TSoftObjectPtr InTexturePtr;auto WeakThis = MakeWeakObjectPtr(this);UAssetManager::GetStreamableManager().RequestAsyncLoad( InTexturePtr.ToSoftObjectPath(), [WeakThis, InTexturePtr]() { if (WeakThis.IsValid()) { WeakThis->Img_Texture->SetBrushFromTexture(InTexturePtr.Get()); ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bFf2KP/btsIeePy1Uj/s4bFZwujyLkmOlHKIdq9R0/img.gif)
에디터에서 게임을 실행하면, 가끔 아래와 같은 메시지가 나오며 에디터가 꺼질 때가 있다.Unable to launch ShaderComiplerWorker.exe - make sure you built ShaderCompileWorker 그럴 때는 아래 두 가지를 시도해 보자.1. Engine\Binaries\Win64 에서 ShaderCompileWorker.exe 실행해당 파일이 없으면, 2 번을 따라하면 생긴다. 2. Solution > Programs 에서 ShaderCompileWorker 빌드
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dO0m8P/btsFckeGOeL/FDJzDvdjotUgPg7Iu3vB11/img.gif)
[언리얼] 어떤 개념 : 어떻게 하기 핵심 : 1. UObject 라면, UWorld::GetRealTimeSeconds() 함수를 사용할 수 있다. 2. C++ 클래스라면, FDateTime::Now() 를 쓸 수도 있다. 3. milisecond 를 원한다면 FDateTime::UtcNow() 를 쓰자. 1. UObject 일 경우 UWorld* World = GetWorld(); float PrevSeconds; float ElapsedSeconds; if (World) { ElapsedSeconds = MyWorld->GetRealTimeSeconds() - PrevSeconds; PrevSeconds = MyWorld->GetRealTimeSeconds(); UE_LOG(LogTemp, Warn..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/NlguJ/btsEvyiHlMm/Jgx7u5HZxw3REFctfjPaRK/img.gif)
언리얼 UI 최적화 핵심 : 1. UI 최적화를 위해서는 먼저 UI 구조와 렌더링 프로세스를 이해해야 한다. 2. UI 최적화의 핵심은 결국 Tick 이다. Tick 을 필요할 때만 호출하게 만들거나, Tick 당 담기는 연산의 크기를 줄여야 한다. 전자는 게임쓰레드와, 후자는 렌더링 쓰레드와 연관이 깊다. 3. 게임 쓰레드 최적화에는 Invalidation Box, Visibility, Widget Binding 등이 있고, 렌더링 쓰레드 최적화에는 Merging Batches, Retainer Box 등이 있다. 언리얼에서 UMG 를 이용한 UI 작업을 상당히 많이 하는데, 일정에 쫓기다 보니 프로젝트 차원에서 최적화를 고려하면서 만드는 경우가 잘 없는 것 같다는 생각이 들었다. 또한 최적화를 한다고..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lqQMd/btsAnyz77nJ/l8Lm1nb3I9iaKvHwOPDNQk/img.jpg)
[언리얼] 다음 틱에 특정 동작 수행시키기 핵심 : 1. SetTimerForNextTick 을 사용한다 때로는 영 좋지 못한 이유로, 특정 동작을 다음 틱에 실행시켜야 하는 상황이 존재한다. 그럴때는, 아래 함수를 사용하면 된다. 언리얼 글 중 제일 짧은 글인 듯 하다. 😅
보호되어 있는 글입니다.
보호되어 있는 글입니다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Sg0cd/btstnw5AywT/uN0CllCO38VBVew2Y5e7Ek/img.jpg)
[언리얼] UI 에서 애니메이션의 이벤트가 끝났음을 알려주는 방법 핵심 : 1. UI 에 삽입된 애니메이션에서 이벤트를 추가하고, 그래프에서 이벤트가 발생했을 때 호출할 함수를 C++ 에서 검색해서 연결해 주면 된다. 가끔 그런 경우가 있다. 코드로 풀어야 하는 동작과 연출을 함께 사용해야 할때, 특정 동작을 연출이 끝나는 타이밍에 의존해야 하는 경우가. 대표적으로 애니메이션이 있는데, 애니메이션이 완전히 끝나거나, 특정 시점에 왔을 때 코드에서 특정 동작을 수행하도록 만들어야 하는 케이스가 왕왕 생기곤 한다. 보통 스킬 쪽 구현을 하다보면, Notify 같은 걸 만들어서 이를 해결하기도 하지만.. UI 의 경우에는, 이벤트 트리거를 통해 이를 해결할 수 있다. 이제 예시를 보자. 일단 원하는 UI 를 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/5Tc8v/btsl2dKKNaO/RASOoWZpKy7nGOG194eqwk/img.jpg)
[언리얼] 스크롤박스에서 왼쪽 클릭으로 드래그하기 핵심 : 1. UScrollBox 에서는 기본적으로는 오른쪽 클릭을 통해 잡아끌기(마우스 클릭으로 드래그) 가 가능하다. 2. 좌클릭으로 드래그를 활성화 하려면, 하위 위젯에 버튼을 넣고, 버튼에서 Click Method / Touch Method 설정을 각각 Precise Click, Precise Tap 으로 바꾸어 주면 된다. 3. 자세한 것은 영상 참조. UScrollBox 에서 좌클릭으로 스크롤을 하고 싶으면, UScrollBox 아래에 버튼을 만들고, 버튼의 속성을 위와 같이 변경해 주면 된다. 참고로, Horizontal 하게 아이템을 담을 때는 WrapBox 를, Vertical 하게 아이템을 담을 때는 VerticalBox 를 UScrol..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bIIdz8/btsjZFqbbug/cj1ky2mMVJYlukfEo2K9M1/img.jpg)
[언리얼] UnrealVS 로 메모리 이슈 예방하기 (-stompMalloc) 핵심 : 1. Stomp Allocator 로 잠재적인 메모리 이슈를 잡아낼 수 있다. 2. 바인딩을 꼬리물기처럼 만들면 안된다(상위 > 중위 > 하위 위젯 순으로 열리는 경우, 같은 타입의 델리게이트가 바인딩되면 안됨) 3. stompmalloc 은 실제 가상 메모리 대신 물리 메모리 주소에 할당/해제 작업을 직접적으로 하도록 도와준다. 게임을 다 만들고 나서 실행을 했는데, 자꾸 크래시가 나서 게임이 꺼져버리면 매우 허망할 것이다. 특히 메모리 이슈의 경우, 정확히 어디서 메모리가 오염되었는지 개발 단계에서는 파악하기가 매우 어렵고 테스트 비용이 큰 편이다. 메모리 이슈를 디버깅하기 위한 좋은 방법이 하나 있는데, 바로 U..