2D-Audio ist nicht-richtungsabhängiger Klang, der nicht von einem bestimmten Ort ausgeht und unabhängig von der Position oder Ausrichtung des Zuhörers im 3D-Raum gleich bleibt. Das bedeutet, dass die Spieler, während sie ihre Zuhörer durch die Umgebung bewegen, 2D-Audio von überall hören können, wohin sie sich auch drehen.
Mit der Gingerbread House - Start .rbxl-Datei als Ausgangspunkt und Gingerbread House - Complete Audio als Referenz zeigt dieses Tutorial, wie man sowohl sich wiederholendes als auch einmaliges 2D-Audio in seine Spiele einfügt, einschließlich Anleitungen zu:
- Wiederholender Hintergrundmusik, die sofort spielt, wenn die Spieler sich mit dem Server verbinden.
- Auslösen von Audio, um den Spielern sofortiges Feedback gemäß ihren Spielzielen zu geben.
- Aktivieren verschiedener Klänge, um unterschiedliche Benutzeroberflächeninteraktionen anzuzeigen.
Wenn Sie während des Prozesses an irgendeinem Punkt stecken bleiben, können Sie Gingerbread House - Complete Audio als Referenz verwenden, um Ihren Fortschritt zu vergleichen.
2D-Audioobjekte
Um nicht-richtungsabhängiges Audio zu erstellen, ist es wichtig, die Audioobjekte zu verstehen, mit denen Sie während dieses Tutorials arbeiten werden. Es gibt drei Haupttypen von Audioobjekten für 2D-Audio:
- Das AudioPlayer-Objekt lädt und spielt die Audio-Datei.
- Das AudioDeviceOutput-Objekt ist ein physisches Hardwaregerät in der realen Welt, wie z. B. ein Lautsprecher oder Kopfhörer.
- Wires übertragen Audio-Streams von einem Objekt zum anderen.
All diese Audioobjekte arbeiten zusammen, um den Klang von der Dateiwiedergabe zu der Hardware jedes Spielers zu übertragen. Lassen Sie uns ansehen, wie dies in der Praxis funktioniert, indem wir ein Beispiel eines Spielers betrachten, der ein Headset trägt, während er ein Spiel auf seinem Laptop spielt:
- Das AudioPlayer lädt die 127645268874265 Audio-Asset-ID in das Spiel für einen Währungskaufsound.
- Ein Wire überträgt den Stream vom AudioPlayer zum AudioDeviceOutput, sodass der Stream aus dem Headset des Spielers kommt.
- Das AudioDeviceOutput-Objekt überträgt den Klang an den physischen Lautsprecher des Spielers oder in diesem Fall an seine Kopfhörer.
Die folgenden Abschnitte gehen tiefer auf diese Objekte ein und beziehen sich auf sie, während Sie lernen, wie man sowohl sich wiederholendes als auch einmaliges 2D-Audio abspielt. Wenn Sie diese Objekte mit den kommenden Techniken überprüfen, können Sie genauer vorhersagen, wie Sie den Klang vom Spiel zum Spieler erfassen und übertragen können.
Wiederholendes Audio
Wiederholendes 2D-Audio, oder nicht-richtungsabhängiges Audio, das nahtlos wiederholt wird, sobald die Spieler sich mit dem Server verbinden, ist eine gängige Klangdesigntechnik, um einen kohärenten auditiven Hintergrund bereitzustellen, unabhängig davon, was die Spieler tun oder wo sie sich im 3D-Raum befinden. Darüber hinaus stellt wiederholendes 2D-Audio sicher, dass Ihr Spiel niemals völlig still ist, was die Spieler desorientieren und von ihren Zielen ablenken kann.
Um dieses Konzept zu demonstrieren, überprüfen Sie, wie das folgende 2D-Audio die Qualität des Hazardous Space Station Beispiels erheblich verbessert. Ohne Hintergrundmusik fühlt sich die Raumstation hohl und leblos an. Wenn die Raumstation jedoch Hintergrundmusik enthält, fühlt sie sich sowohl unheimlich als auch gefährlich an, was zur insgesamt gruseligen Atmosphäre beiträgt.
Wiederholendes Audio ist besonders nützlich, um festzulegen, wie Sie möchten, dass sich die Spieler fühlen, sobald sie Ihrem Spiel beitreten. Zum Beispiel zielt das Beispiel darauf ab, den Spielern ein fröhliches Abenteuer in einem Winterwunderland zu bieten, daher verwendet es einen fröhlichen Audiotrack, um ihre Stimmung positiv zu beeinflussen, sobald sie die Umgebung betreten. Um zu sehen, wie einflussreich diese Technik sein kann, überlegen Sie, wie sich die Erfahrung des Spielers ändern würde, wenn Sie das wiederholende Audio gegen einen Metal-Track austauschen würden.
Um das wiederholende 2D-Audio im Beispiel Gingerbread House - Complete Audio zu reproduzieren:
Aktivieren Sie einen Standard-Zuhörer, der an Ihren Spielercharakter angehängt ist.
- Wählen Sie im Explorer-Fenster den SoundService aus.
- Setzen Sie im Properties-Fenster DefaultListenerLocation auf Character. Wenn Sie das Spiel ausführen, erstellt die Engine automatisch ein AudioDeviceOutput unter SoundService.
Navigieren Sie im Explorer-Fenster zu SoundService, dann:
- Fügen Sie ein AudioPlayer-Objekt hinzu, um eine Audioquelle zu erstellen.
- Fügen Sie ein AudioDeviceOutput-Objekt hinzu, um einen Lautsprecher zu erstellen, der im gesamten Spiel spielt.
- Fügen Sie ein Wire-Objekt hinzu, um den Stream vom Audio-Player zum Lautsprecher zu übertragen.

Wählen Sie den AudioPlayer aus, und setzen Sie im Properties-Fenster:
- Setzen Sie AssetID auf rbxassetid://1841461968, um einen fröhlichen Audiotrack abzuspielen.
- Aktivieren Sie Looping, damit das Audio nahtlos wiederholt wird.
- Setzen Sie Volume auf 0.2, um das Audio bei niedriger Lautstärke abzuspielen, damit Sie die anderen Audioquellen im Spiel weiterhin hören können.
Wählen Sie den Wire aus, und setzen Sie im Properties-Fenster:
- Setzen Sie SourceInstance auf Ihren neuen AudioPlayer, um anzugeben, dass Sie möchten, dass der Draht Audio von diesem speziellen Audio-Player überträgt.
- Setzen Sie TargetInstance auf Ihr neues AudioDeviceOutput, um anzugeben, dass Sie möchten, dass der Draht Audio zu diesem speziellen Lautsprecher überträgt.
Gehen Sie zurück zum Explorer-Fenster, fügen Sie ein Script in AudioPlayer ein, benennen Sie es in LoopBackgroundMusic um, setzen Sie die RunContext-Eigenschaft auf Client und fügen Sie den folgenden Code in das Skript ein:
local audioPlayer = script.ParentaudioPlayer:Play()Code-ErklärungDas Skript beginnt damit, eine Variable zu deklarieren, die das übergeordnete AudioPlayer des Skripts darstellt. Das Skript setzt dann die Audioquelle so, dass sie vom Moment an abspielt, in dem der Spieler dem Spiel beitritt, bis zu dem Moment, in dem er das Spiel verlässt.
Testen Sie das Spiel, um die wiederholende Hintergrundmusik zu hören.
Einmaliges Audio
Einmaliges 2D-Audio, oder nicht-richtungsabhängiges Audio, das einmal zu einem bestimmten Zeitpunkt und an einem bestimmten Ort abgespielt wird, es sei denn, ein Spieler löst es erneut aus, bietet den Spielern wichtige Kontexte zu allem, was sie nicht verpassen sollen. Die Verwendung dieser Art von akustischem Feedback in Ihren Spielen ist entscheidend, da sie eine sofortige, klare Reaktion auf wichtige Spielmechaniken und Spieleraktionen bietet, wie z. B. den Beginn eines Bosskampfes oder den Verlust einer erheblichen Menge an Gesundheit.
Die folgenden Abschnitte bieten Implementierungsdetails für gängige Spielszenarien, in denen die Spieler zeitnahes, nicht-richtungsabhängiges Feedback benötigen, einschließlich Gameplay-Feedback, Interaktionen mit UI-Elementen und Voiceover-Erzählungen für Tutorials.
Gameplay-Feedback
Während die Spieler durch Ihr Spiel fortschreiten, ist es wichtig, dass sie sofort akustisches Feedback über den Status von allem erhalten, was ihr Gameplay beeinflusst, wie z. B. ihren Punktestand, ihre Gesundheit oder ihren Fortschritt im Level. Da diese Art von Audio direkt mit den Zielen der Spieler verbunden ist, ist es wichtig, dass diese Klänge klar, hörbar und nützliche sowie genaue Informationen vermitteln.
Um dieses Konzept zu demonstrieren, überprüfen wir das folgende einmalige 2D-Audio aus der Platformer Vorlage, das abgespielt wird, wenn die Spieler springen und Münzen sammeln:
- Ein luftiger Wusch-Sound wird abgespielt, sobald der Spieler die Sprungtaste auf seinem Gerät drückt.
- Ein hochfrequenter Klingelton und das Geräusch von Münzen, die sich bewegen, werden abgespielt, sobald der Charakter des Spielers eine Münze berührt.
Beide Klänge sind im Kontext des 3D-Raums sofort erkennbar und helfen den Spielern, den Erfolg ihrer Aktionen zu verstehen, ohne sich ausschließlich auf visuelle Hinweise verlassen zu müssen.
Wenn Sie mehrere Klänge gleichzeitig abspielen, können bestimmte Klänge für die Spieler wichtiger sein als andere. In diesem Fall vermittelt das Geräusch der Münzsammlung wertvollere Gameplay-Informationen als das Sprunggeräusch, sodass das Spiel es bei leicht höherer Lautstärke abspielt. Es gibt jedoch keine Standards oder Regeln, um einen großartigen Mix zu erzielen, also stimmen Sie die Klänge in Ihrem Spiel so ab, wie Sie es für am wichtigsten halten.
Zum Beispiel enthält das Beispiel verschiedene Audioauslöser im gesamten Spiel, aber sie sind nicht alle auf dem gleichen Wichtigkeitsgrad für das Verständnis des Hauptziels des Spiels: Sammeln Sie Gumdrops, um das Lebkuchenhaus zu öffnen. Um sicherzustellen, dass die Spieler wissen, was sie tun müssen, verdreifacht das Beispiel die Amplitude des akustischen Feedbacks, wann immer der Spieler einen Gumdrop sammelt.
Um das einmalige Status-Feedback-Audio im Beispiel Gingerbread House - Complete Audio zu reproduzieren:
Navigieren Sie im Explorer-Fenster zu Workspace ⟩ Gumdrops ⟩ Gumdrop, dann:
- Fügen Sie ein AudioPlayer-Objekt hinzu, um eine Audioquelle zu erstellen.
- Fügen Sie ein AudioDeviceOutput-Objekt hinzu, um einen Lautsprecher zu erstellen, der im gesamten Spiel spielt.
- Fügen Sie ein Wire-Objekt hinzu, um den Stream vom Audio-Player zum Lautsprecher zu übertragen.

Wählen Sie den AudioPlayer aus, und setzen Sie im Properties-Fenster:
- Setzen Sie AssetID auf rbxassetid://9113723699, um einen sanften Kaugeräusch-Audiotrack abzuspielen.
- Setzen Sie TimePosition auf 0.15, um den Audiotrack näher am tatsächlichen Kaugeräusch zu starten.
- Setzen Sie Volume auf 3, um das Audio bei hoher Lautstärke abzuspielen, damit Sie das Gumdrop-Geräusch über andere Audioquellen im Spiel hören können.
Wählen Sie den Wire aus, und setzen Sie im Properties-Fenster:
- Setzen Sie SourceInstance auf Ihren neuen AudioPlayer, um anzugeben, dass Sie möchten, dass der Draht Audio von diesem speziellen Audio-Player überträgt.
- Setzen Sie TargetInstance auf Ihr neues AudioDeviceOutput, um anzugeben, dass Sie möchten, dass der Draht Audio zu diesem speziellen Lautsprecher überträgt.
Duplizieren Sie Gumdrop, bis Sie drei Gumdrops haben, und verteilen Sie sie dann in der Umgebung.
Gehen Sie zurück zum Explorer-Fenster, navigieren Sie zu ServerScriptService, fügen Sie ein Script ein, benennen Sie es in GumdropService um, setzen Sie die RunContext-Eigenschaft auf Server und fügen Sie den folgenden Code in das Skript ein:
-- Initialisierung der Dienstelocal 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 der Gumdrop-Tabellelocal newGumdropAmount = PlayerData.updateValue(player, GUMDROP_KEY_NAME, updateFunction)-- Aktualisieren des Gumdrop-LeaderboardsLeaderboard.setStat(player, GUMDROP_KEY_NAME, newGumdropAmount)-- Überprüfen, ob der Spieler drei Gumdrops gesammelt hatif newGumdropAmount >= 3 then-- Spielen Sie das Türereignis-Audio ab, wenn der Spieler drei Gumdrops sammeltlocal audioPlayer = Workspace.Door.AudioPlayeraudioPlayer:Play()-- Animieren Sie die Tür, um 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-- Definieren des Ereignishandlerslocal function onGumdropTouched(otherPart, gumdrop)if gumdrop:GetAttribute("Active") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Spieler hat einen Gumdrop berührtlocal audioPlayer = gumdrop.AudioPlayeraudioPlayer:Play()gumdrop.Transparency = 1gumdrop:SetAttribute("Active", false)updatePlayerGumdrops(player, function(oldGumdropAmount)oldGumdropAmount = oldGumdropAmount or 0return oldGumdropAmount + GUMDROP_AMOUNT_TO_ADDend)endendend-- Einrichten von Ereignis-Listenernfor _, gumdrop in gumdrops dogumdrop:SetAttribute("Active", true)gumdrop.Touched:Connect(function(otherPart)onGumdropTouched(otherPart, gumdrop)end)endCode-ErklärungDieses Skript beginnt mit der Initialisierung der Dienste Workspace, Players, ServerStorage und TweenService, damit es auf deren Kinder und Funktionen zugreifen kann. Dann erfordert es die Module Leaderboard und PlayerData in ServerStorage; diese Module sind verantwortlich für die Erstellung und Aktualisierung eines Leaderboards in der oberen rechten Ecke des Bildschirms, das die Menge an Gummibärchen verfolgt, die ein Spieler in der Umgebung sammelt.
Die Funktion updatePlayerGumdrops des Skripts ist hauptsächlich dafür verantwortlich, das Leaderboard jedes Mal zu aktualisieren, wenn ein Spieler einen Gumdrop sammelt, und auf den Moment zu warten, in dem sie alle drei Gumdrops sammeln, damit es einen positionalen Sound und eine Animation für die Tür des Lebkuchenhauses auslösen kann. Für weitere Informationen zu diesem Teil des Skripts siehe 3D-Audio hinzufügen - Ereignis-Feedback.
Die Funktion onGumdropTouched des Skripts ist der Ort, an dem der Großteil der Arbeit für das Auslösen von 2D-Audio für Gameplay-Feedback erfolgt, und sie nimmt zwei Argumente:
- otherPart - Ein Teil, der mit dem Gumdrop kollidiert.
- gumdrop - Ein sphärischer Teil, der einen Gumdrop darstellt.
Wenn irgendetwas mit dem Gumdrop-Teil kollidiert, überprüft das Skript zuerst, ob der Gumdrop aktiv ist. Wenn ja, überprüft es, ob das kollidierende Objekt ein Spieler ist. Wenn ja, dann:
- Spielt es den 2D-Audiotrack vom Audio-Player ab.
- Macht den Gumdrop unsichtbar.
- Deaktiviert den Gumdrop, sodass die Spieler nicht mit dem unsichtbaren Gumdrop interagieren können.
- Aktualisiert das Leaderboard für den Spieler, der den Gumdrop berührt hat.
Schließlich richtet das Skript Ereignis-Listener ein, sodass für jeden Gumdrop eine Funktion mit dem Touched-Ereignis verbunden wird, die die Funktion onGumdropTouched aufruft, wenn ein Spieler den Gumdrop berührt.
Testen Sie das Spiel, um das Kaugeräusch zu hören, nachdem Sie einen Gumdrop gesammelt haben.
UI-Interaktion
Wenn Spieler mit Ihren Benutzeroberflächen (UI)-Elementen interagieren, wie z. B. das Überfahren eines Kontrollkästchens oder das Auswählen eines Kauf-Buttons, ist es wichtig, sofortiges Feedback zu geben, damit sie intuitiv verstehen, wie sie mit Ihrer UI interagieren. Viele Designer ändern beispielsweise die visuellen Eigenschaften der UI, wenn Spieler Einstellungen aktivieren oder deaktivieren, um den Status der Einstellung zu kommunizieren.
Für Spieler mit Sehbehinderungen, bei denen Farbänderungen oder Animationen schwieriger zu erkennen sind, ist es jedoch nützlich, mehrere Formen von sensorischem Feedback für Ihre UI-Interaktionen bereitzustellen, damit sie für so viele Spieler wie möglich zugänglich und intuitiv bleiben. Um dieses Konzept zu erweitern, betrachten wir die folgenden UI-Zustände, die für die Kauf-Buttons der UGC Homestore Vorlage wichtig sind:
- Im Fokus - Zeigt an, dass der Spieler ein UI-Element hervorhebt, um es auszuwählen.
- Beim Überfahren - Zeigt an, dass der Spieler mit dem Cursor über ein UI-Element fährt.
- Ausgewählt - Zeigt an, dass der Spieler ein UI-Element über seine Eingabe ausgewählt hat.
Alle drei dieser Interaktionen sind entscheidend für den Hauptbenutzerfluss der Vorlage, in dem die Spieler durchstöbern, auswählen und Avatar-Kleidung und -Zubehör kaufen, sodass es von größter Bedeutung ist, dass niemand verwirrt ist, wie man mit der UI interagiert. Um die Spieler auf den Erfolg vorzubereiten, bietet die Vorlage sowohl visuelles als auch akustisches Feedback für jede UI-Interaktion.




Um ein Beispiel dafür zu geben, wie Sie mehrere Formen von sensorischem Feedback konfigurieren können, bietet das Beispiel sowohl visuelles als auch akustisches Feedback, wann immer die Spieler die auf dem Bildschirm angezeigte Pfefferminz-Taste drücken. Wenn die Spieler nicht mit der Taste interagieren, sieht sie aus wie eine typische Pfefferminzsüßigkeit, aber wenn sie die Taste drücken, spielt das Beispiel:
- Einen erfreulichen Jingle-Audiotrack ab.
- Tönt die Taste mit einem türkisfarbenen Farbton.
- Bewegt die Taste leicht nach unten auf dem Bildschirm.
Von hier aus können Sie diese Interaktion mit allen möglichen nützlichen Gameplay-Aktionen verbinden, wie z. B. das Öffnen eines Menüs oder den Kauf eines Artikels.


Um das einmalige UI-Interaktionsaudio im Beispiel Gingerbread House - Complete Audio zu reproduzieren:
Navigieren Sie im Explorer-Fenster zu StarterGui ⟩ 2DAudioButton, dann:
- Fügen Sie ein AudioPlayer-Objekt hinzu, um eine Audioquelle zu erstellen.
- Fügen Sie ein AudioDeviceOutput-Objekt hinzu, um einen Lautsprecher zu erstellen, der im gesamten Spiel spielt.
- Fügen Sie ein Wire-Objekt hinzu, um den Stream vom Audio-Player zum Lautsprecher zu übertragen.

Wählen Sie den AudioPlayer aus, und setzen Sie im Properties-Fenster AssetID auf rbxassetid://3422389728, um einen retro Jingle-Audiotrack abzuspielen.
Wählen Sie den Wire aus, und setzen Sie im Properties-Fenster:
- Setzen Sie SourceInstance auf Ihren neuen AudioPlayer, um anzugeben, dass Sie möchten, dass der Draht Audio von diesem speziellen Audio-Player überträgt.
- Setzen Sie TargetInstance auf Ihr neues AudioDeviceOutput, um anzugeben, dass Sie möchten, dass der Draht Audio zu diesem speziellen Lautsprecher überträgt.
Gehen Sie zurück zum Explorer-Fenster, fügen Sie ein LocalScript in 2DAudioButton ein, benennen Sie es in PlayAudioWhenPressed um, und fügen Sie den folgenden Code in das Skript ein:
local TweenService = game:GetService("TweenService")local buttonGui = script.Parentlocal buttonImageButton = buttonGui.ButtonFrame.ButtonImageButtonlocal buttonAudioPlayer = buttonGui.AudioPlayerlocal tweenInfo = TweenInfo.new(.2, Enum.EasingStyle.Exponential)local buttonTweenByIsPressed = {-- Gedrückt[true] = TweenService:Create(buttonImageButton, tweenInfo, {Position = buttonImageButton.Position + UDim2.fromScale(0, .1),ImageColor3 = Color3.fromRGB(117, 255, 255),}),-- Standard[false] = TweenService:Create(buttonImageButton, tweenInfo, {Position = buttonImageButton.Position,ImageColor3 = Color3.fromRGB(255, 255, 255),}),}local function onIsPlayingChanged()local isPlaying = buttonAudioPlayer.IsPlayinglocal tween = buttonTweenByIsPressed[isPlaying]tween:Play()endonIsPlayingChanged()buttonAudioPlayer:GetPropertyChangedSignal("IsPlaying"):Connect(onIsPlayingChanged)buttonAudioPlayer.Ended:Connect(onIsPlayingChanged)buttonImageButton.Activated:Connect(function(_hit)buttonAudioPlayer:Play()end)Code-ErklärungDas Skript beginnt damit, Folgendes zu erhalten:
- Den TweenService, damit es UI-Elemente animieren kann.
- Das übergeordnete 2DAudioButton ScreenGui-Objekt des Skripts.
- Die Pfefferminzsüßigkeit ImageButton.
- Den relevanten Audio-Player mit Ihrem Jingle-Audiotrack.
Das Skript definiert dann:
- Ein TweenInfo-Objekt, das angibt, dass die Animation der Taste mit einem exponentiellen Animationsstil abgespielt wird.
- Zwei Tweens, die den gedrückten oder ungedrückten Zustand der Taste darstellen.
- Der true gedrückte Zustand bewegt die Taste leicht nach unten auf dem Bildschirm und färbt sie mit einem türkisfarbenen Farbton.
- Der false ungedrückte Zustand bewegt die Taste zurück in ihre ursprüngliche Position auf dem Bildschirm und entfernt den vorherigen Farbton.
Der Rest des Skripts ist der Ort, an dem der Großteil der Arbeit für das Auslösen von 2D-UI-Interaktionsfeedback erfolgt, also lassen Sie uns überprüfen, wie die Funktion onIsPlayingChanged und die Ereignis-Listener zusammen für den UI-Benutzerfluss arbeiten:
- buttonImageButton.Activated hört auf einen Spieler, der die Taste klickt, und ruft dann die Funktion Play() auf, um das zugehörige Audio vom Audio-Player abzuspielen. Dieser Prozess wechselt die AudioPlayer.IsPlaying-Eigenschaft von false auf true.
- buttonAudioPlayer:GetPropertyChangedSignal("IsPlaying") hört auf die Änderung der IsPlaying-Eigenschaft des Audio-Players und ruft dann die Funktion onIsPlayingChanged auf.
- Die Funktion onIsPlayingChanged verwendet diese Informationen, um das Tween auszulösen, das das visuelle Erscheinungsbild auf dem Bildschirm ändert.
- Um zu verhindern, dass der Spieler das Audio versehentlich neu startet, wenn er die Taste schnell hintereinander klickt, hört buttonAudioPlayer.Ended auf den Audio-Player, um zu beenden, bevor die Funktion onIsPlayingChanged erneut aufgerufen wird.
Es ist wichtig zu beachten, dass das onIsPlayingChanged-Ereignis nur ausgelöst wird, wenn es von false auf true wechselt, was bedeutet, dass es nicht ausgelöst wird, wenn es von true auf false wechselt. Dies ist beabsichtigtes Verhalten aufgrund von Komplikationen mit der Zeit, die benötigt wird, um Eigenschaften vom Server zum Client zu replizieren. Aus diesem Grund wird das Ended`-Ereignis in diesem Beispiel bereitgestellt und gehört, um beide Fälle abzudecken.
Testen Sie das Spiel, um den Jingle jedes Mal zu hören, wenn Sie die auf dem Bildschirm angezeigte Taste drücken.