3D-Audio ist richtungsbezogener Klang, der von einem bestimmten Ort im Platzausgeht und die Lautstärke erhöht oder verringert, abhängig von der Entfernung und Orientierung zwischen dem Audio-Emittenten und dem Empfänger.Das bedeutet, dass sich als Empfänger oder Sender durch die Umgebung bewegende Spieler dynamisch Audio aus verschiedenen Richtungen und Lautstärken hören können.
Mit der Lebkuchenhaus - Start.rbxl Datei als Ausgangspunkt und der Lebkuchenhaus - Komplette Audio als Referenz zeigt dieses Tutorial, wie Sie sowohl Schleifen- als auch Einzelschuss-3D-Audio zu Ihren Erlebnissen hinzufügen können, einschließlich Anleitungen:
- Umlaufende Umgebungsgeräusche, die abgespielt werden, sobald Spieler sich mit dem Server verbinden.
- Audio auslösen, um Spieler über wichtige situative Ereignisse zu informieren, die für ihr Gameplaywichtig sind.
- Aktivierung von Audio, um den Spielern akustisches Feedback zu geben, wenn sie mit 3D-Objekten interagieren.
- Spielende Charakter-Sound-Bisse, die Spieler an Punkte des Interesses in ihrer Umgebung heranführen und sie leiten.
Wenn du dich zu einem Zeitpunkt im Prozess feststecken solltest, kannst du Lebkuchenhaus - Komplettes Audio als Referenz verwenden, um deinen Fortschritt zu vergleichen.
Audio-Objekte
Um richtungsbezogenes Audiodateienzu erstellen, ist es wichtig, die Audioobjekte zu verstehen, mit denen Sie während dieses Tutorials arbeiten werden.Es gibt sechs Hauptarten von Audio-Objekten:
- Das AudioPlayer Objekt wird geladen und spielt die Audio-Datei .
- Das AudioEmitter Objekt ist ein virtueller Lautsprecher , der Audio in die 3D-Umgebung sendet.
- Das AudioListener Objekt ist ein virtuelles Mikrofon , das Audiodaten aus der 3D-Umgebung aufnimmt.
- Das AudioDeviceOutput Objekt ist ein physisches Hardwaregerät innerhalb der realen Welt, wie ein Lautsprecher oder Kopfhörer.
- Das AudioDeviceInput Objekt ist ein physisches Mikrofon innerhalb der realen Welt.
- Wires übertragen audio-streams von einem objekt auf ein anderes.
All diese Audio-Objekte arbeiten zusammen, um Ton auszustrahlen, genau wie ihre realen Gegenstücke.Sehen wir uns an, wie das in der Praxis funktioniert, indem wir ein Beispiel eines Spielers verwenden, der ein Headset trägt und eine Erfahrung mit seinem Laptop spielt:
- Die AudioPlayer lädt die 1516791621 Audio-AssetID in das Erlebnis für einen Regenstreckentitel ein.
- Die AudioEmitter sendet einen Stream des Regenstrecken-Audios in die 3D-Umgebung.
- Ein Wire trägt den Stream von der AudioPlayer auf die AudioEmitter so dass der Stream aus dem 3D-Lautsprecher kommt.
- Die Kind-Objekte des Charakters AudioListener hören auf diesen Klang innerhalb der 3D-Umgebung und geben ihn wieder an ihr Headset zurück.
- Das AudioDeviceOutput Objekt trägt den Ton vom AudioListener zum physischen Lautsprecher des Spieler:inoder in diesem Fall zu seinen Kopfhörern.
- Das AudioDeviceInput Objekt erfasst Geräusche aus der realen Welt und gibt sie zurück in das Erlebnis für Voice-Chat.


Die folgenden Abschnitte gehen tiefer ein und beziehen sich auf diese Objekte, wenn du lernst, wie du sowohl Schleifen- als auch Audiodateienwiedergeben kannst.Wenn du diese Objekte mit den bevorstehenden Techniken überprüfst, kannst du genauer vorhersagen, wie du Sound von der Erfahrung zum Spieler und umgekehrt aufzeichnen und an ihn senden kannst.
Audiodateienwiederholen
Loopen von 3D-Audio oder richtungsaktives Audio, das nahtlos wiederholt wird, sobald Spieler sich mit dem Server verbinden, ist eine häufige Klangdesign-Technik, um die Atmosphäre des 3D-Raums zu verbessern, indem es sich lebendig und dynamisch anfühlt.Darüber hinaus bleibt das Schleifen von 3D-Audio deine Umgebungsschallquellen konsistent, wie zum Beispiel die Statur eines Fernsehers oder das Brüllen eines Wasserfalls; wenn diese Geräusche plötzlich aufhören würden, würde sich die Umgebung unrealistisch anfühlen.
Um dieses Konzept zu demonstrieren, überprüfe, wie das folgende 3D-Audio für zwei große Wasserfälle sofort stoppt, sobald der unbearbeitete Audiotrack abgeschlossen ist.Während das Wasser die Spieler zunächst in die Umgebungeintauchen lässt, ist die plötzliche akustische Veränderung störend und unnatürlich, wie ein Wasserfall sich in der realen Welt verhält.
Ebenso nutzt die Probe diese Technik für den fließenden Schokoladenwasserfall und passt ihre Lautstärke entsprechend der Entfernung des Spieler:invom Audioemitter an.Wenn der Spieler weniger als 20 Klötze entfernt ist, sendet der Emitter den Ton mit vollem Lautstärke.Je weiter der Spieler wegzieht, desto geringer wird das Schwall-Audio jede 20 Klötze vom Audio-Emittenten entfernt.Dies emuliert den Klang der realen Welt, der im Ausmaß sinkt, je weiter du von der Ausgangstextentfernt bist.
Um das wiederholende 3D-Audio in der Probe Lebkuchenhaus - Abgeschlossenes Audio platzieren zu können:
Aktiviere einen Standard-Zuhörer, der an deinen Spielercharakter angehängt ist.
- Wählen Sie im Explorer -Fenster den SoundService .
- Im Eigenschaften -Fenster stellen Sie DefaultListenerLocation auf Zeichen ein.Wenn du das Erlebnis ausführst, führt der Motor automatisch:
- Erstellt ein AudioListener unter jedem Spielercharakter Humanoid.RootPart, so dass Sie Geräusche hören können, die sich entsprechend der Position und Skalierung der Klangquellen innerhalb der Erlebnisin Ihren realen Lautsprechern verschieben.
- Erstellt ein AudioDeviceOutput unter SoundService .
Im Explorer -Fenster navigieren Sie zu Arbeitsplatz > WasserfallAudioObject , dann:
- Füge ein Audio-Spieler -Objekt ein, um eine Audioquelle für den Wasserfall zu erstellen.
- Füge ein AudioEmitter -Objekt ein, um einen positionalen Stream von WasserfallAudioObject zu senden.
- Füge ein Kabel -Objekt ein, um den Stream vom Audioplayer zum Audioemitter zu übertragen.
Wählen Sie den Audio-Player aus, dann im Eigenschaften -Fenster,
- Setze AssetID auf rbxassetid://1516791621, um einen regnerischen Audiotitel abzuspielen.
- Aktiviere Schleifen , damit das Audio nahtlos wiederholt wird.
Wählen Sie die AudioEmitter , dann im Eigenschaften-Fenster stellen Sie Distanzreduzierung auf ein, so dass der Ton mit zunehmender Entfernung vom Audioemitter lauter wird, jede 20 Klötze entfernt von der Audioemitter.
Wählen Sie das Kabel , dann im Eigenschaften -Fenster,
- Setze SourceInstance auf deinen neuen AudioPlayer , um anzugeben, dass du möchtest, dass der Draht Audio von diesem bestimmten Spieler:inüberträgt.
- Setze Zielinstanz auf deine neue AudioEmitter , um anzugeben, dass du möchtest, dass der Draht Audio zu diesem bestimmten Audio-Emitter innerhalb des Wasserfalls überträgt.
Kehre im Explorer -Fenster zurück, füge ein Skript in WaterfallAudioObject ein, benenne es um in LoopWaterfallMusic und lege seine RunContext Eigenschaft auf Client fest, dann füge den folgenden Code in das Skript, das. PL: die Skriptsein:
local audioPlayer = script.ParentaudioPlayer:Play()Code-ErklärungDas Skript beginnt mit der Erklärung einer Variable, die den Eltern des Skript, das. PL: die Skriptsentspricht AudioPlayer .Das Skript legt dann die Audioquelle fest, von der abgespielt wird, sobald der Spieler der Erlebnisbeitritt, bis er sie verlässt.
Teste das Erlebnis, um den Schall der Schleifenschokolade zu hören, wenn dein Avatar in der Nähe des Wasserfalls ist.Wenn du den Kopf deines Charakters drehst, um in eine andere Richtung zu schauen, ändert sich der Klang dynamisch in deinen Real-World-Lautsprechern entsprechend der Position des Senders im Platz.
Audiodateien
Ein Schuss 3D-Audio , oder richtungsbezogenes Audio, das einmal zu einer bestimmten Zeit und Position gespielt wird, es sei denn ein Spieler aktiviert es erneut, bietet Spielern Kontext über ihre Aktionen, die Umgebung und alle Charaktere um sie herum.Die Verwendung dieser Art von akustischem Feedback in deinen Erlebnissen ist unerlässlich, da es den Spielern ermöglicht, strategische Entscheidungen wie das Vermeiden von eingehenden Feinden oder das Aufsammeln nützlicher Gegenstände zu treffen.
Die folgenden Abschnitte geben Details zur Umsetzung für häufige Spielszenarien, in denen Spieler zeitnahes, richtungsbezogenes Feedback benötigen, einschließlich situativer Spielereignisse, Objektinteraktion und nicht spielbarer Charakterdialoge.
Feedback zu Ereignissen
Da Spieler bei der Auslösung von Schlüsselsituationsereignissen in ihrer Umgebung, wie z. B. dem Freischalten neuer Spielbereiche oder dem Anregen feindlichen initiieren, wichtig ist, dass sie verstehen, wo sich im 3D-Raum ihre Fokussierung und Aufmerksamkeit richten müssen.Wenn sie keine sofortige akustische Feedbackerhalten, können sie Informationen verpassen, die für ihr Gameplaywichtig sind, was zu Frustration führt, wenn sie nicht wissen, wo sie hin müssen oder was als nächstes zu tun ist.
Um zu zeigen, warum dies wichtig ist, überprüfen wir das eine Schuss 3D-Audio aus der Laser-Tag-Vorlage, das von jedem Spieler:inBlaster abgespielt wird:
- Ein tiefes Popgeräusch spielt für jede Explosion, die der Spieler aus seinem Blaster abfeuert.
- Ein Klick- und robotischer Beep-Sound spielt jedes Mal, wenn der Spieler seinen Blaster mit einer neuen Runde neu lädt.
Beide dieser Sounds bieten situative Awareness, indem sie alle nahe gelegenen Spieler auf die Richtung alarmieren, von der Explosionen kommen, so dass sie informierte Entscheidungen treffen können, sich am Spaß teilzunehmen oder mögliche Gefahren zu vermeiden.
Die Probe verwendet dieselbe Technik, um den Spielern situativen Überblick über ihre Belohnung für den Abschluss des Hauptziels innerhalb der Erlebniszu geben.Nachdem sie alle drei Gummidrops gesammelt haben, öffnet sich die Tür zum Lebkuchenhaus, um den Spielern Zugang zum gegenwärtigen Inneren zu gewähren.
Da es keine bestimmte Reihenfolge gibt, in der Spieler die Gummidrops sammeln müssen, ist es wichtig, dass die Spieler sich der Türöffnung bewusst sind, egal welche Gummidrops sie zuletzt gesammelt haben.Positioneller Klang macht dies möglich, damit die Spieler sich ihrer Erfolge bewusst sind und wissen, wohin sie als Nächstes gehen müssen, unabhängig von ihrer relativen Entfernung und Richtung von der Tür.
Um das Feedback zum One-Shot-Ereignis 3D-Audio in der Probdatei Lebkuchenhaus - Komplettes Audio erneut zu erstellen:
Im Explorer -Fenster navigieren Sie zu Arbeitsplatz > Tür , dann:
- Füge ein Audio-Spieler -Objekt ein, um eine Audioquelle für die Lautstärke zu erstellen.
- Füge ein AudioEmitter -Objekt ein, um einen positionalen Stream von Tür zu senden.
- Füge ein Kabel -Objekt ein, um den Stream vom Audioplayer zum Audioemitter zu übertragen.
Wähle den Audio-Player aus, dann lege im Eigenschaften-Fenster fest, dass AssetID auf gesetzt wird, um einen Audio-Sliding-Metalltor-Track zu spielen.
Wählen Sie das Kabel , dann im Eigenschaften -Fenster,
- Setze SourceInstance auf deinen neuen AudioPlayer , um anzugeben, dass du möchtest, dass der Draht Audio von diesem bestimmten Spieler:inüberträgt.
- Setze Zielinstanz auf deine neue AudioEmitter , um anzugeben, dass du möchtest, dass der Draht Audio zu diesem bestimmten Audio-Emitter innerhalb der Lautstärke weiterleitet.
Kehre im Explorer -Fenster zurück, navigiere zu ServerScriptService und füge dann ein Skript ein, benenne es um in GumdropService und stelle seine RunContext Eigenschaft auf Server um, füge dann den folgenden Code in das Skript, das. PL: die Skriptsein:
-- Initialisierung von Variablenlocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local ServerStorage = game:GetService("ServerStorage")local TweenService = game:GetService("TweenService")-- Modulelocal Leaderboard = require(ServerStorage.Leaderboard)local PlayerData = require(ServerStorage.PlayerData)-- Variablenlocal gumdropsFolder = Workspace.Gumdropslocal gumdrops = gumdropsFolder:GetChildren()local GUMDROP_KEY_NAME = PlayerData.GUMDROP_KEY_NAMElocal GUMDROP_AMOUNT_TO_ADD = 1local function updatePlayerGumdrops(player, updateFunction)-- Aktualisieren Sie die Gumdrop-Tabellelocal newGumdropAmount = PlayerData.updateValue(player, GUMDROP_KEY_NAME, updateFunction)-- Aktualisieren Sie die Gumdrop-BestenlisteLeaderboard.setStat(player, GUMDROP_KEY_NAME, newGumdropAmount)-- Überprüfe, ob der Spieler drei Gummidrops gesammelt hatif newGumdropAmount >= 3 then-- Spiele das Türereignis-Audio ab, wenn der Spieler drei Gummidrops sammeltlocal audioPlayer = Workspace.Door.AudioPlayeraudioPlayer:Play()-- Animiere die Tür, nach unten zu bewegenlocal 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-- Event-Handler definierenlocal function onGumdropTouched(otherPart, gumdrop)if gumdrop:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Spieler berührte einen Gummidroplocal 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-- Event-Listen aktivierenfor _, gumdrop in gumdrops dogumdrop:SetAttribute("Enabled", true)gumdrop.Touched:Connect(function(otherPart)onGumdropTouched(otherPart, gumdrop)end)endCode-ErklärungDieses Skript beginnt mit der Initialisierung von Workspace , Players , ServerStorage und TweenService Diensten, so dass es ihre Kinder und Funktionalität referenzieren kann.Dann erfordert es die Bestenliste und Spielerdaten Module in ; diese Module sind verantwortlich für die Erstellung und Aktualisierung einer Bestenliste in der oberen rechten Ecke des Bildschirms, die die Menge an Gummidosen aufzeichnet, die ein Spieler in der Umgebung sammelt.
Die updatePlayerGumdrops des Skript, das. PL: die Skriptsist der Ort, an dem der Großteil der Arbeit für die Aktivierung von 3D-Audio für Feedback zu Ereignissen stattfindet, und sie benötigt zwei Argumente:
- player - Ein Spieler, der einen Gummidrop sammelt.
- updateFunction - Eine Rückruffunktion, die die von dem Spieler:ingesammelte Gummidrop-Menge aktualisiert.
Wenn ein Spieler mit einem Gummidrop zusammenstößt, führt das Skript, das. PL: die Skripts:
- Holt sich den neuen Gummidrops-Sammlungsbetrag des Spieler:in, indem er die PlayerData.updateValue-Funktion aufruft.
- Aktualisiert die Rangliste mit diesem neuen Betrag, indem die Leaderboard.setStat-Funktion aufgerufen wird.
- Überprüft, ob der Betrag größer oder gleich 3 ist.
Wenn dieser Wert größer oder gleich 3 ist, wird das Skript, das. PL: die Skripts:
- Spielt den 3D-Audio-Track vom Audio-Player zum Audio-Emitter.
- Bewegt die Tür lineär 15 Studs unter ihrer aktuellen Position.
Der Rest des Skripts ist weitgehend dafür verantwortlich, alles zu erkennen, was mit dem Gummidrop kollidiert, ist ein Spieler, damit es einen nicht-positiven Klang für das Feedback zur Sammlung auslösen kann.Für weitere Informationen zu diesem Teil des Skript, das. PL: die Skriptssiehe 2D-Audio hinzufügen - Gameplay-Feedback.
Teste das Erlebnis, um den Slide-Gate-Sound zu hören, nachdem du alle drei Gummidrops in der Umgebung gesammelt hast.Wenn du die Kamera drehst, wechselt der Sound dynamisch in deinen realen Lautsprechern so, dass du ihn entsprechend der Position des Senders im Platzhörst.
Objektinteraktion
Wenn Spieler mit 3D-Objekten in ihrer Umgebung interagieren, wie zum Beispiel ein Lichtschalter einschalten oder eine Waffe aufheben, ist es wichtig, sofortiges Feedback zu geben, damit sie intuitiv verstehen, wie sie mit dem Objekt interagieren.Die Koppelung von visuellen und akustischen Feedback verstärkt die Ursache-Effekt-Beziehung zwischen den Aktionen des Spieler:inund der Umweltantwort.
Um dieses Konzept auszuweiten, überprüfen wir das folgende One-Shot-3D-Audio aus der Pflanze-Probe für den Benutzerfluss des Gärtnerns eines Kohls:
- Ein leises Klingelgeräusch spielt, wenn der Spieler einen Samen pflanzt.
- Ein nassklingender, spritzender Klang spielt, wenn der Spieler seine wachsende Pflanze bewässert.
- Ein Clip-Sound spielt, wenn der Spieler die ausgewachsene Pflanze sammelt.
- Ein weicher Thud-Sound spielt, wenn der Spieler den Kohl in den Wagen legt.
All diese Sounds verstärken die Näherungsaufforderung des Spieler:inmit der Objektänderungsformen im Platz, die sich durch die Schlüsselinteraktionen verändern.Für Spieler mit visuellen Beeinträchtigungen, bei denen Farbänderungen oder Animationen schwieriger zu entschlüsseln sind, hilft die Bereitstellung dieser vielfältigen Formen der sensoriellen Feedback-Hilfe, dass die 3D-Objektinteraktionen für so viele Spieler wie möglich zugänglich und intuitiv bleiben.
Um ein anderes Beispiel zu geben, wie Sie die Interaktion mit Objekten mit mehreren Formen von sensoriellen Feedback konfigurieren können, bietet die Probe sowohl visuelle als auch akustische Feedback, wenn Spieler auf die 3D-Pfefferminz-Taste innerhalb des Lebkuchenhauses treten.Wenn Spieler nicht mit der Schaltfläche interagieren, sieht sie aus wie eine typische Pfefferminz-Süßigkeit, aber wenn sie auf die Schaltfläche treten, sieht die Probe:
- Spielt einen feierlichen Jingle-Audio-Track.
- Farbt die Seiten des Buttons mit einem grünen Farbton.
- Bewegt die Taste in den Boden.
Von hier aus kannst du diese Interaktion mit allen möglichen einzigartigen Spielaktionen verbinden, wie z. B. das Freischalten eines Gegenstands oder das Auslösen einer speziellen Fähigkeit.


Um die Interaktion mit einem Schussobjekt 3D-Audio in der Probe Lebkuchenhaus - Komplettes Audio wiederherzustellen:
Im Explorer -Fenster navigieren Sie zu Arbeitsplatz > 3DAudioButton , dann:
- Füge ein Audio-Spieler -Objekt ein, um eine Audioquelle für die Schaltfläche zu erstellen.
- Füge ein AudioEmitter -Objekt ein, um einen positionalen Stream von 3DAudioButton zu senden.
- Füge ein Kabel -Objekt ein, um den Stream vom Audioplayer zum Audioemitter zu übertragen.
Wähle den AudioPlayer aus, dann im Eigenschaften -Fenster, lege AssetID auf rbxassetid://1846248593 fest, um einen fröhlichen, feierlichen Audiotitel zu spielen.
Wählen Sie das Kabel , dann im Eigenschaften -Fenster,
- Setze SourceInstance auf deinen neuen AudioPlayer , um anzugeben, dass du möchtest, dass der Draht Audio von diesem bestimmten Spieler:inüberträgt.
- Setze Zielinstanz auf deine neue AudioEmitter , um anzugeben, dass du möchtest, dass der Draht Audio zu diesen bestimmten Audio-Sendern innerhalb der Schaltfläche weiterleitet.
Kehre im Explorer -Fenster zurück, füge ein Skript in 3DAudioButton ein, benenne es um in PlayAudioWhenPressed und füge dann den folgenden Code in das Skript, das. PL: die Skriptsein:
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 = {-- Gedrückt[true] = TweenService:Create(buttonPart, tweenInfo, {Size = buttonPart.Size / Vector3.new(2, 1, 1),Color = Color3.fromRGB(75, 151, 75),}),-- Standardmäßig[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)Code-ErklärungDas Skript beginnt, indem es erhält:
- Die TweenService, damit sie die Teil des Buttons animieren kann, die aus dem Boden heraussteht.
- Das Modelldes Skript, das. PL: die Skripts 3DAudioButton .
- Der Teil des Buttons, der aus dem Boden heraussteht.
- Der relevante Audio-Player mit deinem Feiertag-Sound-Audio-Track.
Das Skript definiert dann:
- Ein TweenInfo Objekt, das festlegt, dass die Animation des Buttons mit einem exponentiellen Animationsstil wiedergegeben wird.
- Zwei Teenager, die den gedrückten oder nicht gedrückten Zustand der Schaltfläche repräsentieren.
- Der gedrückte Zustand bewegt die Taste leicht nach unten in den Boden und färbt die Seiten des Teils mit einem grünen Farbton.
- Der un压缩状态 bewegt die Schaltfläche zurück in ihre ursprüngliche Position und entfernt die vorherige Tönung.
Der Rest des Skripts ist, wo der Großteil der Arbeit für das Feedback zur Interaktion mit Objekten entsteht, also lassen wir uns ansehen, wie die onIsPlayingChanged-Funktion und die Event-Listen zusammenarbeiten:
- buttonPart.Touched hört auf einen Spieler zuzuhören, der die Schaltfläche berührt, und ruft dann die Funktion Play() auf, um das zugeordnete Audio vom Spieler:inabzuspielen.Dieser Prozess wechselt die Eigenschaft AudioPlayer.IsPlaying von false auf true.
- buttonPressedAudioPlayer:GetPropertyChangedSignal("IsPlaying") hört auf die eigenschaft des spieler:inIsPlaying zu ändern, ruft dann die funktion onIsPlayingChanged auf.
- Die onIsPlayingChanged-Funktion verwendet diese Informationen, um den Teenager auszulösen, der sein visuelles Erscheinungsbild im Platzändert.
- Um zu verhindern, dass der Spieler das Audio versehentlich neu startet, wenn er schnell auf die Schaltfläche springt, hört buttonPressedAudioPlayer.Ended der Audio-Spieler auf zu spielen, bevor er die onIsPlayingChanged-Funktion erneut aufruft.
Es ist wichtig zu beachten, dass das Ereignis onIsPlayingChanged nur dann feuert, wenn es von false auf true wechselt, was bedeutet, dass es nicht feuert, wenn es von true auf false wechselt.Dies ist das beabsichtigte Verhalten aufgrund von Komplikationen mit der zeitlichen Replikation von Eigenschaften vom Server zum Client.Aus diesem Grund wird das Ereignis Ended in diesem Beispiel bereitgestellt und gehört, um beide Fälle abzudecken.
Teste das Erlebnis, um den Feierklang zu hören, wenn dein Spielercharakter den 3D-Button im Lebkuchenhaus berührt.Wenn du dich vom Knopf entfernst, nimmt die Lautstärke des Sounds ab.
Charakterdialog
Die Bereitstellung von richtungsgebenden Audiodaten von deinen nicht spielbaren Charakteren (NPC) ist hilfreich, um Spieler in Richtung interessanter Punkte in ihrer Umgebung zu führen und Tiefe zu ihren Interaktionen mit anderen Charakteren hinzuzufügen.In der Tat, in narrativ getriebenen Spielen nutzen viele Spieldesigner strategisch den Charakterdialog, um indirekt den Spielern über ihren Charakter, Verbündeten und Feinde oder die Welt selbst zu lehren.
Gewöhnliche Beispiele für diese Technik sind:
- Dialogstil um den Ton deines Spiels festzulegen.
- Flüsterer , um Spielern über Charakterbeziehungen zu lehren.
- Feindliche Gespräche zu gestehen Motivationen oder ihre Position in Bezug auf den Spieler:in.
- Spielercharaktere sprechen ihre Gedanken laut aus , um den Spieler sanft dazu zu führen, was sie als nächstes tun sollen, z. B. sich selbst heilen, an einen anderen Ort bewegen oder ein Artikelfinden.
- Verbündete Charaktere sprechen mit dem Spielercharakter , um Details der Erfahrungswelt wie seine Geschichte, Kultur und soziale Probleme zu offenbaren.
Um zu zeigen, wie das in der Praxis aussehen kann, überprüfen wir das folgende One-Shot-3D-Audio aus der Beyond the Dark-Präsentation, die periodisch abgespielt wird, wenn Spieler sich im Hauptlobbybereich der Raumstation befinden.
Durch die Verwendung der Raumstation als Charakter bietet dieser Dialogclip den Spielern wichtige Kontext- und Hintergrundinformationen über die Einstellung.Zum Beispiel lernen Spieler aus diesem einzigen Satz:
- Sie befinden sich im Platz, speziell auf einer Raumstation namens Kerr-Newman Deep Space Relay 14.
- Ihre Umgebung ist futuristisch und einladend.
- Sie sind ein Besucher und werden wahrscheinlich bald gehen.
Diese Details zusammen lassen Spieler in ihre Umgebung eintauchen und ihnen ein Gefühl der Dringlichkeit für ihre Mission vermitteln.Wenn Spieler jedoch nicht wissen, was ihre Hauptmission ist, kannst du auch den Charakterdialog verwenden, um Spieler darüber zu informieren, was du von ihnen innerhalb deiner Erlebniswünschst.
Zum Illustrieren verwendet die Probe eine Lautstärke oder eine unsichtbare Region innerhalb des Platz, um den Charakterdialog vom Schneemann auszulösen, um Spieler dazu zu bringen, drei Gummidrops zu sammeln, um die Tür zu seinem Homepagezu öffnen.Da es sich bei einer der ersten Dinge handelt, die Spieler sehen, wenn sie sich der Erlebnisanschließen, sind Spieler wahrscheinlicher, den Dialog auszulösen und zu wissen, was sie tun müssen, um erfolgreich zu sein.

Um den One-Shot-Charakterdialog 3D-Audio in der Probe Lebkuchenhaus - Komplettes Audio wiederzugeben:
Im Explorer -Fenster navigieren Sie zu Arbeitsplatz > Dialoglautstärke und dann:
- Füge ein Audio-Spieler -Objekt ein, um eine Audioquelle für die Lautstärke zu erstellen.
- Füge ein AudioEmitter -Objekt ein, um einen positionalen Stream von Dialoglautstärke zu senden.
- Füge ein Kabel -Objekt ein, um den Stream vom Audioplayer zum Audioemitter zu übertragen.
Wähle den AudioPlayer aus, dann im Eigenschaften -Fenster, lege AssetID auf rbxassetid://92917410841704 fest, um einen instruktiven Audiotrack für das Ziel der Erlebniszu spielen.
Wählen Sie das Kabel , dann im Eigenschaften -Fenster,
- Setze SourceInstance auf deinen neuen AudioPlayer , um anzugeben, dass du möchtest, dass der Draht Audio von diesem bestimmten Spieler:inüberträgt.
- Setze Zielinstanz auf deine neue AudioEmitter , um anzugeben, dass du möchtest, dass der Draht Audio zu diesem bestimmten Audio-Emitter innerhalb der Lautstärke weiterleitet.
Kehre im Explorer -Fenster zurück, navigiere zu StarterPlayer > StarterCharacterScripts , füge ein LocalScript ein, benenne es um in PlayAudioWhenInVolume und füge den folgenden Code in das lokale Skript, das. PL: die Skriptsein:
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)Code-ErklärungDieses Skript beginnt damit, die Workspace- und Spielerdienste zu erhalten, damit es ihre Kinder und Funktionalität referenzieren kann.Für jeden Spielercharakter, der sich in das Erlebnis laden oder zurückrespawnen lässt, wartet das Skript auf:
- Das Volumenobjekt im Arbeitsbereich mit dem Namen DialogueVolume .
Wenn etwas mit der Lautstärke kollidiert, erhält die Touched Event-Handlungsfunktion den ersten Vorfahren, der ein Model ist, was der Charakter sein sollte, wenn der BasePart, der mit der Lautstärke kollidierte, ein Nachkomme eines Modellist.Wenn es das ist, dann die Funktion:
- Setzt Debounce auf true.
- Spielt und wartet auf das beendendes Audios.
- Setzt Debounce zurück auf false.
Die Einstellung der Debounce von false auf true auf false erneut, nachdem das Audio abgespielt ist, ist ein Debounce-Muster, das verhindert, dass das Audio wiederholt ausgelöst wird, da Spieler sich ständig mit der Lautstärke stoßen.Für weitere Informationen zu diesem Debounce-Muster siehe Kollisionen erkennen.
Teste das Erlebnis, um den instruktiven Charakterdialog zu hören, wenn dein Spielercharakter die Lautstärke rund um den Schneemann berührt.