Esta seção mostrará como configurar efeitos de áudio, como latidos, e visuais, como trepidações da câmera, para criar uma experiência de jogo envolvente.
Dispositivo Reprodutor de Áudio
Você pode utilizar o dispositivo Reprodutor de Áudio para definir o uso das linhas de diálogo dos guardas. No desenvolvimento de jogos, essas linhas de diálogo costumam ser chamadas de latidos (ou "barks", em inglês).

Você pode encontrar o áudio importado em "Pasta do projeto" > Barks (Latidos). Clique no ícone Reproduzir para ouvir o arquivo de áudio e, em seguida, arraste-o e solte-o na sua ilha.

Soltar um arquivo de áudio na ilha posicionará um dispositivo Reprodutor de Áudio, que é conectado a um dispositivo Verse para reproduzir uma série de textos personalizados de guardas. Esses textos reagem a diferentes eventos, como avistar um jogador ou sofrer dano.
Coloque um Reprodutor de Áudio para cada áudio exclusivo que deseja reproduzir. Este tutorial usa 14 latidos diferentes, com 14 dispositivos Reprodutor de Áudio diferentes posicionados.
Para configurar esses dispositivos, personalize as seguintes configurações:

Opção | Valor | Explicação |
---|---|---|
Volume | 4,0 | Essa configuração pode variar dependendo da gravação. |
Reiniciar Áudio ao Ativar | True | Esse áudio será reproduzido desde o início quando ativado. |
Reproduzir com Acerto | False | Esse dispositivo não reproduzirá áudio quando atingido por um jogador. |
Local de Reprodução | Jogador Instigador | O áudio será reproduzido com base na localização do jogador instigador e não na localização do dispositivo. |
Habilitar Atenuação do Volume | False | Altera o volume com base na distância do dispositivo ou guarda definido para reproduzi-lo. Para este tutorial, o jogador ouvirá o áudio independentemente da que distância estiver. |
Em seguida, configure o script Verse para lidar com a lógica de acionamento dos dispositivos Reprodutor de Áudio durante o jogo e, em seguida, posicione o dispositivo Verse. Para este tutorial, o dispositivo se chama Gerenciador de Latidos da Fortaleza.
Cole o seguinte script Verse.
~~~(verse) using { /Fortnite.com/Devices } using { /Fortnite.com/Game } using { /Fortnite.com/Characters } using { /Verse.org/Random } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics } using { /UnrealEngine.com/Temporary/SpatialMath }
Latido de áudio que pode ser reproduzido em um PNJ
audio_npc_bark := class
Script que lida com os latidos dos guardas
stronghold_bark_manager := class(creative_device):
# Referência ao Gerenciador de Jogo para monitorar eventos de percepção
@editable
StrongholdGameManager:stronghold_game_manager := stronghold_game_manager{}
# Dispositivos Reprodutor de Áudio
@editable
BarkNPCDown:audio_npc_bark = audio_npc_bark{BarkID := "Man Down", Delay := 0.3}
@editable
BarkFallback:audio_npc_bark = audio_npc_bark{BarkID := "Fallback", CanRepeat := false, Delay := 3.0}
@editable
BarkNeedBackup:audio_npc_bark = audio_npc_bark{BarkID := "Need Backup", CanRepeat := false, Delay := 2.0}
@editable
BarkGoToLeash:audio_npc_bark = audio_npc_bark{BarkID := "Reinforcements En Route", CanRepeat := false, Delay := 4.0}
@editable
BarkDamageTaken:audio_npc_bark = audio_npc_bark{BarkID := "Took Damage", Delay := 0.2}
@editable
BarkDamagePlayer:audio_npc_bark = audio_npc_bark{BarkID := "Hit Player", Delay := 0.2}
@editable
BarkEliminatedPlayer:audio_npc_bark = audio_npc_bark{BarkID := "Eliminated Player", Delay := 0.3}
@editable
BarkPlayerSpotted:audio_npc_bark = audio_npc_bark{BarkID := "Spotted Player", CanRepeat := false}
@editable
BarkPlayerLost:audio_npc_bark = audio_npc_bark{BarkID := "Lost Player", Cooldown := 10.0}
@editable
BarkGuardSuspicious:audio_npc_bark = audio_npc_bark{BarkID := "Suspicious", Cooldown := 10.0}
@editable
BarkGuardUnaware:audio_npc_bark = audio_npc_bark{BarkID := "Unaware", Cooldown := 10.0}
# Variável para armazenar se os guardas estavam procurando alvos
var
OnGuardDamaged(InteractionResult:device_ai_interaction_result):void=
if (Guard := InteractionResult.Target?):
spawn {BarkDamageTaken.PlayBark(Guard)}
# O jogador foi atingido, tentar reproduzir um latido no guarda que causou dano ao jogador
OnPlayerDamaged(DamageResult:damage_result):void=
if:
fort_character[DamageResult.Target].GetHealth() > 0.0
Guard := DamageResult.Instigator?.GetInstigatorAgent[]
then:
spawn {BarkDamagePlayer.PlayBark(Guard)}
# O jogador foi abatido, tentar reproduzir um latido no guarda que eliminou o jogador
OnPlayerEliminated(InteractionResult:device_ai_interaction_result):void=
if (Guard := InteractionResult.Source?):
spawn {BarkEliminatedPlayer.PlayBark(Guard)}
HandleReinforcementSpawned(Guard:agent):void=
spawn {BarkGoToLeash.PlayBark(Guard)}
~~~
Esse script armazena uma referência a todos os dispositivos Reprodutor de Áudio e faz referência ao dispositivo Verse Gerenciador do Jogo de Fortaleza como um canal para suas referências aos geradores de guardas.
Luzes personalizáveis

Além de obter feedback de áudio dos guardas de IA, você também pode fornecer aos jogadores um feedback visual do ambiente.
Este tutorial usa dois conjuntos de dispositivos Luz Personalizável ao redor da fortaleza. Uma luz vermelha indica um status "detectado", enquanto uma luz laranja indica um status "em alerta".
Para configurar esses dispositivos, personalize as seguintes configurações:
Opção | Valor | Explicação |
---|---|---|
Estado Inicial | False | Determina o estado inicial das luzes quando o dispositivo é habilitado. |
Tamanho da Luz | 100,00 | Determina o tamanho, o alcance e a amplitude do reflexo da luz. |
Projetar Sombras | True | Permite que a luz projete sombras. |
Habilitado Durante Fase | Apenas Jogo | As luzes serão habilitadas apenas durante o jogo. |
Intensidade da Luz | 30,0 | Determina a intensidade da luz. |
Frequência do Ritmo | x8 | Determina o multiplicador de tempo para a Predefinição de Ritmo. |
Redução da Luz | 100,0 | Determina a intensidade de escurecimento da luz ao usar os controles de canal. |
Tempo de Redução | 0,1 | Determina a duração da transição de escurecimento em segundos. |
Criador de Efeito Visual

Este tutorial também usa um dispositivo Criador de efeitos visuais no topo da base para atuar como um sinalizador com o intuito de indicar o acionamento de reforços quando os jogadores são detectados pela primeira vez. Esse sinalizador é controlado pelo dispositivo Verse e disparará com as luzes do canto quando os guardas forem alertados, para tornar seus estados visualmente claros.
Para configurar esses dispositivos, personalize as seguintes configurações:

Opção | Valor | Explicação |
---|---|---|
Iniciar Efeitos ao Habilitar | False | Determina se o dispositivo executará os efeitos quando habilitado. |
Tamanho da Imagem | 2,0 | Define o tamanho inicial do sprite do efeito. |
Duração da Imagem | 5,0 | Define por quanto tempo cada sprite aparecerá. |
Cor Principal | Vermelho | Define a cor principal dos efeitos. |
Intensidade da Cor Principal | 200,0 | Define o brilho da Cor Principal. |
Velocidade da Imagem | 100,0 | Define a velocidade com que os sprites de efeitos começam a se mover. |
Efeito de Gravidade | 15,0 | Define a velocidade com que os sprites de efeito podem cair. |
Aleatoriedade | 100,0 | Determina o nível de aleatoriedade do movimento e adiciona variação ao tamanho. |
Manter Tamanho | False | Determina se os sprites mantêm seu tamanho ou usam um tamanho personalizado que se altera com o tempo. |
Quantidade Gerada | 4,0 | Define quantos sprites de efeito são gerados. |
Formato da Área de Surgimento | Ponto | Determina a forma do espaço onde os sprites surgem inicialmente. |
Tamanho da Área de Surgimento | 0,05 | Define o tamanho da forma de surgimento em ladrilhos. |
Habilitado Durante Fase | Apenas Jogo | Determina as fases do jogo durante as quais o dispositivo será habilitado. |
Loop | Nunca | Determina se o efeito é reproduzido apenas uma vez, infinitamente em loops ou uma quantidade personalizada de vezes. |
Dispositivo Rádio
Este tutorial usa dois dispositivos Rádio, um para a música de combate de alerta máximo e o outro para a música de cautela.
A música para momentos tensos usa: Rádio > Loops de Música > Music_StW_Low_Combat01_Cue'.
A música para o combate quando o jogador é avistado usa: "Rádio > Loops de Música > Music_StW_High_Combat01_Cue".
Configure um script Verse que pode chamar de "Stronghold_Alert_Manager" para ouvir quando um guarda tiver detectado o jogador ou quando todos os guardas tiverem perdido o jogador de vista para alternar entre os dois estados na fortaleza.
Cole o seguinte script Verse.
using { /Verse.org/Simulation }
using { /Verse.org/Simulation/Tags }
using { /Verse.org/Colors }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /Fortnite.com/Devices }
# As tags para as luzes personalizáveis
alerted_lights_tag := class(tag){}
combat_lights_tag := class(tag){}
# Script que controla a música e acende as luzes quando os guardas são alertados
stronghold_alert_manager := class(creative_device):
# Referência ao Gerenciador de Jogo para monitorar eventos de percepção
@editable
StrongholdGameManager:stronghold_game_manager := stronghold_game_manager{}
# Referência ao rádio que reproduz a música de combate
@editable
RadioCombat:radio_device := radio_device{}
# Referência ao rádio que reproduz a música de alerta
@editable
RadioAlerted:radio_device := radio_device{}
# Efeitos visuais que serão reproduzidos quando o alarme/sinalizador for disparado
@editable
FlareAlarmVFXCreator:vfx_creator_device := vfx_creator_device{}
# Dados de classe
var<private> CustomizableLightDevicesAlerted: []customizable_light_device = array{}
var<private> CustomizableLightDevicesCombat: []customizable_light_device = array{}
# Alterar o acampamento para o estado de alerta quando não vir mais o jogador ou ele for eliminado
WaitForAlerted()<suspends>:void=
# Não retornar para o estado de alerta após a retirada
if (StrongholdGameManager.FallbackTriggered?):
Sleep(Inf)
StrongholdGameManager.GuardsUnawareEvent.Await()
Sleep(3.0)
SetAlertedMood()
# Alterar o acampamento para combate quando o jogador for avistado
WaitForCombat()<suspends>:void=
race:
StrongholdGameManager.PlayerDetectedEvent.Await()
StrongholdGameManager.FallbackEvent.Await()
Sleep(2.0)
SetCombatMood()
# É executado quando o dispositivo é iniciado em um jogo em execução
OnBegin<override>()<suspends>:void=
FindLightsWithTag()
MonitorStrongholdAlertStatus()
# Loop principal que verifica se a fortaleza está em modo de combate ou de alerta
MonitorStrongholdAlertStatus()<suspends>:void=
loop:
WaitForCombat()
WaitForAlerted()
# Definir a base para o combate, alternando as luzes vermelhas e reproduzindo música de alta intensidade
SetCombatMood():void=
# Executar o loop das luzes de combate e acendê-las
for(LightsToTurnOn: CustomizableLightDevicesCombat):
LightsToTurnOn.TurnOn()
# Executar o loop das luzes de alerta e apagá-las
for(LightsToTurnOff: CustomizableLightDevicesAlerted):
LightsToTurnOff.TurnOff()
# Ligar o áudio de combate e desligar o áudio de alerta
RadioCombat.Play()
RadioAlerted.Stop()
FlareAlarmVFXCreator.Toggle()
# Definir a base para o estado de alerta, alternando as luzes amarelas e reproduzindo a música tensa
SetAlertedMood():void=
for(LightsToTurnOn: CustomizableLightDevicesAlerted):
LightsToTurnOn.TurnOn()
for(LightsToTurnOff: CustomizableLightDevicesCombat):
LightsToTurnOff.TurnOff()
RadioCombat.Stop()
RadioAlerted.Play()
# Executar os loops dos dispositivos do Modo Criativo para as luzes com essa tag de Verse específica e as salvar em uma lista
FindLightsWithTag() : void=
TaggedAlertedLightDevices := GetCreativeObjectsWithTag(alerted_lights_tag{})
TaggedCombatLightDevices := GetCreativeObjectsWithTag(combat_lights_tag{})
for(AlertedLight : TaggedAlertedLightDevices, CustomizableLight := customizable_light_device[AlertedLight] ):
CustomizableLight.TurnOff()
set CustomizableLightDevicesAlerted += array{CustomizableLight}
for(CombatLight : TaggedCombatLightDevices, CustomizableLight := customizable_light_device[CombatLight] ):
CustomizableLight.TurnOff()
set CustomizableLightDevicesCombat += array{CustomizableLight}
Você acaba de criar um jogo de fortaleza.