Nós podemos criar dispositivos no UEFN usando a linguagem de programação Verse. Neste artigo vamos ver os passos necessários.
Clique no item de menu Verse do UEFN para ver as opções disponíveis:
Clique na opção Verse Explorer para visualizar os arquivos verse existentes no projeto:
Os arquivos com digest.verse contém informações de módulos Verse. Um módulo Verse contém códigos e funções que podem ser usados em seu projeto.
É exibida uma janela chamada Create Verse Script. Nesta janela é possível escolher um template para o seu arquivo Verse. No momento só tem um modelo disponível para a criação de dispositivo Verse. Se quiser criar um arquivo vazio, use o botão Create Empty.
Nomes de classe em Verse seguem um padrão de nome usando apenas letras minúsculas e o caracter '_' para separar palavras. Em Device Name coloque collect_game_device e clique no botão Create para usar o código do template.
Veja no Verse Explorer que foi criada uma nova pasta Content com o nosso arquivo Verse:
Dê um duplo clique no arquivo Verse para abri-lo no Visual Studio Code. Se você ainda não tiver o Visual Studio Code, o UEFN vai perguntar se você quer instalar. Basta confirmar que o UEFN fará a instalação automaticamente.
A imagem abaixo mostra o arquivo Verse aberto no Visual Studio Code:
Vamos analisar o código do template para ver a estrutura básica de um arquivo Verse.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
As linhas que começam com o caractere # são comentários e são ignorados pelo código Verse. Os comentários são úteis para fazer algumas observações sobre a lógico do código.
# A Verse-authored creative device that can be placed in a level
A linha abaixo está declarando que collect_game_device é uma classe do tipo creative_device:
collect_game_device := class(creative_device):
Uma classe é um tipo composto pois ela é formada por vários elementos. A creative_device é uma classe do UEFN que contém variáveis e funções necessárias para a criação de um dispositivo Verse. Nos próximos artigos vamos aprender o que são variáveis e funções.
A classe collect_game_device está usando creative_device como superclasse (ou classe pai). Todas as variáveis e funções da classe creative_device são incluídas na classe collect_game_device. Este conceito é conhecido como herança.
As linhas abaixo de collect_game_device representam o bloco de código com as definições da classe. Verse usa indentação (recuo do texto) para definir blocos de códigos e hierarquia. A indentação geralmente possui 4 espaços em branco. Verse também aceita a definição de blocos de código usando { }.
O código abaixo mostra que a função OnBegin está indentada. Isto significa que a função OnBegin faz parte da classe collect_game_device:
collect_game_device := class(creative_device):
OnBegin<override>()<suspends>:void=
Verse usa padrões de nomes diferentes para classes e para variáveis/funções.
Nomes de classes são em minúsculo e as palavras são separadas por _ (sublinhado) pois não pode haver espaços em branco no nome.
Ex: collect_game_device
Nomes de variáveis e funções não usam _ para separar as palavras e a primeira letra de cada palavra é em maiúsculo.
Ex: OnBegin
A função OnBegin possui outros dados ao lado do seu nome que formam a assinatura da função. Vamos identificar cada um deles:
- OnBegin : Nome da função.
- <override> : Especificador que indica que esta função está sobrescrevendo uma função com o mesmo nome que existe na superclasse creative_device.
- ( ) : Uma função pode receber valores através de parâmetros que são definidos dentro dos parênteses. Quando os parênteses estão vazios significa que a função não possui parâmetros.
- <suspends> : Especificador que indica que esta função é assíncrona. Isto significa que a função é executada em paralelo a outras funções e sua conclusão não precisa ser imediata.
- :void : O que vem depois dos dois pontos é tipo de retorno da função. O tipo void indica que a função não retorna valor.
A função OnBegin é executada quando o jogo inicia para o dispositivo. No código do template, a função OnBegin contém duas chamadas à função Print passando valores diferentes como parâmetro. Observe a indentação das funções Print para indicar que elas fazem parte da função OnBegin:
OnBegin<override>()<suspends>:void=
Print("Hello, world!")
Print("2 + 2 = {2 + 2}")
A função Print escreve um texto no log do Fortnite. O parâmetro da função Print é do tipo string que é usado para armazenar texto. Sequências de caracteres entre aspas duplas " " são strings.
Um par de chaves { } dentro de uma string representa uma expressão que será calculada e o resultado da expressão é que será armazenada na string. No exemplo do template temos a expressão {2 + 2} que será convertida para 4 na string.
Quando fizer mudanças no código Verse, é preciso compilar o código para validar as mudanças e converter o código. A compilação é feita selecionando no menu do UEFN a opção Verse > Build Verse Code.
Para vermos o código do dispositivo Verse ser executado, o dispositivo precisa ser adicionado ao nível. Selecione o Content Drawer que fica na parte inferior da janela do UEFN.
O nosso dispositivo Verse está na pasta CollectGame Content > CreativeDevices:
Arraste o collect_game_device para o nível. Deixe um quadrado da grade livre entre o Player Spawner e o dispositivo Verse como mostra a imagem:
Clique no botão Launch Session localizado na barra de ferramentas do UEFN para carregar o nível no Fortnite.
Após iniciar a partida no Fortnite, pressione a tecla Alt e selecione a aba Log para visualizar o log com as mensagens escritas pelas funções Print: