Plataformas que desaparecem quando você aterrissa nelas são a base dos modos de jogo de plataforma, como pistas de obstáculos. É preciso que o jogador aja rapidamente a planeje para onde vai para que não caia.
Seguindo este tutorial, você aprenderá a criar uma plataforma que desaparece quando o jogador toca nela e reaparece um número aleatório de segundos depois usando o Verse no Unreal Editor para Fortnite (UEFN). Este exemplo mostra como criar uma área sobre a qual o jogador deve saltar de plataforma em plataforma para evitar uma queda. O código completo está incluído no final deste guia como referência.
Funcionalidade da linguagem Verse usada
spawn: a expressão
spawné usada para chamar a função assíncrona que faz a plataforma reaparecer após um número aleatório de segundos.
APIs Verse usadas
Sleep(): a APISleep()é usada para inserir os atrasos entre o desaparecimento e o reaparecimento da plataforma após um período aleatório de tempo.GetRandomFloat(): a APIGetRandomFloat()é usada para calcular uma quantidade aleatória de tempo antes que a plataforma reapareça.Propriedades editáveis: quatro propriedades são expostas ao UEFN — três floats para controlar os atrasos no desaparecimento e no reaparecimento da plataforma e a referência da própria plataforma.
Eventos do dispositivo: você usará o
TriggeredEventdo dispositivo Gatilho para saber quando um jogador pousa na plataforma.
Como configurar o nível
Este tutorial usa o Modelo inicial em Verse como ponto de partida. Para começar, inicialize um novo projeto a partir do exemplo de funcionalidade Dispositivo Verse.
Este exemplo usa os seguintes adereços e dispositivos:
1x Plataforma de Surgimento de Jogador: define onde o jogador surge no início do jogo.
4x Adereços Criativos: têm vários comportamentos que você pode chamar com Verse, como
Hide()eShow()para alternar a visibilidade e a colisão da plataforma. Este tutorial usa a Plataforma de Flutuação A como plataforma de interação com o jogador, mas fique à vontade para alterá-la para se adequar às necessidades da sua experiência.4x Gatilho: você usará esses dispositivos para saber quando um jogador pousa em cada plataforma.
Siga estas etapas para configurar o nível:
Adicione a Plataforma de Flutuação A à sua cena. Coloque-a acima do piso para que o jogador caia se não saltar da plataforma que desaparece a tempo. Dê o nome de RecyclePlatform à plataforma no Organizador.
Adicione um dispositivo Gatilho à cena e defina-o como um filho de sua RecyclePlatform. Coloque-o sobre a plataforma e redimensione-o para se encaixar sobre toda a plataforma. No Organizador, defina Visível no Jogo como False e Vezes que Pode Ser Acionado como 1.
Posicione o dispositivo Plataforma de Surgimento de Jogador na plataforma. É aqui que o jogador surgirá quando o jogo começar. No Organizador, desative a opção Visível no Jogo para que o jogador não possa ficar sobre a plataforma depois que surgir. A configuração completa deve ter a seguinte aparência:
Como criar o dispositivo
Este exemplo usa um dispositivo criado com Verse para definir o comportamento para fazer a plataforma desaparecer quando o jogador pousar nela e reaparecer uma quantidade aleatória de segundos depois. Siga estas etapas para criar esse dispositivo usando Verse.
Crie um novo dispositivo Verse chamado disappear_on_touch_platform usando o Explorador Verse. Para aprender a criar um novo dispositivo em Verse, consulte Como criar seu próprio dispositivo usando Verse.
Arraste o dispositivo disappear_on_touch_platform do Navegador de Conteúdo para o nível.
Como editar as propriedades do dispositivo no UEFN
Esta seção mostra como expor quatro propriedades do dispositivo ao UEFN, para que você possa personalizá-las no editor:
Uma referência do dispositivo ao objeto criativo que você colocou no nível.
Uma constante float, chamada
DisappearDelay, para armazenar o tempo de espera após o jogador tocar na plataforma para ocultá-la.Duas constantes
floatchamadasDelayMineDelayMaxque armazenam os tempos mínimo e máximo de espera antes de fazer a plataforma reaparecer. Esses dois valores definem o intervalo permitido ao obter um número aleatório.
Siga estas etapas para expor essas propriedades do dispositivo disappear_on_touch_platform criado na seção anterior.
Abra o Explorador Verse e clique duas vezes em disappear_on_touch_platform.verse para abrir o código no Visual Studio Code.
Na definição da classe
disappear_on_touch_platform, adicione os seguintes campos:Um
floateditável chamadoDisappearDelay. Esse é o tempo de espera depois que o jogador toca na plataforma para ocultá-la. Inicialize este valor como1.0, ou um segundo.Verse# How long to wait after the player touches the platform before hiding it. @editable DisappearDelay:float = 1.0Um
floateditável chamadoDelayMin. Essa é o tempo mínimo de espera antes de fazer a plataforma reaparecer. Inicialize-o como3.0, ou três segundos.Verse# The minimum amount of time to wait before making the platform reappear. @editable DelayMin:float = 3.0Um
floateditável chamadoDelayMax. Essa é o tempo máximo de espera antes de fazer a plataforma reaparecer. Inicialize-o como4.0, ou quatro segundos.Verse# The maximum amount of time to wait before making the platform reappear. @editable DelayMax:float = 4.0Um
creative_propeditável chamadoDisappearingPlatform. Essa é a plataforma no nível que desaparecerá e aparecerá periodicamente. Como seu código ainda não tem uma referência a esse objeto no nível, você instanciará isso com um arquétipo vaziocreative_prop{}. Você atribuirá essa referência a sua plataforma flutuante mais tarde.Verse# Reference to the platform in the level. @editable DisappearingPlatform:creative_prop = creative_prop{}Um
trigger_deviceeditável chamadoPlatformTrigger. Você precisará do eventoTriggeredEventdeste dispositivo para saber quando um jogador pousa na plataforma.Verse# The zone a player enters when landing on the platform. @editable PlatformTrigger:trigger_device = trigger_device{}
Os campos de classe
disappear_on_touch_platformagora devem ficar assim:Verse# A Verse-authored creative device that can be placed in a level disappear_on_touch_platform := class(creative_device): # How long to wait after the player touches the platform before hiding it. @editable DisappearDelay:float = 1.0 # The minimum amount of time to wait before making the platform reappear. @editable DelayMin:float = 3.0É útil usar o atributo
@editablepara expor valores comoToggleDelayao editor a partir de seus scripts. Assim, você pode personalizar seus valores no UEFN sem ter que recompilar o código Verse a todo momento, podendo iterar rapidamente e encontrar os valores adequados para a sua experiência de jogo.Salve o script no Visual Studio Code.
Na barra de ferramentas do UEFN, clique em Verse e depois em Compilar código Verse para atualizar o dispositivo disappear_on_touch_platform no nível.
No painel Organizador no UEFN, selecione o dispositivo disappear_on_touch_platform para abrir o painel Detalhes.
No painel Detalhes, sob a plataforma que desaparece ao tocar, defina a Plataforma como RecyclePlatform (o adereço criativo adicionado no nível) clicando no seletor de objetos e selecionando o dispositivo de plataforma na janela de visualização.
Agora que você tem um adereço referenciado pelo seu dispositivo Verse, selecione os dois dispositivos e duplique-os várias vezes no nível para criar uma série de plataformas entre as quais o jogador vai saltar. Cada novo dispositivo Verse que você cria deve fazer referencia a sua própria plataforma.
Como ocultar e exibir a plataforma
Agora que você já configurou o nível e os dispositivos, pode adicionar a funcionalidade para exibir e ocultar a plataforma quando um jogador pousar nela. Siga estas etapas para adicionar esse comportamento à classe disappear_on_touch_platform:
A classe
creative_proptem dois métodos para alternar sua visibilidade:Hide()eShow(). Voltando ao Visual Studio Code, emOnBegin(), chameHide()e depoisShow()emDisappearingPlatform.Verse# Runs when the device is started in a running game OnBegin<override>()<suspends>:void= # Make the platform invisible. DisappearingPlatform.Hide() # Make the platform visible. DisappearingPlatform.Show()Se você executar esse código, não verá a plataforma desaparecer e reaparecer porque as chamadas de
Hide()eShow()ocorrem imediatamente uma após a outra.Para fazer com que a plataforma permaneça em um estado visível/invisível por mais tempo, você pode adicionar um atraso chamando
Hide()ouShow()usandoSleep(). A funçãoSleep()suspende a execução de uma rotina, e você especifica a quantidade de tempo (em segundos) para suspender a execução passando umargumentofloat para a função. ChameSleep()antes de cada chamada deHide()eShow(), passandoDisappearDelayque você definiu anteriormente.~~~(verse) # É executado quando o dispositivo é iniciado em um jogo em execução OnBegin<override>()<suspends>:void=
# Espere a quantidade de segundos em DisappearDelay. Sleep(DisappearDelay)
# Deixe a plataforma invisível. DisappearingPlatform.Hide()
# Espere a quantidade de segundos em DisappearDelay. Sleep(DisappearDelay)
# Deixe a plataforma visível. DisappearingPlatform.Show() ~~~
Agora, se você executar este código, a plataforma ficará invisível por um segundo (o tempo definido por
DisappearDelay) antes de se tornar visível pelo resto do jogo.A função
Sleep()só pode ser chamada em um contexto assíncrono. Como o métodoOnBegin()já é um contexto assíncrono, pois tem um especificadorsuspends, você não precisa fazer mais nada. Para saber mais sobre o especificadorsuspends, consulte Especificadores e atributos.Variar o tempo que a plataforma demora para reaparecer pode deixar o jogo mais interessante. Em vez de fornecer sempre o mesmo valor para
Sleep(), você pode obter um número aleatório de segundos com a funçãoGetRandomFloat()e passar seu valor paraSleep().Na parte superior do arquivo, adicione
using { /Verse.org/Random }para usar a funçãoGetRandomFloat().Verseusing { /Fortnite.com/Devices } using { /Verse.org/Random } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics } # See https://dev.epicgames.com/documentation/en-us/uefn/create-your-own-device-in-verse for how to create a verse device. # A Verse-authored creative device that can be placed in a level disappear_on_touch_platform := class(creative_device):Use a função
GetRandomFloat()como um argumento paraSleep()quando estiver decidindo o tempo pelo qual esperar antes de fazer a plataforma reaparecer e defina o intervalo de segundos permitido comDelayMineDelayMax.Verse# Runs when the device is started in a running game OnBegin<override>()<suspends>:void= # Wait for DisappearDelay seconds. Sleep(DisappearDelay) # Make the platform invisible. DisappearingPlatform.Hide() # Wait between DelayMin and DelayMax seconds.
Agora a plataforma aguardará
1.0segundos antes de desaparecer e reaparecerá entre3.0e4.0segundos depois.
Como detectar o pouso do jogador na plataforma
Para poder detectar quando o jogador pousa na plataforma, você pode se inscrever no evento TriggeredEvent que a classe trigger_device expõe. O gatilho só envia o TriggeredEvent quando um jogador passa por ele. Como você definiu Vezes que Pode Ser Acionado como 1, você precisará chamar Reset() no gatilho para redefinir seu estado e permitir que ele envie o TriggeredEvent novamente.
Siga estas etapas para detectar quando o jogador toca a plataforma e use o código que você escreveu na seção anterior para fazer com que a plataforma seja ocultada e reapareça em resposta.
O
TriggeredEventexige uma assinatura de função com umplayeropcional como um parâmetro evoidcomo o tipo de retorno. O agente é opcional nesta função pois você também pode ativar os dispositivos Gatilho por meio de código, então precisa verificar se um jogador foi quem o ativou. Adicione um novo método à classedisappear_on_touch_platformchamadoOnPlayerTouch().VerseOnPlayerTouch(ActivatingPlayer:?agent):void=Em
OnPlayerTouch(), em uma expressãoif, tente obter o jogador a partir da opçãoActivatingPlayer. Se essa chamada for efetivada, você sabe que um jogador ativou o gatilho, e não foi um código.VerseOnPlayerTouch(ActivatingPlayer:?agent):void= if: Player := ActivatingPlayer? then: Print("A player touched a platform!")Em
OnBegin(), inscreva-se emPlatformTrigger.TriggeredEventusandoOnPlayerTouchcomo o identificador do evento. Agora, sempre que um jogador pousar em uma plataforma, oTriggeredEventserá ativado eOnPlayerTouch()será executado.VerseOnBegin<override>()<suspends>:void= # Subscribe to the PlatformTrigger's TriggeredEvent to know # when a player lands on the platform. PlatformTrigger.TriggeredEvent.Subscribe(OnPlayerTouch)Quando a plataforma é ocultada, os jogadores devem poder ativar o gatilho, pois eles devem atravessar a plataforma. Para gerenciar isso, em
OnBegin(), adicione chamadas aPlatformTrigger.Disable()eEnable()depois deHide()eShow(), respectivamente. Agora não será possível interagir com o seu gatilho enquanto a plataforma estiver oculta.VerseOnBegin<override>()<suspends>:void= # Subscribe to the PlatformTrigger's TriggeredEvent to know # when a player lands on the platform. PlatformTrigger.TriggeredEvent.Subscribe(OnPlayerTouch) # Wait for DisappearDelay seconds. Sleep(DisappearDelay) # Hide the platform and disable the trigger.
Embora você precise ocultar a plataforma quando um jogador pousa nela, você não pode adicionar o código para ocultar e exibir a plataforma diretamente ao método OnPlayerTouch(). A função Sleep() só pode ser chamada em um contexto assíncrono, e você não pode adicionar o especificador suspends a OnPlayerTouch(), porque TriggeredEvent não permite funções assíncronas como seu manipulador de eventos. Em vez disso, você pode usar spawn para chamar uma função assíncrona de OnPlayerTouch(). Siga estas etapas para adicionar a função assíncrona.
Adicione um novo método
RecyclePlatform()à definição da classedisappear_on_touch_platform. Adicione o modificador<suspends>para permitir que esse código seja executado de forma assíncrona e mova o código para ocultar e exibir a plataforma e o gatilho deOnBeginpara o bloco de códigoRecyclePlatform().Verse# Hide the platform and reset the PlatformTrigger. Then wait a random amount of time and reactivate show the platform. RecyclePlatform()<suspends> : void = # Wait for DisappearDelay seconds. Sleep(DisappearDelay) # Hide the platform and disable the trigger. DisappearingPlatform.Hide() PlatformTrigger.Disable()Em
OnPlayerTouch(), chamespawn{}emRecyclePlatform()para executar o código de forma assíncrona. Sua funçãoRecyclePlatform()completa deve ficar assim:Verse# Runs when a player lands on the platform. Calls RecyclePlatform() to hide the platform # and reset trigger state. OnPlayerTouch(ActivatingPlayer:?agent):void= if: Player := ActivatingPlayer? then: Print("A player touched a platform!") spawn{RecyclePlatform()}Se você executar esse código, a plataforma desaparecerá e reaparecerá quando o jogador subir pela primeira vez nela.
Assíncrono sugere que um trecho de código pode levar algum tempo para ser concluído. Nesse caso, por exemplo, reiniciar o ciclo da plataforma leva alguns segundos devido a todas as chamadas
Sleep(). As funções assíncronas permitem realizar operações sem bloquear a execução do código que chama a função assíncrona. Para saber mais sobre contextos assíncronos e a expressãospawn, consulte Simultaneidade.No momento, o
TriggeredEventsó é enviado na primeira vez que o jogador pousa na plataforma. Para fazer com que o evento possa ser acionado novamente, você pode chamar uma redefinição do gatilho. EmRecyclePlatform(), chameReset()emPlatformTriggerdepois de chamarEnable().Verse# Hide the platform and reset the PlatformTrigger. Then wait a random amount of time and reactivate show the platform. RecyclePlatform()<suspends> : void = # Wait for DisappearDelay seconds. Sleep(DisappearDelay) # Hide the platform and disable the trigger. DisappearingPlatform.Hide() PlatformTrigger.Disable()Salve o código e clique em Verse e em Compilar código Verse para compilar o código.
Clique em Iniciar Sessão na barra de ferramentas do UEFN para testar o nível.
Quando você testa o nível, cada plataforma deve desaparecer quando você pousa nela e reaparecer uma quantidade aleatória de segundos depois.
Script completo
O código a seguir é o script completo para fazer uma plataforma desaparecer quando o jogador pousar nela e reaparecer após alguns segundos.
using { /Fortnite.com/Devices }
using { /Verse.org/Random }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
# See https://dev.epicgames.com/documentation/en-us/uefn/create-your-own-device-in-verse for how to create a verse device.
# A Verse-authored creative device that can be placed in a level
disappear_on_touch_platform := class(creative_device):
# How long to wait after the player touches the platform before hiding it.
Por si só
Depois de concluir este tutorial, você terá aprendido a criar um dispositivo usando Verse que faz uma plataforma desaparecer quando o jogador pousa nela e reaparecer uma quantidade aleatória de segundos depois.
Usando o que você aprendeu, tente o seguinte:
Teste os tamanhos e as posições das plataformas para criar um desafio interessante.
Neste exemplo, o jogador não marca pontos e nada acontece quando ele cai. Você consegue pensar em como implementaria um sistema de pontuação e uma condição de derrota?