Text-to-Speech hinzufügen

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Text-zu-Sprache ist eine Form der unterstützenden Technologie, die Textzeichenfolgen in Sprachlaute mit einer künstlichen Stimme umwandelt. Neben der Verbesserung der Zugänglichkeit Ihrer Spiele für Spieler mit Seh-, Mobilitäts- oder kognitiven Behinderungen ermöglicht TTS, Sprache dynamisch zu erzeugen, sodass Sie nicht für alle möglichen narrativen Szenarien Audio vorab aufnehmen müssen.

Mit der Gingerbread House - Start .rbxl-Datei als Ausgangspunkt und Gingerbread House - Text-zu-Sprache als Referenz zeigt Ihnen dieses Tutorial, wie Sie sowohl grundlegende als auch kontextabhängige TTS-Audios zu Ihren Spielen hinzufügen, einschließlich Anleitungen zu:

  • Auslösen von TTS für häufige Gameplay-Szenarien, die sich niemals ändern werden, wie z. B. UI-Interaktionen und Tutorials.
  • Konfigurieren von TTS, sodass es sich an die Aktionen der Spieler, den Status der Umgebung oder flexible Ziele anpasst.

Wenn Sie während des Prozesses an irgendeinem Punkt stecken bleiben, können Sie Gingerbread House - Text-zu-Sprache als Referenz verwenden, um Ihren Fortschritt zu vergleichen.

Audioobjekte

Um TTS-Audio zu erstellen, ist es wichtig, die Audioobjekte zu verstehen, mit denen Sie während dieses Tutorials arbeiten werden. Es gibt fünf Haupttypen von Audioobjekten für TTS:

  • Das AudioTextToSpeech-Objekt wandelt Textzeichenfolgen in Sprachlaute um.
  • Das AudioEmitter-Objekt ist ein virtueller Lautsprecher, der Audio in die 3D-Umgebung ausgibt.
  • Das AudioListener-Objekt ist ein virtuelles Mikrofon, das Audio aus der 3D-Umgebung aufnimmt.
  • Das AudioDeviceOutput-Objekt ist ein physisches Hardwaregerät in der realen Welt, wie z. B. ein Lautsprecher oder Kopfhörer.
  • Wires übertragen Audiostreams von einem Objekt zum anderen.

All diese Audioobjekte arbeiten zusammen, um TTS-Geräusche als Reaktion auf Spieleraktionen auszugeben. Schauen wir uns an, wie das in der Praxis für 3D-Audio funktioniert, anhand eines Beispiels eines Spielers, der ein Headset trägt, während er ein Spiel auf seinem Laptop spielt:

  • Das AudioTextToSpeech lädt und wandelt Text in Audio um, wann immer ein Spieler ein Teil in der Nähe eines nicht spielbaren Charakters (NPC) berührt.
  • Das AudioEmitter gibt einen Stream des TTS-Audios vom NPC in die 3D-Umgebung aus.
  • Ein Wire überträgt den Stream vom AudioTextToSpeech zum AudioEmitter, sodass der Stream aus dem NPC kommt.
  • Das Kindobjekt AudioListener des Charakters hört diesen Klang innerhalb der 3D-Umgebung und gibt ihn an sein Headset zurück.
  • Das AudioDeviceOutput-Objekt überträgt den Klang vom AudioListener zum physischen Lautsprecher des Spielers oder in diesem Fall zu seinen Kopfhörern.

Die folgenden Abschnitte gehen tiefer und beziehen sich auf diese Objekte, während Sie lernen, sowohl grundlegende als auch kontextabhängige Audio abzuspielen. Wenn Sie diese Objekte mit den kommenden Techniken überprüfen, können Sie genauer vorhersagen, wie Sie den Klang aus dem Spiel an den Spieler erfassen und weitergeben können.

Grundlegendes TTS

Grundlegendes TTS ist die häufigste Form von Text-zu-Sprache, bei der die künstliche Stimme eine Textzeichenfolge unabhängig vom Kontext des Spielers oder der Umgebung vorliest. Das bedeutet, dass immer wenn der Spieler das TTS-Audio auslöst, die Wörter und die Art und Weise, wie die künstliche Stimme die Wörter vorliest, konsistent bleibt, unabhängig vom Zustand des Spielers, seinen Aktionen oder dem Status der Umgebung.

Diese Form von TTS ist in den meisten Gameplay-Szenarien nützlich, wie z. B. bei Spielern, die mit UI-Menüs, Tutorials oder routinemäßigen NPC-Interaktionen wie Händlerangeboten oder Feindeschreien interagieren. Roblox stellt die folgenden Arten von Stimmen zur Verfügung, mit denen Sie für jede dieser Interaktionen experimentieren können:

VoiceIDStimmenbeschreibungAudio-Beispiel
1Britischer Mann
2Britische Frau
3Vereinigte Staaten männlich #1
4Vereinigte Staaten weiblich #1
5Vereinigte Staaten männlich #2
6Vereinigte Staaten weiblich #2
7Australischer Mann
8Australische Frau
9Retro-Stimme #1
10Retro-Stimme #2
11Host-Stimme
101Spanischer Mann
102Spanische Frau
201Deutscher Mann
202Deutsche Frau
301Italienischer Mann
302Italienische Frau
401Französischer Mann
402Französische Frau

Um das grundlegende 3D-TTS-Audio in der Beispiel- Gingerbread House - Text-zu-Sprache Platzdatei zu reproduzieren:

  1. Aktivieren Sie einen Standardlistener, der an Ihren Spielercharakter angehängt ist.
    1. Wählen Sie im Explorer-Fenster den SoundService aus.
    2. Setzen Sie im Eigenschaften-Fenster DefaultListenerLocation auf Character. Wenn Sie das Spiel ausführen, erstellt die Engine automatisch:
      • Ein AudioListener unter dem Humanoid.RootPart jedes Spielercharakters, sodass Sie Geräusche in Ihren realen Lautsprechern entsprechend der Position und dem Maßstab der Schallquellen im Spiel hören können.
      • Ein AudioDeviceOutput unter SoundService.
  2. Navigieren Sie im Explorer-Fenster zu WorkspaceDialogueVolume, dann:
    1. Fügen Sie ein AudioTextToSpeech-Objekt hinzu, um einen Audio-Sprachgenerator für das Volumen um den Schneemann zu erstellen.
    2. Fügen Sie ein AudioEmitter-Objekt hinzu, um einen positionsabhängigen Stream aus DialogueVolume auszugeben.
    3. Fügen Sie ein Wire-Objekt hinzu, um den Stream vom Audio-Sprachgenerator zum Audio-Emitter zu übertragen.
  3. Wählen Sie das AudioTextToSpeech-Objekt aus, und setzen Sie im Eigenschaften-Fenster:
    1. Setzen Sie Text auf "Sammle jeden einzelnen letzten Gumpdrop, um mein Zuhause zu öffnen!"
    2. Setzen Sie VoiceId auf 2, um die künstliche Stimme so einzustellen, dass sie eine britische Frau imitiert.
    3. Setzen Sie die Lautstärke auf 3, um das Audio mit hoher Lautstärke abzuspielen, sodass Sie den TTS-Sound über andere Audioquellen im Spiel hören.
  4. Wählen Sie das Wire aus, und setzen Sie im Eigenschaften-Fenster:
    1. Setzen Sie SourceInstance auf Ihr neues AudioTextToSpeech, um anzugeben, dass Sie möchten, dass das Kabel Audio von diesem spezifischen Audio-Sprachgenerator überträgt.
    2. Setzen Sie TargetInstance auf Ihren neuen AudioEmitter, um anzugeben, dass Sie möchten, dass das Kabel Audio zu diesem spezifischen Audio-Emitter innerhalb des Volumens überträgt.
  5. Navigieren Sie im Explorer-Fenster zu StarterPlayerStarterCharacterScripts, fügen Sie ein LocalScript hinzu, benennen Sie es um in PlayBasicTTSAudioWhenInVolume und fügen Sie den folgenden Code in das lokale Skript ein:
local Workspace = game:GetService("Workspace")
local Players = game:GetService("Players")
local humanoid = script.Parent:WaitForChild("Humanoid")
local volumeDetector = Workspace.DialogueVolume
local trigger = humanoid:WaitForChild("Animator")
local debounce = false
local localPlayer = Players.LocalPlayer
volumeDetector.Touched:Connect(function(hit)
if debounce then
return
end
local hitCharacter = hit:FindFirstAncestorWhichIsA("Model")
local hitPlayer = Players:GetPlayerFromCharacter(hitCharacter)
if hitPlayer ~= localPlayer then
return
end
debounce = true
local audioTextToSpeech = Workspace.DialogueVolume.AudioTextToSpeech
audioTextToSpeech:Play()
audioTextToSpeech.Ended:Wait()
debounce = false
end)

Dieses Skript beginnt damit, die Dienste Workspace und Players abzurufen, damit es auf deren Kinder und Funktionalität zugreifen kann. Für jeden Spielercharakter, der ins Spiel geladen oder zurück respawnt, wartet das Skript auf:

  • Die Humanoid- und Animator-Objekte des Charakters.
  • Das Volumenobjekt im Arbeitsbereich mit dem Namen DialogueVolume.

Wenn etwas mit dem Volumen kollidiert, erhält die Touched-Ereignis-Handler-Funktion den ersten Vorfahren, der ein Model ist, was der Charakter sein sollte, wenn das BasePart, das mit dem Volumen kollidiert ist, ein Nachkomme eines Charaktermodells ist. Wenn dies der Fall ist, führt die Funktion dann Folgendes aus:

  • Setzt debounce auf true.
  • Spielt das TTS-Audio ab und wartet, bis es endet.
  • Setzt debounce zurück auf false.

Das Setzen von debounce von false auf true und dann wieder auf false, nachdem das grundlegende TTS-Audio zu Ende gespielt wurde, ist ein Debounce-Muster, das verhindert, dass das Audio wiederholt ausgelöst wird, während Spieler kontinuierlich mit dem Volumen kollidieren. Weitere Informationen zu diesem Debounce-Muster finden Sie unter Debounce - Kollisionen erkennen.

  1. Testen Sie das Spiel, um den Anweisungsdialog des Charakters zu hören, wenn Ihr Spielercharakter das Volumen um den Schneemann berührt.

Sie können mit diesem Audio weiter experimentieren, indem Sie die Eigenschaften Text, VoiceID, Pitch und Speed auf neue Werte ändern. Die erzeugte Sprache wird völlig anders, ohne dass Sie eine neue Audiodatei für jedes Szenario aufnehmen und hochladen müssen.

Kontextabhängiges TTS

Kontextabhängiges TTS ist eine fortgeschrittenere Form von Text-zu-Sprache, bei der die künstliche Stimme eine Textzeichenfolge in Bezug auf den Spieler, den Zustand seiner Umgebung oder den Gameplay-Status vorliest. Das bedeutet, dass immer wenn der Spieler das TTS-Audio auslöst, die Wörter und die Art und Weise, wie die künstliche Stimme die Wörter vorliest, entsprechend angepasst werden.

Diese Form von TTS ist nützlich für Gameplay-Szenarien, die sich ständig ändern, wie z. B. richtungsabhängige Audiohinweise, Zielstatus oder einzigartige NPC-Interaktionen. Daher müssen Sie, da kontextabhängiges TTS sich anpassen muss, um genau zu sein, Gameplay-Elemente so konfigurieren, dass Sie deren Status verfolgen können, während die Spieler durch die Umgebung navigieren und Gameplay-Ziele abschließen.

Es gibt viele Möglichkeiten, diese Aufgabe zu erfüllen, das Beispiel verwendet benutzerdefinierte Attribute, um die Farbe und Position jedes Gumpdrops zu verfolgen, den der Spieler sammeln muss, um das Lebkuchenhaus zu betreten. Weitere Informationen zu Attributen finden Sie unter Eigenschaften und Attribute.


Jedes Gumpdrop-Objekt hat Attribute, die ihre Farbe und Position in der Umgebung beschreiben.
Eine Nahaufnahme des gelben Gumpdrops
Eine Nahaufnahme des grünen Gumpdrops
Eine Nahaufnahme des roten Gumpdrops

Um das kontextabhängige 3D-TTS-Audio in der Beispiel- Gingerbread House - Text-zu-Sprache Platzdatei zu reproduzieren:

  1. Navigieren Sie im Explorer-Fenster zu WorkspaceGumDrops.

  2. Konfigurieren Sie drei benutzerdefinierte Attribute, um den gelben Gumpdrop zu verfolgen.

    1. Wählen Sie den gelben Gumpdrop aus, und navigieren Sie im Eigenschaften-Fenster zum Abschnitt Attribute, und klicken Sie dann auf das Plus-Symbol. Ein Popup-Dialog wird angezeigt.
    2. Geben Sie im Feld Name ColorDescription ein.
    3. Wählen Sie im Dropdown-Menü Typ string aus.
    4. Klicken Sie auf die Schaltfläche Speichern.
    5. Setzen Sie das neue ColorDescription-Attribut auf gelb.
    6. Erstellen Sie mit diesem Prozess zwei weitere Attribute mit den folgenden Werten.
    NameTypWert
    HintOrdernumber0
    LocationDescriptionstringneben dem Wasserfall
  3. Konfigurieren Sie drei benutzerdefinierte Attribute, um den grünen Gumpdrop zu verfolgen.

    1. Wählen Sie im Explorer-Fenster den grünen Gumpdrop aus.
    2. Erstellen Sie im Eigenschaften-Fenster drei Attribute mit den folgenden Werten.
    NameTypWert
    ColorDescriptionstringgrün
    HintOrdernumber1
    LocationDescriptionstringauf dem Vorsprung
  4. Konfigurieren Sie drei benutzerdefinierte Attribute, um den roten Gumpdrop zu verfolgen.

    1. Wählen Sie im Explorer-Fenster den roten Gumpdrop aus.
    2. Erstellen Sie im Eigenschaften-Fenster drei Attribute mit den folgenden Werten.
    NameTypWert
    ColorDescriptionstringrot
    HintOrdernumber2
    LocationDescriptionstringhinter dem Zaun
  5. Navigieren Sie im Explorer-Fenster zu WorkspaceHintVolume, dann:

    1. Fügen Sie ein AudioTextToSpeech-Objekt hinzu, um einen Audio-Sprachgenerator für das Volumen um das Rentier zu erstellen.
    2. Fügen Sie ein AudioEmitter-Objekt hinzu, um einen positionsabhängigen Stream aus HintVolume auszugeben.
    3. Fügen Sie ein Wire-Objekt hinzu, um den Stream vom Audio-Sprachgenerator zum Audio-Emitter zu übertragen.
  6. Wählen Sie das Wire aus, und setzen Sie im Eigenschaften-Fenster:

    1. Setzen Sie SourceInstance auf Ihr neues AudioTextToSpeech, um anzugeben, dass Sie möchten, dass das Kabel Audio von diesem spezifischen Audio-Sprachgenerator überträgt.
    2. Setzen Sie TargetInstance auf Ihren neuen AudioEmitter, um anzugeben, dass Sie möchten, dass das Kabel Audio zu diesem spezifischen Audio-Emitter innerhalb des Volumens überträgt.
  7. Navigieren Sie im Explorer-Fenster zu StarterPlayerStarterCharacterScripts, fügen Sie ein LocalScript hinzu, benennen Sie es um in PlayContextTTSAudioWhenInVolume und fügen Sie den folgenden Code in das lokale Skript ein:

local Workspace = game:GetService("Workspace")
local Players = game:GetService("Players")
local humanoid = script.Parent:WaitForChild("Humanoid")
local volumeDetector = Workspace.HintVolume
local trigger = humanoid:WaitForChild("Animator")
local debounce = false
local localPlayer = Players.LocalPlayer
function getRemainingGumdrops(): {Part}
local gumdropsFolder = Workspace.Gumdrops
local gumdrops = gumdropsFolder:GetChildren()
local remainingGumdrops = {};
for _, gumdrop in gumdrops do
if gumdrop:GetAttribute("Active") then
remainingGumdrops[#remainingGumdrops + 1] = gumdrop
end
end
table.sort(remainingGumdrops, function(a, b)
return a:GetAttribute("HintOrder") < b:GetAttribute("HintOrder")
end)
return remainingGumdrops
end
function getReindeerHint(remainingGumdrops: {Part}): string
local remainingGumdrops = getRemainingGumdrops()
if (#remainingGumdrops == 0) then
return "Es sind keine Gumpdrops mehr übrig. Schau im Haus nach."
end
local nextGumdrop = remainingGumdrops[1]
local colorDescription = nextGumdrop:GetAttribute("ColorDescription")
local locationDescription = nextGumdrop:GetAttribute("LocationDescription")
local message = #remainingGumdrops > 1
and "Es sind noch " .. #remainingGumdrops .. " Gumpdrops übrig. Suche nach dem " .. colorDescription .. "en in der " .. locationDescription .. "."
or "Es ist noch ein Gumpdrop übrig. Er ist " .. colorDescription .. " und er ist " .. locationDescription .. "."
return message
end
volumeDetector.Touched:Connect(function(hit)
if debounce then
return
end
local hitCharacter = hit:FindFirstAncestorWhichIsA("Model")
local hitPlayer = Players:GetPlayerFromCharacter(hitCharacter)
if hitPlayer ~= localPlayer then
return
end
print("Spieler hat das Volumen berührt.")
debounce = true
local remainingGumdrops = getRemainingGumdrops()
local message = getReindeerHint(remainingGumdrops)
local audioTextToSpeech = Workspace.HintVolume.AudioTextToSpeech
audioTextToSpeech.Text = message
audioTextToSpeech:Play()
audioTextToSpeech.Ended:Wait()
debounce = false
end)

Dieses Skript beginnt damit, die Dienste Workspace und Players abzurufen, damit es auf deren Kinder und Funktionalität zugreifen kann. Für jeden Spielercharakter, der ins Spiel geladen oder zurück respawnt, wartet das Skript auf:

  • Die Humanoid- und Animator-Objekte des Charakters.
  • Das Volumenobjekt im Arbeitsbereich mit dem Namen HintVolume.

Die Funktion getRemainingGumdrops() des Skripts gibt eine Liste von Gumpdrop-Part-Objekten im Gumdrops-Ordner zurück und filtert alle Teile heraus, die der Spieler gesammelt hat. Die verbleibenden Gumpdrops werden in einer bestimmten Reihenfolge gemäß dem HintOrder-Attribut jedes Gumpdrops sortiert.

Die Funktion getReindeerHint(remainingGumdrops) des Skripts nimmt diese Liste von getRemainingGumdrops() und gibt eine Zeichenfolgenmeldung zurück, die beschreibt, wo der Spieler die verbleibenden Gumpdrops finden kann, einschließlich sowohl der Farb- als auch der Standortbeschreibung des nächsten Gumpdrops, den der Spieler sammeln muss. Wenn der Spieler jedoch alle Gumpdrops in der Umgebung gesammelt hat, beschreibt die Zeichenfolgenmeldung, wo er als Nächstes hingehen soll, nachdem er alle Gumpdrops in der Umgebung gesammelt hat.

Wenn etwas mit dem Volumen kollidiert, erhält die Touched-Ereignis-Handler-Funktion den ersten Vorfahren, der ein Model ist, was der Charakter sein sollte, wenn das BasePart, das mit dem Volumen kollidiert ist, ein Nachkomme eines Charaktermodells ist. Wenn dies der Fall ist, führt die Funktion dann Folgendes aus:

  • Setzt debounce auf true.
  • Holt sich die Liste der verbleibenden Gumpdrops und die Zeichenfolgenmeldung, die den nächsten Gumpdrop beschreibt, den der Spieler finden muss.
  • Wandelt die Zeichenfolge in Audio um, indem sie das AudioTextToSpeech-Objekt verwendet, spielt das Audio ab und wartet, bis das Audio endet.
  • Setzt debounce zurück auf false.

Das Setzen von debounce von false auf true und dann wieder auf false, nachdem das kontextabhängige TTS-Audio zu Ende gespielt wurde, ist ein Debounce-Muster, das verhindert, dass das Audio wiederholt ausgelöst wird, während Spieler kontinuierlich mit dem Volumen kollidieren. Weitere Informationen zu diesem Debounce-Muster finden Sie unter Debounce - Kollisionen erkennen.

  1. Testen Sie das Spiel, um kontextuelle Hinweise zu hören, wenn Ihr Spielercharakter das Volumen um das Rentier berührt. Das TTS-Audio ändert sich je nach Anzahl und Farbe der Gumpdrops, die der Spielercharakter bereits in der Umgebung gefunden hat.

©2026 Roblox Corporation. Roblox, das Roblox-Logo und "Powering Imagination" gehören zu unseren eingetragenen und nicht eingetragenen Markenzeichen in den USA und anderen Ländern.