domingo, 15 de fevereiro de 2026

UEFN Verse: Introdução à Persistência

Neste artigo vou apresentar noções básicas do uso de persistência no UEFN usando Verse.

Primeiro vamos esclarecer sobre o que estamos falando ao mencionar persistência. Em uma ilha padrão do Fortnite, quando um jogador sai da experiência, os seus dados relacionados a experiência, como pontos ou itens coletados, são perdidos.

O uso de persistência permite que alguns dados associados ao jogador sejam salvos na experiência. Quando o jogador retornar à experiência, estes dados podem ser recuperados permitindo que o jogador continue de onde parou.

Para persistir os dados dos jogadores, é preciso criar uma variável global do tipo weak_map usando o tipo player como chave. Weak map é um tipo de map que não permite a listagem de seus elementos para iteração. A única forma de acessar um elemento de um weak map é usando o índice. Se você não sabe o que é um map, eu sugiro a leitura do meu artigo:

UEFN Verse: Map (pt-BR)

A linha abaixo mostra como criar uma variável do tipo weak_map com o nome PlayerData que usa o tipo player como chave e o tipo float como valor. A declaração desta variável precisa estar fora de uma classe para que ela seja global.

var PlayerData:weak_map(player, float) = map{}

Para ficar claro o uso da persistência, vamos começar com um exemplo simples usando um Timer Device e um Button Device. O Timer Device será configurado para contar para cima. Quando o jogador pressionar o botão, o valor atual do Timer será salvo. Quando o jogador entrar de novo na experiência, o valor do timer será recuperado e atribuido ao timer para que ele não comece a contagem do zero de novo.

Abra o Verse Explorer, clique com o botão-direito no nome do projeto e escolha a opção Add new Verse file to project.

Em Device Name coloque persistence_device clique no botão Create Empty.

Copie o código Verse abaixo para o dispositivo persistence_device:

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }

var PlayerData:weak_map(player, float) = map{}

persistence_device := class(creative_device):

    @editable  
    TimerDevice: timer_device = timer_device{} 
    # O timer precisa contar para cima.
	
    @editable
    SaveButton : button_device = button_device{}

    OnBegin<override>()<suspends>:void =

        SaveButton.InteractedWithEvent.Subscribe(ButtonPressed)

        if:   # Recupera dados salvos se existir.
            Player := GetPlayspace().GetPlayers()[0]
            TimeElapsed := PlayerData[Player]
        then:
            TimerDevice.SetActiveDuration(TimeElapsed, Player)

    ButtonPressed(Agent:agent):void=	
        if: 
            Player := player[Agent]
            set PlayerData[Player] = TimerDevice.GetActiveDuration(Agent)
        then:
            Print("Dados salvos.")

A função OnBegin registra a função ButtonPressed no evento InteractedWithEvent do SaveButton e verifica se existe um valor salvo para o jogador atual acessando o weak_map com a expressão PlayerData[Player].

A função ButtonPressed obtém a contagem atual do Timer Device usando a função GetActiveDuration e salva no weak_map usando o jogador atual como chave.

Salve o arquivo e compile o código Verse usando a opção Verse > Compile Verse Code do menu do UEFN. 

Acesse o Content Drawer e adicione o dispositivo persistence_device ao nível. Adicione um Timer Device e um Button Device e deixe eles próximos um do outro. 



Selecione o Timer Device no nível. Na aba Details selecione CountUp em Count Down Direction. Coloque um valor alto em Duration. No meu exemplo eu usei 600 segundos (10 minutos). Marque a opção Start at Game Start


Selecione o persistence_device no nível. Na aba Details adicione as referências do Timer Device e do Button Device.



Salve o nível e clique no botão Launch Session para carregar o nível no Fortnite. Espere por alguns segundos dentro do jogo e depois use o seu personagem para pressionar o botão no nível. Quando o botão for pressionado, o valor atual do timer será persistido.


Para você conseguir simular o uso da persistência localmente não encerre a sessão do UEFN. No Fortnite aperte ESC para sair da experiência atual sem sair da sessão do UEFN. 


Quando entrar novamente na experiência com o mesmo jogador, o Timer Device iniciará sua contagem a partir do valor que foi salvo.

No próximo artigo, vou abordar mais alguns conceitos de persistência e mostrar a forma que ela é geralmente usada nas experiências.

Só um alerta. Evite fazer experimentações de persistência em ilhas que estão publicadas. Este é um tópico que necessita conhecimento e planejamento para evitar que alterações futuras nas variáveis usadas para salvar façam os jogadores perderem seus dados salvos. 

Sumário Verse