quarta-feira, 20 de agosto de 2025

UEFN Verse: Branch (fluxo de tempo)

Branch é uma expressão de controle de fluxo de tempo que executa outras expressões e finaliza imediatamente continuando o fluxo com as expressões existentes após o Branch. Se o contexto async (como OnBegin) terminar, as expressões iniciadas pelo Branch são canceladas automaticamente caso ainda estejam ativas.

O Branch pode ser usado para tarefas paralelas que não afetam a lógica principal do jogo como animações de fundo de cenário.

Vamos criar um exemplo simples para demonstrar o uso do Branch. Usaremos uma função que rotaciona um creative_prop continuamente. Usaremos a função Sleep para manter o contexto async ativo por alguns segundos e poder visualizar a rotação iniciada pelo Branch. Quando o tempo expirar, a função OnBegin vai encerrar e a rotação irá parar automaticamente.

Em qualquer projeto UEFN, 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 branch_device clique no botão Create Empty.

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

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

branch_device := class(creative_device):

    @editable
    PropToRotate : creative_prop = creative_prop{}

    OnBegin<override>()<suspends>:void=
       
        branch:
            RotateProp(PropToRotate)

        Sleep(10.0)
        Print("The RotateProp is canceled when the OnBegin completes")
                
    RotateProp(Prop : creative_prop)<suspends>:void=

        loop:
            PropTransform := Prop.GetTransform()
            PropLocation  := PropTransform.Translation
            PropRotation  := PropTransform.Rotation

            NewRotation := PropRotation.ApplyYaw(180.0)

            Prop.MoveTo(PropLocation, NewRotation, 2.0)

A expressão branch do exemplo acima chama a função RotateProp() que irá rotacionar o creative_prop e finaliza. A função Sleep() irá esperar por 10 segundos antes da função OnBegin completar e a função RotateProp() ser cancelada.

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

Acesse o Content Drawer e adicione o dispositivo branch_device ao nível. Adicione algum Prop no nível para ser rotacionado pelo nosso dispositivo. Eu usei o Office Chair 02.

Selecione o branch_device no nível. Na aba Details adicione a referência do Prop no campo PropToRotate.


Salve o nível e clique no botão Launch Session para carregar o nível no Fortnite. Observe o Prop rotacionando. Depois de 10 segundos ele irá parar de rotacionar porque a função iniciada pelo Branch será cancelada automaticamente.