목록Game Dev/Unreal C++ : Dev Log (51)
KoreanFoodie's Study
언리얼 TSubClassOf 가 비어있을 때핵심 :1. EditDefaultsOnly, EditAnywhere 등의 UPROPERTY 메타 태그를 잘 써보자간혹 그럴 때가 있다. 위젯을 생성할 때, 블루프린트에 생성하고 싶은 BP 위젯을 넣어 코드에서 동적으로 생성하는 경우가.UPROPERTY(BlueprintReadWrite, Category = Config)TSubclassOf MyWidgetClass;보통은 위처럼 TSubclassOf 를 사용해서 위젯 블루프린트 클래스를 넣어주는데...A -> B -> C ... 처럼 위젯의 hierarchy 구조가 있고, 내가 위의 TSubclassOf 세팅을 B 에서 했을 때, 최상위 부모 위젯인 A 에서는 MyWidgetClass 가 nullptr 인 이상한..
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()); ..
에디터에서 게임을 실행하면, 가끔 아래와 같은 메시지가 나오며 에디터가 꺼질 때가 있다.Unable to launch ShaderComiplerWorker.exe - make sure you built ShaderCompileWorker 그럴 때는 아래 두 가지를 시도해 보자.1. Engine\Binaries\Win64 에서 ShaderCompileWorker.exe 실행해당 파일이 없으면, 2 번을 따라하면 생긴다. 2. Solution > Programs 에서 ShaderCompileWorker 빌드
[언리얼] 어떤 개념 : 어떻게 하기 핵심 : 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..
언리얼 UI 최적화 핵심 : 1. UI 최적화를 위해서는 먼저 UI 구조와 렌더링 프로세스를 이해해야 한다. 2. UI 최적화의 핵심은 결국 Tick 이다. Tick 을 필요할 때만 호출하게 만들거나, Tick 당 담기는 연산의 크기를 줄여야 한다. 전자는 게임쓰레드와, 후자는 렌더링 쓰레드와 연관이 깊다. 3. 게임 쓰레드 최적화에는 Invalidation Box, Visibility, Widget Binding 등이 있고, 렌더링 쓰레드 최적화에는 Merging Batches, Retainer Box 등이 있다. 언리얼에서 UMG 를 이용한 UI 작업을 상당히 많이 하는데, 일정에 쫓기다 보니 프로젝트 차원에서 최적화를 고려하면서 만드는 경우가 잘 없는 것 같다는 생각이 들었다. 또한 최적화를 한다고..
[언리얼] 다음 틱에 특정 동작 수행시키기핵심 :1. SetTimerForNextTick 을 사용한다때로는 영 좋지 못한 이유로, 특정 동작을 다음 틱에 실행시켜야 하는 상황이 존재한다.AActor* actor = GetActor();// 타이머는 클리어 처리하고 다음 틱에 디스폰 액터를 호출ClearTimerEvent();GetWorld()->GetTimerManager().SetTimerForNextTick([actor]() { actor->Destroy(); }); 그럴때는, 위 함수를 사용하면 된다. 언리얼 글 중 제일 짧은 글인 듯 하다. 😅
보호되어 있는 글입니다.
보호되어 있는 글입니다.
[언리얼] UI 에서 애니메이션의 이벤트가 끝났음을 알려주는 방법 핵심 : 1. UI 에 삽입된 애니메이션에서 이벤트를 추가하고, 그래프에서 이벤트가 발생했을 때 호출할 함수를 C++ 에서 검색해서 연결해 주면 된다. 가끔 그런 경우가 있다. 코드로 풀어야 하는 동작과 연출을 함께 사용해야 할때, 특정 동작을 연출이 끝나는 타이밍에 의존해야 하는 경우가. 대표적으로 애니메이션이 있는데, 애니메이션이 완전히 끝나거나, 특정 시점에 왔을 때 코드에서 특정 동작을 수행하도록 만들어야 하는 케이스가 왕왕 생기곤 한다. 보통 스킬 쪽 구현을 하다보면, Notify 같은 걸 만들어서 이를 해결하기도 하지만.. UI 의 경우에는, 이벤트 트리거를 통해 이를 해결할 수 있다. 이제 예시를 보자. 일단 원하는 UI 를 ..
[언리얼] 스크롤박스에서 왼쪽 클릭으로 드래그하기 핵심 : 1. UScrollBox 에서는 기본적으로는 오른쪽 클릭을 통해 잡아끌기(마우스 클릭으로 드래그) 가 가능하다. 2. 좌클릭으로 드래그를 활성화 하려면, 하위 위젯에 버튼을 넣고, 버튼에서 Click Method / Touch Method 설정을 각각 Precise Click, Precise Tap 으로 바꾸어 주면 된다. 3. 자세한 것은 영상 참조. UScrollBox 에서 좌클릭으로 스크롤을 하고 싶으면, UScrollBox 아래에 버튼을 만들고, 버튼의 속성을 위와 같이 변경해 주면 된다. 참고로, Horizontal 하게 아이템을 담을 때는 WrapBox 를, Vertical 하게 아이템을 담을 때는 VerticalBox 를 UScrol..