Datenstrukturen sind die Art und Weise, wie Programmierer ganze Datensätze speichern und organisieren. In Luau werden Datenstrukturen mit Tabellen erstellt. Tabellen können beliebig viele Werte enthalten.
Dieser Artikel behandelt die Verwendung von Arrays, einem speziellen Tabellentyp, um einen sprechenden Charakter zu erstellen.

Tabellen
Tabellen sind Datentypen, die mehrere Werte halten können. Im Gegensatz zu anderen Datentypen, die einen einzelnen Wert speichern, haben Tabellen keine feste Größe und können eine Mischung aus verschiedenen Werttypen enthalten. Mit Tabellen können Sie Gegenstände im Inventar eines Spielers speichern oder eine Liste von Tausenden von Spielernamen erstellen.
Arrays
Es gibt verschiedene Arten von Tabellen. Eine Art ist ein Array, das Listen von Werten in einer bestimmten Reihenfolge speichert. Um ein Array zu erstellen, erstellen Sie eine Variable und weisen Sie ihr geschweifte Klammern { } zu. Trennen Sie die Werte innerhalb der Klammern mit Kommas, wie unten gezeigt:
local myArray = {"item1", "item2", 10, workspace.Part, myVariable}
Erstellen Sie einen sprechenden Charakter
Um Arrays zu erkunden, arbeiten Sie mit einem nicht spielbaren Charakter (NPC), der, wenn er angeklickt wird, eine andere Dialogzeile anzeigt.
Dieses Projekt verwendet ein vorgefertigtes NPC-Modell, das ein teilweise Skript und einen Prompt-Detektor enthält, aber keinen Dialog hat.
Importieren Sie den NPC im Explorer, indem Sie mit der rechten Maustaste auf Workspace ⟩ Insert From File klicken und die heruntergeladene Datei auswählen.
Programmieren Sie ein Dialog-Array
Diese Schritte verwenden ein Array, um verschiedene Phrasen zu speichern, die der NPC sagt, wenn Spieler mit ihm interagieren.
Gehen Sie im Explorer zu NPC ⟩ ProximityPrompt ⟩ ChatManager.
Erstellen Sie im ChatManager, wo im Skript markiert, ein leeres Array, um Dialogoptionen zu speichern.
-- Durchläuft den Chat-Dialog, wenn der Prompt verwendet wirdlocal Chat = game:GetService("Chat")local prompt = script.Parentlocal npc = prompt.Parentlocal characterParts = npc.CharacterPartslocal head = characterParts.Head-- Fügen Sie hier das Array hinzulocal dialogueArray = {}local function speak()local dialogue = "Ich habe nur eine Sache zu sagen!"Chat:Chat(head, dialogue)endprompt.Triggered:Connect(speak)Geben Sie innerhalb der Klammern {} des gerade erstellten Arrays mindestens drei Dialogzeilen ein, die durch Kommas getrennt sind.
local dialogueArray = {"Hallo!", "Kenne ich dich?", "Auf Wiedersehen!"}
Verwenden Sie Array-Indizes
Jeder Wert im Array wird einer Index-Nummer zugewiesen. Indizes werden den Werten in der Reihenfolge zugewiesen, in der die Werte gespeichert sind. Der erste Wert hat den Index 1, der zweite den Index 2 und so weiter.
Einige Programmiersprachen, wie Java, beginnen die Indizes bei 0.
Im gerade erstellten Array steht "Hallo!" an Index 1 und "Auf Wiedersehen!" an Index 3.
| Index | Wert |
|---|---|
| 1 | Hallo! |
| 2 | Heute ist ein großartiger Tag! |
| 3 | Auf Wiedersehen! |
Verwenden Sie spezifische Indexwerte
Verwenden Sie Indexwerte, um spezifische Dialogzeilen dem NPC zuzuweisen. Um einen Wert an einem bestimmten Index zu verwenden, fügen Sie den Index in Klammern direkt nach dem Namen des Arrays hinzu, wie dialogueArray[1].
Ersetzen Sie den Standardwert der dialogue-Variablen durch Index 2.
local dialogueArray = {"Hallo!", "Kenne ich dich?", "Auf Wiedersehen!"}local function speak()local dialogue = dialogueArray[2]Chat:Chat(head, dialogue)endTesten Sie das Spiel und klicken Sie auf den NPC. Der zweite Arraywert sollte in der Sprechblase erscheinen. Versuchen Sie, den Code zu ändern, um jeden Wert in der Tabelle zu testen.

Ändern Sie die Dialogzeilen
Wenn der Spieler mit dem NPC interagiert, sagt der NPC immer die gleiche Zeile. Das ist langweilig. Verwenden Sie stattdessen eine Variable, um zu aktualisieren, welchen Indexwert Sie verwenden möchten.
Jedes Mal, wenn ein Spieler mit dem NPC interagiert, erhöhen Sie den Variablenwert um 1, um die nächste Dialogzeile anzuzeigen.
Um den aktuellen Index zu verfolgen, fügen Sie eine neue Variable namens dialogueIndex hinzu. Setzen Sie die Variable auf 1, um am Anfang des Arrays zu beginnen.
local dialogueArray = {"Hallo!", "Kenne ich dich?", "Auf Wiedersehen!"}local dialogueIndex = 1Ersetzen Sie in speak() die Indexnummer in dialogueArray[2] durch die Variable, die Sie gerade erstellt haben.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)endFügen Sie am Ende der Funktion 1 zu dialogueIndex hinzu. Das nächste Mal, wenn speak() aufgerufen wird, wird der Dialog die nächste Zeichenfolge anzeigen.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex += 1endTesten Sie das Spiel und klicken Sie auf den NPC, um jede Dialogzeichenfolge aus dem Array zu sehen.
Beachten Sie, dass ein Fehler im Ausgabefenster angezeigt wird, sobald das Skript das Ende des Arrays erreicht.
Sie werden dies im nächsten Abschnitt beheben, damit der Dialog nach der letzten Zeichenfolge wieder von vorne beginnt.
Array-Größen
Sie können die Größe des Arrays verwenden, um zu wissen, wann Sie den gewünschten Index auf 1 zurücksetzen müssen. Finden Sie die Größe eines Arrays, indem Sie #, ohne Leerzeichen, vor den Namen eines Arrays schreiben.
Zum Beispiel: #dialogueArray
Überprüfen Sie die Größe des Arrays im Vergleich zum aktuellen Wert der Variablen, um zu wissen, wann es Zeit ist, wieder von vorne zu beginnen.
Dialog neu starten
Verwenden Sie die Array-Größe, um zu überprüfen, wann es Zeit ist, zum ersten Dialog zurückzukehren.
Fügen Sie eine if-Anweisung hinzu und überprüfen Sie, ob dialogueIndex gleich #dialogueArray, der Gesamtgröße dieses Arrays, ist. Wenn ja, setzen Sie dialogueIndex auf 1.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)if dialogueIndex == #dialogueArray thendialogueIndex = 1enddialogueIndex += 1endWenn dialogueIndex nicht am Ende ist, sollte es weiterhin 1 zu dialogueIndex hinzufügen. Verschieben Sie dialogueIndex += 1 unter eine else-Anweisung.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1endSpielen Sie und bestätigen Sie, dass Sie durch den Dialog blättern und ihn neu starten können.
Zusammenfassung
Datenstrukturen sind die Art und Weise, wie Datensätze gespeichert werden. Luau verwendet Tabellen zur Erstellung von Datenstrukturen. Arrays sind eine Art von Tabelle, die geordnete Listen von Informationen halten kann. Jeder Wert innerhalb des Arrays wird einer Indexnummer zugewiesen, beginnend mit Index 1.
Dieses Skript verwendete ein Array, um eine Liste möglicher Dialogzeilen für einen nicht spielbaren Charakter (NPC) zu erstellen.
-- Durchläuft den Chat-Dialog, wenn der Prompt verwendet wird
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- Fügen Sie hier das Array hinzu
local dialogueArray = {"Hallo!", "Kenne ich dich?", "Auf Wiedersehen!"}
local dialogueIndex = 1
local function speak()
local dialogue = dialogueArray[dialogueIndex]
Chat:Chat(head, dialogue)
dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1
end
prompt.Triggered:Connect(speak)Fehlersuche Tipps
Wenn der Charakter nicht durch das Array von Dialogen geht, versuchen Sie die folgenden Tipps zur Fehlersuche.
- Überprüfen Sie die if-Anweisung, dass dialogueIndex auf 1 zurückgesetzt wird. Überprüfen Sie in der else-Anweisung, dass dialogueIndex 1 hinzugefügt wird.
- Stellen Sie sicher, dass beim Abrufen der Größe des Arrays keine Leerzeichen nach dem # in #dialogueArray vorhanden sind.
Optionale Herausforderungen
Versuchen Sie eine der optionalen Herausforderungen unten.
- Programmieren Sie das Skript so, dass der Dialog des NPC rückwärts durch das Array geht. Der Dialogindex sollte bei der Länge des Arrays beginnen und jedes Mal subtrahiert werden, anstatt addiert zu werden.
- Anstatt den Dialog in der Reihenfolge anzuzeigen, lassen Sie den NPC jedes Mal eine zufällige Dialogzeile anzeigen, indem Sie Random.new() verwenden. Ein Beispielskript ist unten zur Referenz enthalten.
local randomGenerator = Random.new()
-- Zeigt einen neuen Dialog an, wann immer der NPC angeklickt wird
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end