본문 바로가기

게임프로그래밍/실습2

[실습2] 35. 커스텀 블루프린트 라이브러리 만들기

1. 블루프린트 라이브러리

 

언리얼 엔진에는 이미 블루프린트와 C++ 양쪽 모두에서 호출 가능한 함수들이 많이 구현되어있다. 이들은 스태틱 함수로 구성되어있기 때문에 클래스를 따로 생성하지 않아도 ::(범위 확인 연산자)로 접근이 가능하다.

 

이제 우리가 많이 쓸 함수들을 따로 라이브러리로 빼내어 함수를 새로 만들어보자.

 

 

이제 이곳에서 사용할 스태틱 함수를 선언하자.

static UOverlayWidgetController* GetOverlayWidgetController();

 

하지만 이대로만 쓸 수는 없다. 스태틱 멤버 함수는 객체에 직접 접근할 수가 없기 때문이다. 그렇기 때문에 객체를 직접 전달받아야 하고 그런 객체를 포괄적으로 다룰 수 있는 변수가 월드 오브젝트 컨텍스트이다. 이 변수의 타입은 UObject가 될 것이다.

 

UFUNCTION(BlueprintPure, Category="AuraAbilitySystemLibrary|WidgetController")
static UOverlayWidgetController* GetOverlayWidgetController(const UObject* WorldContextObject);

 

이제 이를 정의하도록 하자.

 

UOverlayWidgetController* UAuraAbilitySystemLibrary::GetOverlayWidgetController(const UObject* WorldContextObject)
{
    if(APlayerController* PC = UGameplayStatics::GetPlayerController(WorldContextObject, 0))
    {
       if (AAuraHUD* AuraHUD = Cast<AAuraHUD>(PC->GetHUD()))
       {
          AAuraPlayerState* PS = PC->GetPlayerState<AAuraPlayerState>();
          UAbilitySystemComponent* ASC = PS->GetAbilitySystemComponent();
          UAttributeSet* AS = PS->GetAttributeSet();
          const FWidgetControllerParams WidgetControllerParams(PC, PS, ASC, AS);
          
          return AuraHUD->GetOverlayWidgetController(WidgetControllerParams);
       }
    }

    return nullptr;
}

 

플레이어 컨트롤러를 불러와 이로부터 파람 요소들을 얻고 오버레이 위젯 컨트롤러를 반환하는 스태틱 함수를 완성하였다.

 

이 블루프린트라이브러리 클래스에서 더 많은 함수들을 구현할 수 있을 것이다