Áudio 3D é som direcional que emite de um local específico no espaço 3D, aumentando ou diminuindo o volume dependendo da distância e orientação entre o emissor de áudio e o ouvinte.Isso significa que, enquanto os ouvintes ou emissores se movem ao redor do ambiente, os jogadores podem ouvir dinamicamente esse áudio de diferentes direções e níveis de volume.
Usando o arquivo Casa de Gengibre - Início.rbxl como um local de partida e Casa de Gengibre - Áudio Completo como referência, este tutorial mostra como adicionar tanto áudio em loop quanto um tiro 3D às suas experiências, incluindo orientação sobre:
- Repetindo sons ambientais que tocam assim que os jogadores se conectam ao servidor.
- Ativando áudio para informar os jogadores sobre eventos situacionais importantes que são importantes para o seu jogabilidade.
- Ativar áudio para fornecer feedback auditivo aos jogadores quando interagem com objetos 3D.
- Reproduzindo pedaços de som de personagem que envolvem e guiam os jogadores para pontos de interesse dentro de seu ambiente.
Se, a qualquer momento, você ficar preso no processo, você pode usar Casa de Gengibre - Áudio Completo como referência para comparar seu progresso.
Objetos de áudio
Para criar áudio direcional, é importante entender os objetos de áudio com os quais você vai trabalhar ao longo deste Tutorial.Existem seis tipos principais de objetos de áudio:
- O objeto AudioPlayer carrega e toca o arquivo de áudio .
- O objeto AudioEmitter é um orador virtual que emite áudio para o ambiente 3D.
- O objeto AudioListener é um microfone virtual que captura áudio do ambiente 3D.
- O objeto AudioDeviceOutput é um dispositivo físico de hardware dentro do mundo real, como um alto-falante ou fones de ouvido
- O objeto AudioDeviceInput é um microfone físico dentro do mundo real.
- Wires carregar streams de áudio de um objeto para outro.
Todos esses objetos de áudio trabalham juntos para emitir som como seus homólogos do mundo real.Vamos dar uma olhada em como isso funciona na prática usando um exemplo de um jogador usando um fone de ouvido enquanto joga uma experiência com seu laptop:
- O AudioPlayer carrega o 1516791621 áudio assetID na experiência para uma pista de chuva.
- O AudioEmitter emite um fluxo do áudio da trilha de chuva para o ambiente 3D.
- A lista de objetos filhos do personagem AudioListener ouve esse som dentro do ambiente 3D e o devolve ao seu óculosde ouvido.
- O objeto AudioDeviceOutput carrega o som do AudioListener para o altofalantefísico do jogador, ou neste caso, seus fones de ouvido.
- O objeto AudioDeviceInput captura som do mundo real e o devolve à experiência para o chat de voz.


As seções a seguir mergulham mais profundamente e referenciam esses objetos à medida que você aprende a tocar tanto áudio de looping quanto de um tiro 3D.Ao revisar esses objetos com as técnicas futuras, você pode prever com mais precisão como capturar e alimentar o som da experiência para o jogador e vice-versa.
Reproduzindo áudio em loop
Looping de áudio 3D ou áudio direcional que se repete sem problemas assim que os jogadores se conectam ao servidor, é uma técnica comum de design de som para melhorar a atmosfera do espaço 3D tornando-a viva e dinâmica.Além disso, o looping de áudio 3D mantém consistentes as fontes de som ambientais, como o estático de uma televisão ou o rugido de uma cachoeira; se esses sons parassem de repente, o ambiente se sentiria irrealista.
Para demonstrar esse conceito, revise como o seguinte áudio 3D para duas grandes cascatas para de funcionar assim que a faixa de áudio não loopada estiver completa.Enquanto a água parece imergir os jogadores no ambiente ao ar livre inicialmente, a mudança auditiva repentina é desconfortável e não natural para como uma cachoeira se comporta no mundo real.
Da mesma forma, a amostra usa essa técnica para a cascata de água de chocolate em movimento e ajusta seu volume de acordo com a distância do jogador do emissor de áudio.Quando o jogador está a menos de 20 metros de distância, o emissor emite o som em volume total.À medida que o jogador se afasta, o áudio de escoamento diminui em volume a cada 20 metros de distância do emissor de áudio.Isso emula o som do mundo real que diminui de volume à medida que você está mais longe da original.
Para recriar o áudio em loop de 3D na amostra Casa de Gengibre - Áudio Completo lugar de arquivo:
Ative um ouvinte padrão que está anexado ao seu personagem de jogador.
- Na janela Explorer , selecione o Serviço de Som .
- Na janela Propriedades , defina Local de Listener Padrão para Personagem .Quando você executa a experiência, o motor automaticamente:
- Cria um AudioListener sob cada personagem de jogador Humanoid.RootPart para que você possa ouvir mudanças de som em seus alto-falantes do mundo real de acordo com a posição e a escala das fontes de som dentro da experiência.
- Cria um AudioDeviceOutput sob Serviço de Som .
Na janela Explorer , navegue até Área de Trabalho > WaterfallAudioObject , então:
- Insira um objeto Reprodutor de Áudio para criar uma fonte de áudio para a cachoeira.
- Insira um objeto Emissor de Áudio para emitir um fluxo posicional a partir de WaterfallAudioObject .
- Insira um objeto Fio para carregar o fluxo do reprodutor de áudio para o emissor de áudio.
Selecione o Reprodutor de Áudio , então na janela Propriedades ,
- Defina ID de Recurso para rbxassetid://1516791621.
- Ative Looping para que o áudio se repita sem problemas.
Selecione o Emissor de Áudio , então, na janela Propriedades , defina Redução de Distância para {0: 1}, {20: 0.8}, {40: 0.4}, {80: 0} para que o som diminua progressivamente de volume a cada 20 metros de distância do emissor de áudio.
Selecione o Fio , então na janela Propriedades ,
- Defina FonteInstance para o seu novo Reprodutor de Áudio para especificar que você quer que o cabo carregue áudio de um jogadorde áudio específico.
- Defina TargetInstance para o seu novo Emissor de Áudio para especificar que você quer que o fio carregue áudio para este emissor de áudio específico dentro da cachoeira.
De volta na janela Explorer , insira um Script em WaterfallAudioObject , renomeie-o LoopWaterfallMusic , defina sua propriedade RunContext para Cliente e depois cole o seguinte código no script:
local audioPlayer = script.ParentaudioPlayer:Play()Explicação de códigoO script começa declarando uma variável para representar o pai do script AudioPlayer .O script então define a fonte de áudio para tocar a partir do momento em que o jogador entra na experiência até o momento em que sai da experiência.
Teste a experiência para ouvir o som de chuva de chocolate em loop quando seu avatar está perto da cachoeira.Quando você gira a cabeça do seu personagem para olhar em uma direção diferente, o som muda dinamicamente nos alto-falantes do mundo real de acordo com a posição do emissor no espaço 3D.
Um tiro de áudio
Um áudio 3D de tiro único ou áudio direcional que toca uma vez em um momento e posição específicos, a menos que um jogador o gatilhe novamente, fornece contexto aos jogadores sobre suas ações, o ambiente e quaisquer personagens ao redor deles.Usar esse tipo de feedback auditivo em suas experiências é essencial porque permite que os jogadores tomem decisões estratégicas, como evitar inimigos entrantes ou pegar itens úteis.
As seções a seguir fornecem detalhes de implementação para cenários de jogabilidade comuns em que os jogadores precisam de comentário/retornooportuno e direcional, incluindo eventos de jogabilidade situacionais, interação de objetos e diálogo de personagens não jogáveis.
Feedback de comentário/retorno
À medida que os jogadores ativam eventos situacionais-chave dentro de seu ambiente, como desbloquear novas áreas de jogabilidade ou solicitar o Iniciar / executarinimigo, é essencial que eles entendam onde no espaço 3D precisam direcionar seu foco e atenção.Se eles não receberem comentário/retornoauditivo imediato, eles podem perder informações que são importantes para o seu jogo, levando à frustração de não saber para onde ir ou o que fazer a seguir.
Para demonstrar por que isso é importante, vamos revisar o áudio 3D de um tiro da modelo Etiqueta a Laser que toca a partir do blaster de cada jogador:
- Um som pop profundo toca para cada explosão que o jogador dispara de seu armaço.
- Um som de clique e robótico beep toca sempre que o jogador recarrega seu blaster com uma nova rodada.
Ambos os sons fornecem consciência situacional alertando todos os jogadores próximos para a direção de onde as explosões estão vindo para que eles possam tomar decisões informadas para se juntar à diversão ou evitar potencial perigo.
A amostra usa essa mesma técnica para fornecer aos jogadores consciência situacional sobre sua recompensa por completar o objetivo principal dentro da experiência.Depois de coletar todos os três pedaços de goma, a porta para a casa de gengibre se abre para permitir que os jogadores tenham acesso ao presente no interior.
Como não há uma ordem específica que os jogadores precisam coletar as bolinhas de chiclete, é importante que os jogadores estejam cientes da abertura da porta, não importa qual gumdrop eles coletaram último.O som posicional torna isso possível para que os jogadores estejam cientes de seu sucesso e para onde precisam ir em seguida, independentemente de sua distância e direção relativas da porta.
Para recriar o feedback de evento de tiro único em áudio 3D na amostra Casa de Gengibre - Áudio Completo lugar de arquivo:
Na janela Explorer , navegue até Espaço de Trabalho > Porta , então:
- Insira um objeto Reprodutor de Áudio para criar uma fonte de áudio para o volume.
- Insira um objeto Emissor de Áudio para emitir um fluxo posicional a partir de Porta .
- Insira um objeto Fio para carregar o fluxo do reprodutor de áudio para o emissor de áudio.
Selecione o Reprodutor de Áudio, então, na janela Propriedades, defina ID de Recurso para para tocar uma faixa de áudio de portão metálico deslizante.
Selecione o Fio , então na janela Propriedades ,
- Defina FonteInstance para o seu novo Reprodutor de Áudio para especificar que você quer que o cabo carregue áudio de um jogadorde áudio específico.
- Defina TargetInstance para o seu novo Emissor de Áudio para especificar que você quer que o fio carregue áudio para este emissor de áudio específico dentro do volume.
De volta na janela Explorer , navegue até ServerScriptService e insira um Script , renomeie-o GumdropService , defina sua propriedade RunContext para Servidor e depois cole o seguinte código no script:
-- Inicializando variáveislocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local ServerStorage = game:GetService("ServerStorage")local TweenService = game:GetService("TweenService")-- Móveislocal Leaderboard = require(ServerStorage.Leaderboard)local PlayerData = require(ServerStorage.PlayerData)-- Variáveislocal gumdropsFolder = Workspace.Gumdropslocal gumdrops = gumdropsFolder:GetChildren()local GUMDROP_KEY_NAME = PlayerData.GUMDROP_KEY_NAMElocal GUMDROP_AMOUNT_TO_ADD = 1local function updatePlayerGumdrops(player, updateFunction)-- Atualize a tabela gumdroplocal newGumdropAmount = PlayerData.updateValue(player, GUMDROP_KEY_NAME, updateFunction)-- Atualize a tabela de classificação do gumdropLeaderboard.setStat(player, GUMDROP_KEY_NAME, newGumdropAmount)-- Verifique se o jogador coletou três gotas de gomaif newGumdropAmount >= 3 then-- Reproduza o áudio do evento da porta quando o jogador coletar três gotas de gomalocal audioPlayer = Workspace.Door.AudioPlayeraudioPlayer:Play()-- Anime a porta a se mover para baixolocal doorPart = Workspace.Doorlocal tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Linear)local tween = TweenService:Create(doorPart, tweenInfo, {Position = doorPart.Position + Vector3.new(0, -15, 0)})tween:Play()endend-- Definindo o manipulador de eventoslocal function onGumdropTouched(otherPart, gumdrop)if gumdrop:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Jogador tocou em um gumdroplocal audioPlayer = gumdrop.AudioPlayeraudioPlayer:Play()gumdrop.Transparency = 1gumdrop:SetAttribute("Enabled", false)updatePlayerGumdrops(player, function(oldGumdropAmount)oldGumdropAmount = oldGumdropAmount or 0return oldGumdropAmount + GUMDROP_AMOUNT_TO_ADDend)print("Player collected gumdrop")endendend-- Configurando ouvintes de eventofor _, gumdrop in gumdrops dogumdrop:SetAttribute("Enabled", true)gumdrop.Touched:Connect(function(otherPart)onGumdropTouched(otherPart, gumdrop)end)endExplicação de códigoEste script começa por inicializar os serviços Workspace , Players , ServerStorage e TweenService para que possam referenciar seus filhos e funcionalidades.Então, requer os módulos Tabela de Líderes e Dados do Jogador na ; esses módulos são responsáveis por criar e atualizar uma tabela de líderes no canto superior direito da tela que rastreia a quantidade de bolas de gude que um jogador coleta no ambiente.
A função do script updatePlayerGumdrops é onde ocorre a maior parte do trabalho para ativar o áudio 3D para comentário/retornode evento, e ela requer dois argumentos:
- player - Um jogador que coleta um gumdrop.
- updateFunction - Uma função de retorno que atualiza a quantidade de gumdrops coletados pelo jogador.
Quando um jogador colide com um gumdrop, o script:
- Obtém o valor da nova coleção de gumdrops do jogador chamando a função PlayerData.updateValue.
- Atualiza a tabela de classificação com essa nova quantia ao chamar a função Leaderboard.setStat.
- Verifica se a quantidade é maior ou igual a 3 .
Quando esse valor é maior ou igual a 3, o script:
- Reproduz a faixa de áudio 3D do reprodutor de áudio para o emissor de áudio.
- Mova a linha da porta linearmente 15 metros abaixo de sua posição atual.
O resto do script é em grande parte responsável por detectar qualquer coisa que colida com o gumdrop é um jogador para que possa disparar um som não posicional para comentário/retornode coleta.Para mais informações sobre esta parte do script, veja Adicionar áudio 2D - Feedback de jogabilidade.
Teste a experiência para ouvir o som do portão de slide depois de coletar todos os três gumdrops no ambiente.Quando você gira a Câmera, o som muda dinamicamente nos alto-falantes do mundo real para que você ouça de acordo com a posição do emissor no espaço 3D.
Interação de objeto
Quando os jogadores interagem com objetos 3D dentro de seu ambiente, como ligar um interruptor de luz ou pegar uma arma, é importante fornecer feedback instantâneo para que eles entendam intuitivamente como estão interagindo com o Objeto.A combinação de um feedback visual e auditivo reforça a relação entre a causa e o efeito entre as ações do jogador e a resposta ambiental.
Para expandir esse conceito, vamos revisar o seguinte áudio de um tiro 3D a partir da amostra da Planta para o fluxo de usuário de jardinagem de repolho:
- Um som de clique suave toca quando o jogador planta uma semente.
- Um som molhado e semelhante a um respingo toca quando o jogador rega sua planta crescente.
- Um som de clip toca quando o jogador coleta a planta completamente crescida.
- Um som de batida suave toca quando o jogador coloca o repolho no vagão.
Todos esses sons reforçam as interações de tecla de proximidade do jogador com o objeto mudando de forma nas 3D no espaço.Para jogadores com deficiências visuais nas quais as mudanças de cores ou animações são mais difíceis de decifrar por conta possuir, fornecer essas múltiplas formas de feedback sensorial ajuda as interações do seu objeto 3D permanecerem acessíveis e intuitivas para o maior número possível de jogadores.
Para dar um exemplo diferente de como você pode configurar a interação de objetos com várias formas de comentário/retornosensorial, a amostra fornece tanto feedback visual quanto auditivo sempre que os jogadores pisam no botão de menta 3D dentro da casa de gengibre.Quando os jogadores não estão interagindo com o botão, parece um tipo típico de doce de hortelã, mas quando eles pisam no botão, a amostra:
- Reproduz uma faixa de áudio de celebração.
- Tinge os lados do botão com um tom verde.
- Mova o botão para o chão.
A partir daqui, você pode conectar essa interação a todos os tipos de ações de jogabilidade únicas, como desbloquear um item ou ativar uma habilidade especial.


Para recriar a interação de um tiro do objeto 3D de áudio na amostra Casa de Gengibre - Áudio Completo lugar de arquivo:
Na janela Explorer , navegue até Espaço de Trabalho > 3DAudioButton , então:
- Insira um objeto Reprodutor de Áudio para criar uma fonte de áudio para o botão.
- Insira um objeto Emissor de Áudio para emitir um fluxo posicional a partir de 3DAudioButton .
- Insira um objeto Fio para carregar o fluxo do reprodutor de áudio para o emissor de áudio.
Selecione o Reprodutor de Áudio , então, na janela Propriedades, defina ID de Recurso para para tocar uma faixa de áudio alegre e festiva.
Selecione o Fio , então na janela Propriedades ,
- Defina FonteInstance para o seu novo Reprodutor de Áudio para especificar que você quer que o cabo carregue áudio de um jogadorde áudio específico.
- Defina TargetInstance para o seu novo Emissor de Áudio para especificar que você quer que o fio carregue áudio para esses emissores de áudio específicos dentro do botão.
De volta na janela Explorer , insira um Script em 3DAudioButton , renomeie-o Reproduzir Áudio Quando Pressionado e depois cole o seguinte código no script:
local TweenService = game:GetService("TweenService")local buttonModel = script.Parent.Parentlocal buttonPart = buttonModel.ButtonPartlocal buttonPressedAudioPlayer = buttonModel.ButtonPressedAudioPlayerlocal tweenInfo = TweenInfo.new(.2, Enum.EasingStyle.Exponential)local buttonTweenByIsPressed = {-- Pressionado[true] = TweenService:Create(buttonPart, tweenInfo, {Size = buttonPart.Size / Vector3.new(2, 1, 1),Color = Color3.fromRGB(75, 151, 75),}),-- Padrão[false] = TweenService:Create(buttonPart, tweenInfo, {Size = buttonPart.Size,Color = Color3.fromRGB(196, 40, 28),}),}local function onIsPlayingChanged()local isPlaying = buttonPressedAudioPlayer.IsPlayinglocal tween = buttonTweenByIsPressed[isPlaying]tween:Play()endonIsPlayingChanged()buttonPressedAudioPlayer:GetPropertyChangedSignal("IsPlaying"):Connect(onIsPlayingChanged)buttonPressedAudioPlayer.Ended:Connect(onIsPlayingChanged)buttonPart.Touched:Connect(function(_hit)buttonPressedAudioPlayer:Play()end)Explicação de códigoO script começa por obter:
- O TweenService para que possa animar a parte do botão que sobe do chão.
- O modelo pai do script 3DAudioButton .
- A parte do botão que sobra do chão.
- O reprodutor de áudio relevante com a trilha de áudio de celebração.
O script então define:
- Um objeto TweenInfo que especifica que a animação do botão será reproduzida com um estilo de animação exponencial.
- Dois adolescentes que representam o estado pressionado ou não pressionado do botão.
- O estado pressionado true move o botão ligeiramente para baixo no chão e tinge os lados da peça com um tom verde.
- O estado não pressionado false move o botão de volta à sua posição original e remove a tint anterior.
O restante do script é onde ocorre a maior parte do comentário/retornode interação de objetos, então vamos revisar como a função e os ouvintes de eventos trabalham juntos:
- buttonPart.Touched lista para um jogador tocar no botão, então chama a função Play() para começar a tocar o áudio associado do reprodutor de áudio.Esse processo troca a propriedade AudioPlayer.IsPlaying de false para true.
- buttonPressedAudioPlayer:GetPropertyChangedSignal("IsPlaying") ouve a propriedade IsPlaying do jogadorde áudio para mudar, então chama a função onIsPlayingChanged.
- A função onIsPlayingChanged usa essas informações para disparar o pré-adolescente que muda sua aparência visual no espaço 3D.
- Para evitar que o jogador reinicie acidentalmente o áudio se eles rapidamente pular no botão em rápida sucessão, buttonPressedAudioPlayer.Ended ouça o reprodutor de áudio para terminar de tocar antes de chamar novamente a função onIsPlayingChanged.
É importante notar que o evento onIsPlayingChanged só dispara quando muda de false para true, o que significa que não dispara quando muda de true para false .Este é o comportamento pretendido devido a complicações com o tempo de replicação de propriedades do servidor para o cliente.Devido a isso, o evento Ended é fornecido e ouvido neste exemplo para cobrir ambos os casos.
Teste a experiência para ouvir o som de celebração quando o personagem do jogador tocar no botão 3D na casa de gengibre.Quando você se afasta do botão, o volume do som diminui.
Diálogo de personagens
Fornecer áudio direcional de seus personagens não jogáveis (NPC) é útil para guiar os jogadores para pontos de interesse dentro de seu ambiente e adicionar profundidade às suas interações com outros personagens.Na verdade, em jogos impulsionados por narrativas, muitos designers de jogos usam estrategicamente diálogo de personagens para ensinar indiretamente os jogadores sobre seus personagens, aliados e inimigos, ou o próprio mundo.
Exemplos comuns dessa técnica incluem:
- Estilo de diálogo para definir o tom do seu jogo.
- Bate-papo para ensinar os jogadores sobre relações de personagens.
- Conversas inimigas para confessar motivações ou sua posição em relação ao jogador.
- Personagens de jogador falando seus pensamentos em voz alta para guiar gentilmente o jogador para o que eles devem fazer a seguir, como se curar, se mover para outro local ou encontrar um item.
- Personagens aliados falando com o personagem do jogador para revelar detalhes do mundo na experiência, como sua história, cultura e questões sociais.
Para demonstrar o que isso pode parecer na prática, vamos revisar o seguinte áudio de um tiro 3D a partir do Além das Trevas showcase que toca periodicamente quando os jogadores estão na área principal do lobby da estação espacial.
Usando a estação espacial como um personagem, este clipe de diálogo fornece aos jogadores contexto e sabedoria importantes sobre a configuração geral.Por exemplo, a partir dessa única frase os jogadores aprendem:
- Eles estão no espaço exterior, especificamente em uma estação espacial chamada Kerr-Newman Deep Space Relay 14.
- Seu ambiente é futurista e acolhedor.
- Eles são um visitante e provavelmente vão embora em breve.
Esses detalhes juntos imergem os jogadores dentro de seu ambiente e adicionam um senso de urgência à sua missão.No entanto, se os jogadores não sabem qual é a sua missão principal, você também pode usar diálogo de personagem para informar os jogadores o que você quer que eles façam dentro de sua experiência.
Para ilustrar, a amostra usa um volume ou região invisível dentro do espaço 3D para disparar o diálogo de personagens do boneco de neve para guiar os jogadores a coletar três gotas de goma para abrir a porta para sua início.Como uma das primeiras coisas que os jogadores veem ao se juntarem à experiência, os jogadores são mais prováveis de ativar o diálogo e saber o que precisam fazer para ter sucesso.

Para recriar o diálogo de personagem de um tiro de áudio 3D na amostra Casa de Gengibre - Áudio Completo lugar de arquivo:
Na janela Explorer , navegue até Espaço de Trabalho > Volume de Diálogo , então:
- Insira um objeto Reprodutor de Áudio para criar uma fonte de áudio para o volume.
- Insira um objeto Emissor de Áudio para emitir um fluxo posicional a partir de Volume de Diálogo .
- Insira um objeto Fio para carregar o fluxo do reprodutor de áudio para o emissor de áudio.
Selecione o Reprodutor de Áudio, então, na janela Propriedades, defina ID de Recurso para para tocar uma faixa de áudio instrucional para o objetivo da experiência.
Selecione o Fio , então na janela Propriedades ,
- Defina FonteInstance para o seu novo Reprodutor de Áudio para especificar que você quer que o cabo carregue áudio de um jogadorde áudio específico.
- Defina TargetInstance para o seu novo Emissor de Áudio para especificar que você quer que o fio carregue áudio para este emissor de áudio específico dentro do volume.
De volta na janela Explorer , navegue até StarterPlayer > StarterCharacterScripts , insira um LocalScript , renomeie-o PlayAudioWhenInVolume e cole o seguinte código no script local:
local Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local humanoid = script.Parent:WaitForChild("Humanoid")local volumeDetector = Workspace.DialogueVolumelocal trigger = humanoid:WaitForChild("Animator")local debounce = falselocal localPlayer = Players.LocalPlayervolumeDetector.Touched:Connect(function(hit)if debounce thenreturnendlocal hitCharacter = hit:FindFirstAncestorWhichIsA("Model")local hitPlayer = Players:GetPlayerFromCharacter(hitCharacter)if hitPlayer ~= localPlayer thenreturnenddebounce = truelocal audioPlayer = Workspace.DialogueVolume.AudioPlayeraudioPlayer:Play()audioPlayer.Ended:Wait()debounce = falseend)Explicação de códigoEste script começa por obter os serviços do Espaço de Trabalho e dos Jogadores para que possa referenciar seus filhos e funcionalidades.Para cada personagem de jogador que carrega ou respawna de volta na experiência, o script aguarda:
- O objeto de volume no espaço de trabalho chamado DiálogoVolume .
Quando qualquer coisa colide com o volume, a função de processamento de evento Touched obtém o primeiro ancestral que é um Model, que deve ser o personagem se o BasePart que colidiu com o volume for um descendente de um modelo de personagem.Se for, a função então:
- Define o debounce para true .
- Joga e aguarda o terminar/parar/sairdo áudio.
- Define o debounce de volta para false.
Configurar o debounce de false para true para false novamente após o áudio terminar de tocar é um padrão de debounce que impede que o áudio seja acionado repetitivamente enquanto os jogadores continuamente colidem com o volume.Para mais informações sobre esse padrão de debounce, veja Detectar colisões .
Teste a experiência para ouvir o diálogo do personagem instrucional quando o personagem do jogador toca o volume ao redor do boneco de neve.