본문 바로가기
개발일지

2022/11/16 개발 일지

by myroad 2022. 11. 15.

*.uproject나 *.plugin파일의 Modules블럭 안에 정의 되는 "LoadingPhase" 명령 (로딩 단계)

LoadingPhase은 해당 모듈을 어느 시점에 로드할 지을 정의해 주는 명령이다.

프로그램을 시작하자 마자 로드할지

엔진의 초기화 후에 로드할지

첫 렌더링 화면에 로들할지 등을 설정할 수 있다.

namespace ELoadingPhase
{
    enum Type
    {
        EarliestPossible,
        PostConfigInit,
        PostSplashScreen,
        PreEarlyLoadingScreen,
        PreLoadingScreen,
        PreDefault,
        Default,
        PostDefault,
        PostEngineInit,
        None,
        Max,
    }
}

참고 링크 - https://docs.unrealengine.com/5.1/en-US/API/Runtime/Projects/ELoadingPhase__Type/


블루프린트의 델리게이트을 C++함수의 매개변수로 넘기기

C++의 함수가 다이나믹 델리게이트을 매개변수로 받게 구현하여 블루프린트로 부터 델리게이트을 입력 받을 수 있다.

DECLARE_DYNAMIC_DELEGATE_OneParam(FPatchCompleteDelegate, bool, Succeeded);

UCLASS()
class PATCHER_API UPatcher : public UObject
{
	GENERATED_BODY()

public:
	void Patch(const FPatchCompleteDelegate& Callback);

	
protected:
	UPROPERTY()
	FPatchCompleteDelegate _OnPatchComplete; //패치가 완료되면 호출되는 델리게이트    
}
void UPatcher::Patch(const FPatchCompleteDelegate& Callback)
{
	UE_LOG(LogTemp, Log, TEXT("=====>UPatcher::Patch()"));

	if (true == _bIsUpdateManifest)
	{
		_OnPatchComplete = Callback;
	}
	else
	{
		UE_LOG(LogTemp, Warning, TEXT("=====>UPatcher::Patch() : Mainfest Update Failed."));
	}
}
void UPatcher::OnPatchComplete(bool bSuccess)
{
	if (true == bSuccess)
	{
		_OnPatchComplete.ExecuteIfBound(bSuccess);
	}
}

아래의 코드들은 블루프린트에 노출되는 부분이다.

블루프린트에서 Patch함수을 호출하여 블루프린트에서 정의한 델리게이트을 인자로 넣어준다.

물론 UPatcher의 Patch함수을 블루프린트에 노출 시킬수도 있지만 여기에서는 UPatcher객체는 숨기고 오직 블루프린트 펑션 라이브러리을 통해서만 블루프린트에 노출시키기 위해 이런 형식으로 구현하였다.

UCLASS()
class UPatcherBPLibrary : public UBlueprintFunctionLibrary
{
	GENERATED_UCLASS_BODY()

	UFUNCTION(BlueprintCallable, Category = "Patcher")
	static void Patch(const FPatchCompleteDelegate& Callback);
};
void UPatcherBPLibrary::Patch(const FPatchCompleteDelegate& Callback)
{
	FPatcherModule::Get().GetPatcher()->Patch(Callback);
}

원래는 다이나믹 멀티캐스트 델리게이트(DECLARE_DYNAMIC_MULTICAST_DELEGATE)을 사용하여 UPROPERTY(BlueprintAssignable)형태의 멤버 변수을 블루프린트에 노출시키려고 했으나 UBlueprintFunctionLibrary을 통해 노출시 컴파일 오류가 발생하는 관계로 다이나믹 델리게이트로 바꾸어 사용하였다.

'개발일지' 카테고리의 다른 글

2022/11/22 개발 일지  (0) 2022.11.22
2022/11/21 개발 일지  (0) 2022.11.21
2022/11/20 개발 일지  (0) 2022.11.20
2022/11/18 개발 일지  (0) 2022.11.18
2022/11/17 개발 일지  (0) 2022.11.17