sábado, 24 de abril de 2021

Entendendo o WorldContextObject

Em uma classe do tipo Actor, você consegue pegar uma referência do World (nível atual) usando a função GetWorld().

Entretanto, as funções static precisam receber por parâmetro um UObject para poder chamar a função GetWorld() dele e obter a referência do World. Este parâmetro é conhecido como WorldContextObject.

Existe um especificador do tipo Metadata chamado WorldContext que é usado para preencher automaticamente o parâmetro WorldContextObject quando é chamado em Blueprint. Dessa forma, o parâmetro WorldContextObject nem é exibido no node Blueprint.   

O código abaixo mostra um exemplo de uso do especificador WorldContext na declaração da função GetPlayerPawn() da classe UGameplayStatics

UFUNCTION(BlueprintPure, Category="Game", 
          meta=(WorldContext="WorldContextObject", 
                UnsafeDuringActorConstruction="true"))
static class APawn* GetPlayerPawn(const UObject* WorldContextObject, 
                                  int32 PlayerIndex);


Veja que o node Blueprint do GetPlayerPawn() não exibe o parâmetro WorldContextObject:

 

É preciso fornecer um WorldContextObject se chamar o GetPlayerPawn() em C++. Se estiver sendo chamado a partir de uma classe do tipo Actor, você pode passar o ponteiro this ou para ficar mais claro pode passar o retorno da função GetWorld() como mostra este exemplo:

APawn* PlayerPawn = UGameplayStatics::GetPlayerPawn(GetWorld(), 0);


Agora que já sabemos o que são funções static e entendemos o uso do WorldContextObject, estamos prontos para criar a nossa própria Blueprint Function Library no próximo artigo.


Sumário C++