Boas-vindas ao modelo de projeto LEGO® Espanto Espacial! Veja de perto uma espaçonave aterrorizante cheia de cenas de susto. Em seguida, aprenda a usar dispositivos e códigos Verse para criar seu próprio jogo com temática cósmica e assustadora baseado neste modelo de projeto exclusivo.
Como jogar o Espanto Espacial
No modelo Espanto Espacial, você joga na pele de um membro da tripulação de uma espaçonave. Nesta seção, você verá um tutorial básico do jogo, que explica a ideia geral do projeto e as mecânicas demonstradas de cada sequência.
Para criar um projeto a partir do modelo, localize Brand Templates no Navegador de Projetos e selecione o modelo ScarySpace em LEGO®.
Ao abrir o modelo de projeto no UEFN, clique em Launch Session para abrir o cliente do Fortnite.
Conforme as preferências no seu editor, o cliente do projeto será inicializado no modo Jogo, ou numa ilha no Modo de Criação. Se você estiver no Modo de Criação, abra o menu do jogo e clique no botão amarelo Start Game para iniciar o jogo.
Sala de controle
Na sala de controle da nave, um robô amigável conversa com você e cria uma história para explicar por que você está vagando pelo espaço numa espaçonave. O robô diz que um meteoro caiu na nave e recomenda que você encontre o local do impacto e avalie os estragos.
Esta sequência de introdução inclui uma cinematografia e um PNJ e introduz o mundo do jogo ao jogador. A cena foi criada usando o Sequencer. O ativo IntroSequence está na pasta Sequences, no seu projeto. Há também um dispositivo Verse ("intro_manager_device.verse") que controla o movimento do jogador durante a cena.
using { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
# O objetivo dessa classe é bloquear o movimento do jogador durante a cena de introdução e liberar no fim dela.
intro_manager_device := class(creative_device):
# O dispositivo que fornece o evento de jogabilidade a partir da sequência.
@editable
TriggerDevice : trigger_device = trigger_device{}
OnBegin<override>()<suspends>:void=
Sleep(0.0)
# Aqui o jogador é colocado em estase (movimento bloqueado) até o evento de jogabilidade ativar o dispositivo e, consequentemente, remover a condição de estase do jogador.
if(Character := GetPlayspace().GetPlayers()[0].GetFortCharacter[]):
Character.PutInStasis(stasis_args{AllowFalling := true})
TriggerDevice.TriggeredEvent.Await()
Character.ReleaseFromStasis()
Como percorrer os corredores
Você passa por alguns corredores que levam até o hangar, em busca do local do impacto. Algumas surpresas esperam por você nestes corredores!
Nos dois primeiros corredores, você pode ver como ajustar as configurações da câmera para definir as cenas de susto.
-
Sequence A: na primeira parte, a câmera é colocada mais perto para criar uma experiência de jogo mais pessoal e intensa. Essa sequência usa os dispositivos Mutator Zone e Orbit Camera para alterar o ponto de vista do jogador.
-
Sequence B: no final do primeiro corredor, um dos alienígenas que olhava pela janela fará uma aparição inesperada! Nessa cena de susto, os dispositivos Cadeado, Gatilho e Reprodutor de Áudio são utilizados, e o controle se dá pelo dispositivo Verse hallway_jump_scare_device.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
using { Utility }
hallway_jump_scare_device := class(creative_device):
# O atributo editável cria uma referência que pode ser atribuída no editor.
@editable
PlayerTrigger : trigger_device = trigger_device{}
@editable
LockDevice : lock_device = lock_device{}
@editable
ScaryProps : []creative_prop = array{}
@editable
StingerAudioPlayer : audio_player_device = audio_player_device{}
@editable
HallwayLight : customizable_light_device = customizable_light_device{}
OnBegin<override>()<suspends>:void=
ScaryProps.SetVisibility(false)
# O primeiro passo é aguardar os jogadores colidirem com o gatilho e salvar o agente para ser usado no dispositivo Cadeado.
MaybeAgent := PlayerTrigger.TriggeredEvent.Await()
if (Agent := MaybeAgent?):
# First part: Initialize the jump scare by opening the door and start the playback of the audio stinger.
LockDevice.Open(Agent)
StingerAudioPlayer.Play()
# Aqui, a espera serve para controle de tempo.
Sleep(0.5)
# Segunda parte: mostre a janela e comece a fechar a porta.
ScaryProps.SetVisibility(true)
LockDevice.Close(Agent)
# Novamente, esperamos para fins de temporização.
Sleep(1.8)
# Terceira parte: o adereço é escondido. Assim, quando o jogador chegar até a porta, o corredor parecerá "comum" em vez de ter um monstro assustador.
ScaryProps.SetVisibility(false)
Sleep(0.5)
HallwayLight.TurnOn()
Dentro do hangar
Por fim, no fim do segundo corredor, você chega ao hangar. Passe pelas portas deslizantes. Depois de entrar no hangar, as luzes se apagarão, uma a uma. Cuidado! Os alienígenas estão de olho em você! Os olhos dos alienígenas não desgrudam do jogador, aumentando a tensão novamente.
Quando estiver no fim do labirinto do hangar, uma mão se estenderá para pegar o jogador!
-
Sequence C: a lentidão do acender das luzes aumenta a tensão (por causa dos passos lentos), mas também proporciona alívio (a escuridão de antes foi substituída pela luz). Esta sequência usa dispositivos Gatilho para criar eventos em que as luzes são habilitadas com uma série de atrasos.
-
O hangar tem layout de labirinto, fazendo com que você precise navegar e explorar os diferentes ativos espaciais usados neste modelo. Esses ativos estão disponíveis no Navegador de Conteúdo e também na forma de Estruturas Pré-fabricadas e Galerias no inventário do Modo Criativo.
-
Sequence D: esta sequência controla os olhos do alienígena que seguem o jogador. Um dispositivo Gatilho é usado para iniciar a sequência, mas os outros movimentos são controlados pelo dispositivo Verse
prop_look_at_device
.
using { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
using { Utility }
prop_look_at_device := class(creative_device):
# O atributo editável cria uma referência que pode ser atribuída no editor
# O adereço de flor com olhos que vamos girar
@editable
Prop : creative_prop = creative_prop{}
@editable
PlayerTrigger : trigger_device = trigger_device{}
@editable
CreakAudioPlayer : audio_player_device = audio_player_device{}
DetectionThreshold : float = 800.0
RotationInterval : float = 0.5
OnBegin<override>()<suspends> : void =
# Aguarde o jogador entrar na sala e acione o PlayerTrigger
PlayerTrigger.TriggeredEvent.Await()
# O PlayerTrigger também interage com as luzes que são ligadas depois de um tempo. Confira o "cartaz da sequência de luzes do StorageRoom" no editor para obter mais informações.
# Portanto, esperamos 3 segundos até as luzes ligarem antes que a planta gire. Isso dá um efeito dramático.
Sleep(3.0)
# Aqui nós inicializamos a corrotina de atualização para verificar a posição do jogador e girar o adereço na direção dele.
UpdateProp()
UpdateProp()<suspends>:void=
# Para começar, o adereço de flor com olhos dá uma volta dramática de 180 graus e reproduz uma indicação sonora,
PropTransform := Prop.GetTransform()
PIRotation := PropTransform.Rotation.ApplyLocalRotationZ(PiFloat)
CreakAudioPlayer.Play()
Prop.MoveTo(PropTransform.Translation, PIRotation, 4.0)
# O código no loop abaixo continua procurando pelo jogador e gira o adereço na direção dele.
loop:
# Obtenha a transformação do jogador e verifique se a distância entre ele e o adereço é inferior a "DetectionThreshold".
if(PlayerTransform := GetPlayspace().GetPlayers()[0].GetFortCharacter[].GetTransform(),
Distance(PlayerTransform.Translation, PropTransform.Translation) <= DetectionThreshold):
# Crie um vetor que aponta do adereço para o jogador.
ToVector := PlayerTransform.Translation - PropTransform.Translation
# Crie uma rotação ao redor do eixo para cima ou Z, alinhada com o ToVector, usando a função personalizada LookInDirection.
ToRotation := LookInDirection(ToVector)
# Mova apenas o adereço e reproduza a indicação sonora se a posição do jogador mudar.
if (Distance(Prop.GetTransform().Rotation,ToRotation) <= 0.01):
CreakAudioPlayer.Stop()
Sleep(RotationInterval)
else:
# Reproduza som de rangido
CreakAudioPlayer.Play()
# Crie uma animação interpolada com a função MoveTo.
Prop.MoveTo(PropTransform.Translation, ToRotation, RotationInterval)
# Se o jogador estiver longe demais ou sair do jogo, o código aguarda RotationInterval.
else:
Sleep(RotationInterval)
- Sequence E: no final da área, há uma cena de susto. Esta cena foi criada com o Sequencer. O ativo SkeletonArmTrapSequence está na pasta Sequences, no seu projeto.
Seção transversal e perseguição do alienígena da caixa
Enquanto você sai do hangar e vai para uma interseção em forma de X, um alienígena numa caixa chegará com uma cinematografia curta. Saia correndo! O alienígena estará no seu encalço enquanto você vai na direção do local da queda do meteoro.
-
Sequence F: esta cena usa cinematografia, um dispositivo Verse e uma sequência para criar ação.
-
O alienígena da caixa é apresentado com uma cinematografia curta. A aparência da atmosfera é outra maneira de aumentar as tensões. A cinematografia e o movimento do alienígena da caixa é criado com o BoxChaseSequence integrado no Sequencer. O ativo BoxChaseSequence está na pasta Sequences, no seu projeto.
-
Após a cena, os jogadores precisam começar a se afastar imediatamente do alienígena da caixa ao serem perseguidos por eles. Se o alienígena da caixa capturar os jogadores, eles serão nocauteados e precisarão reiniciar a cena de perseguição.
-
Depois da animação, a cena é controlada pelo dispositivo Verse "box_chase_device".
-
using { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Fortnite.com/Game }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
box_chase_device := class(creative_device):
# O atributo editável cria uma referência que pode ser atribuída no editor.
@editable
SequenceDevice : cinematic_sequence_device = cinematic_sequence_device{}
@editable
PlayerTrigger : trigger_device = trigger_device{}
@editable
EndCinematicTrigger : trigger_device = trigger_device{}
@editable
MonsterProp : creative_prop = creative_prop{}
@editable
MonsterBreathingAudioPlayer : audio_player_device = audio_player_device{}
OnBegin<override>()<suspends>:void=
# Esconda o monstro para evitar que os jogadores o vejam antes do planejado.
MonsterProp.Hide()
# Obtenha o personagem do Fortnite do jogador para bloquear o movimento dele durante a cena.
Players := GetPlayspace().GetPlayers()
if (Player := Players[0], Character := Player.GetFortCharacter[]):
loop:
# Espere o jogador interagir com o gatilho posicionado no nível.
PlayerTrigger.TriggeredEvent.Await()
PlayerTrigger.Disable()
MonsterProp.Show()
# Comece a reproduzir a sequência a partir da cena.
SequenceDevice.Play()
# Bloqueie o movimento do jogador durante a cena.
Character.PutInStasis(stasis_args{})
EndCinematicTrigger.TriggeredEvent.Await()
# Desbloqueie o movimento do jogador.
Character.ReleaseFromStasis()
# Reproduza o áudio do som da respiração do monstro.
MonsterBreathingAudioPlayer.Play()
# Detecte se o jogador foi eliminado pelo monstro.
Character.EliminatedEvent().Await()
Sleep(3.0)
# Redefina a configuração da perseguição para ser executada novamente depois que os jogadores ressurgirem no ponto de controle.
SequenceDevice.GoToEndAndStop()
MonsterProp.Hide()
PlayerTrigger.Enable()
Local da queda do meteoro
Ao chegar ao local do impacto do meteoro, você deve ir até o topo da rocha para entrar num portal que dá na última sala, onde estará o chefe alienígena. Esta é uma área de exploração, que não tem nenhuma mecânica de interação além do portal que dá na área final. Você pode adicionar mecânicas aqui ou usar o ambiente para orientar o jogador até o portal.
Área externa no espaço (área do chefe)
O portal no local da queda do meteoro leva a uma área externa no espaço. Esta área final tem vários elementos de design diferentes, inclusive:
-
Uma cinematografia final dedicada ao monólito do chefe alienígena assustador, feita especialmente para este modelo.
-
A cinematografia é reduzida para mostrar um plano de fundo misterioso e escadarias giratórias. Essas escadarias giratórias assustadoras e outros elementos simples demonstram como é possível provocar tensão e criar uma atmosfera de horror cósmico ao exibir coisas familiares que parecem ou agem de formas alienígenas/estranhas.
A sequência da área final é controlada pelo dispositivo Verse "end_game_manager_device".
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
# A finalidade desta classe é tratar de eventos acionados por EndingSequence e ativar o dispositivo Fim de Jogo.
end_game_manager_device := class(creative_device):
# O atributo editável cria uma referência que pode ser atribuída no editor.
@editable
TriggerDevice : trigger_device = trigger_device{}
@editable
EndGameDevice : end_game_device = end_game_device{}
# O dispositivo de gatilho é acionado com um evento de jogabilidade da EndingSequence.
OnBegin<override>()<suspends>:void=
TriggerDevice.TriggeredEvent.Await()
if (Player := GetPlayspace().GetPlayers()[0]):
# O dispositivo Fim de Jogo precisa receber um agente ou jogador para encerrar o jogo.
EndGameDevice.Activate(Player)
~~~
## Organização do Outliner da UEFN
Neste projeto, o Outliner é organizado de uma forma muito conveniente. Cada área é numerada numa ordem. Assim, o Outliner segue o fluxo do jogo. Dentro da pasta de cada área, há várias outras pastas que sempre estão na mesma ordem alfabética:
* **Floor**
* **Lights**
* **Props**
* **Roof**
* **Setups**
* **Walls**
Algumas áreas têm pastas adicionais relacionadas especificamente a uma área. Essas pastas contêm todos os ativos utilizados na construção da área.
A pasta **Setups:** contém os dispositivos (inclusive os dispositivos Verse) para criar cinematografias e sequências de ação para a respectiva área. Recomendamos numerar as pastas de sequência, ou adicionar um prefixo de **A** a **F** que correspondam aos cartazes de instruções que descrevem como foi criada cada sequência.
Além das pastas que correspondem às áreas do jogo, também há as pastas a seguir:
* **Environment:** esta pasta contém os dispositivos que fornecem os limites do nível e criam o ambiente para as áreas fora da espaçonave.
* **Settings:** esta pasta contém os dispositivos que controlam as configurações de todo o jogo, inclusive o dispositivo Configurações da Ilha. Também inclui três dispositivos Cartaz com as instruções iniciais (denominados "Call to Action Billboards").
* **TUTORIAL Jump Scare:** esta pasta contém os materiais para o tutorial da cena de susto (veja a próxima seção).
## Jump Scare Tutorial
Esta é uma sequência de cenas de susto inacabada que você pode concluir e personalizar para seu projeto. O cartaz fornece uma descrição básica, mas os comentários contêm mais detalhes sobre o código Verse da sequência. Tente adicionar esta ou outras cenas de susto novas em outros pontos deste modelo!
O Cartaz que descreve o tutorial da cena de susto chama o dispositivo Verse de `unfinished_jump_scare_device`, mas você pode ver no Explorador do Verse que o nome verdadeiro do dispositivo Verse e o código dele são `tutorial_jump_scare_device`.
~~~(verse)
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
using { Utility }
# A cena de susto funcionará com o jogador que estiver olhando pela janela. Quando ele olhar, um adereço assustador passará voando e um som será reproduzido.
# Isso é implementado através do uso do gatilho de percepção, de modo a garantir que o jogador estará olhando para onde você quer que ele olhe.
# Siga as instruções abaixo e conclua o código.
tutorial_jump_scare_device := class(creative_device):
# No Outliner, atribua os dispositivos e os adereços necessários. Você deve posicioná-los perto do dispositivo do Modo Criativo no nível.
@editable
PerceptionTrigger : perception_trigger_device = perception_trigger_device{}
@editable
ScaryProp : creative_prop = creative_prop{}
@editable
AudioPlayer : audio_player_device = audio_player_device{}
# Qual deve ser a velocidade do adereço?
Duration : float = 1.0
# Qual deve ser distância que o adereço deve alcançar?
MovementDistance : float = 700.0
# Confira os passos destacados abaixo para criar uma cena de susto no local por onde o monstro passará voando quando o jogador estiver olhando.
# Preencha o código conforme as instruções.
OnBegin<override>()<suspends>:void=
# 0.
# Comece escondendo o adereço assustador para que não fique visível em outros lugares.
ScaryProp.Hide()
# 1.
# Comece esperando o jogador olhar para o gatilho de percepção.
# Procure o perception_trigger_device em Fortnite.digest.verse ou pesquise por ele para encontrar o nome do evento.
# 2.
# Reproduza o áudio.
# 3.
# É preciso exibir o adereço.
# 4.
# Crie o movimento para o adereço usando a função MoveTo. Para os parâmetros das funções, use o Duration, VectorUp obtidos no script do utilitário e as variáveis de MovementDistance.
# 5.
# Após a cena de susto, oculte o adereço novamente para não deixar rastros.
# 6.
# Teste para conferir que tudo funciona como planejado. Modifique como quiser os valores das variáveis e tente descobrir outros locais na fase para utilizar a cena de susto!
Dicas e decisões de design
Confira algumas informações sobre a ideia geral deste projeto para orientar e inspirar quando alguém o usar na criação do seu próprio jogo.
-
O objetivo do modelo deste projeto é apresentar sistemas orientados por eventos no UEFN, através de dispositivos ou Verse.
-
O tom geral deste projeto é um gênero chamado horror cósmico. Esse gênero destaca a insignificância em seu auge diante da vastidão do universo. Elementos alienígenas, estranhos ou grotescos costumam ser usados para inspirar esse senso de terror e insignificância.
-
Cenas de susto são uma técnica comum em vários gêneros presentes na mídia e também são usados neste projeto. Siga o tutorial de cena de susto para aprender a criar sua própria cena de susto. Você também pode modificar, mover ou excluir as cenas de susto existentes que estão integradas neste projeto.
-
Investigue o código e os dispositivos Verse para ver como funcionam e como você pode copiar ou os reutilizar em outras áreas. Você pode ver e editar o código Verse ao acessar a barra Menu e clicar em Verse > Verse Explorer. Será aberta uma aba encaixada perto do Outliner. Você também pode abrir o código Verse do projeto no VSCode.
Por conta própria
Agora você já sabe criar um jogo espacial misterioso e aterrorizante na sua Ilha Lego, então crie um monte de coisas assustadoras agora mesmo!
Se quiser saber mais sobre a criação de Ilhas Lego, confira nossa seção Construindo Ilhas Lego na documentação do Modo Criativo do Fortnite. Ou leia a documentação do UEFN para saber mais sobre o UEFN. Comece pelos primeiros passos.