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.