Datenstrukturen sind, wie Programmierer gesamte Datensätze speichern und organisieren. In Luau werden Datenstrukturen mit Tabellen erstellt. Tabellen können eine beliebige Anzahl von Werten enthalten.
In diesem Artikel geht es darum, Arrays, einen speziellen Tabellentyp, zu verwenden, um einen sprechenden Charakter zu erstellen.

Tabellen
Tabellen sind Datentypen, die mehrere Werte enthalten 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 aufnehmen. Mit Tabellen können Sie Gegenstände im Inventar eines Spielers speichern oder eine Liste von Tausenden von Spielernamen erstellen.
Arrays
Es gibt verschiedene Typen von Tabellen. Ein Typ 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:
local myArray = {"item1", "item2", 10, workspace.Part, myVariable}
Erstellen Sie einen sprechenden Charakter
Um Arrays zu erkunden, arbeiten Sie mit einem Nicht-Spieler-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-Detector enthält, aber keinen Dialog.
Importieren Sie im Explorer das NPC, indem Sie mit der rechten Maustaste auf Workspace ⟩ Aus Datei einfügen 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 in ChatManager, wo im Skript markiert, ein leeres Array, um Dialogoptionen zu speichern.
-- Zyklisch durch den Chatdialog, wenn das 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 Dialogstrings ein, die durch Kommas getrennt sind.
local dialogueArray = {"Hallo!", "Kenne ich dich?", "Auf Wiedersehen!"}
Verwenden Sie Array-Indizes
Jeder Wert im Array wird mit 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 Indizes bei 0.
Im gerade erstellten Array hat "Hallo!" den Index 1 und "Auf Wiedersehen!" den 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 Dialogteile dem NPC zuzuweisen. Um einen Wert an einem bestimmten Index zu verwenden, fügen Sie den Index in Klammern direkt hinter dem Namen des Arrays hinzu, wie dialogueArray[1].
Ersetzen Sie den Standard-Stringwert der Variablen dialogue 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 das NPC. Der zweite Arraywert sollte in der Sprechblase erscheinen. Versuchen Sie, den Code zu ändern, um jeden Wert im Array auszutesten.

Ändern Sie die Dialogzeilen
Wenn der Spieler mit dem NPC interagiert, sagt der NPC immer dieselbe Zeile. Das ist langweilig. Stattdessen verwenden Sie eine Variable, um festzulegen, welcher Indexwert verwendet werden soll.
Jedes Mal, wenn ein Spieler mit dem NPC interagiert, erhöhen Sie den Variablenwert um 1, um die nächste Dialogzeile anzuzeigen.
Fügen Sie zur Verfolgung des aktuellen Indexes 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 = 1In speak() ersetzen Sie die Indexnummer in dialogueArray[2] durch die von Ihnen gerade erstellte Variable.
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 das NPC, um jede Dialogzeichenfolge aus dem Array zu sehen.
Beachten Sie, dass ein Fehler im Ausgabefenster angezeigt wird, wenn das Skript das Ende des Arrays erreicht.
Sie werden dies im nächsten Abschnitt beheben, sodass der Dialog nach der Anzeige der letzten Zeichenfolge 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 sollten. Finden Sie die Größe eines Arrays, indem Sie #, ohne Leerzeichen, vor den Namen des Arrays schreiben.
Beispiel: #dialogueArray
Überprüfen Sie die Größe des Arrays mit dem aktuellen Wert der Variablen, um zu wissen, wann es Zeit ist, 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 dennoch 1 zu dialogueIndex hinzugefügt werden. 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 den Dialog durchlaufen und neu starten können.
Zusammenfassung
Datenstrukturen sind, wie Datensätze gespeichert werden. Luau verwendet Tabellen zur Erstellung von Datenstrukturen. Arrays sind eine Art von Tabelle, die geordnete Listen von Informationen speichern kann. Jeder Wert im Array erhält eine Indexnummer, beginnend mit Index 1.
Dieses Skript verwendete ein Array, um eine Liste möglicher Dialogzeilen für einen Nicht-Spieler-Charakter (NPC) zu erstellen.
Abgeschlossenes Skript
-- Zyklisch durch den Chatdialog, wenn das 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)
Fehlerbehebungstipps
Wenn der Charakter nicht durch das Array von Dialogen wechselt, versuchen Sie die folgenden Fehlerbehebungstipps.
- Ü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 es keine Leerzeichen nach dem # in #dialogueArray gibt, wenn Sie die Größe des Arrays abrufen.
Optionale Herausforderungen
Versuchen Sie eine der folgenden optionalen Herausforderungen.
- Programmieren Sie das Skript so, dass der Dialog des NPC rückwärts durch das Array geht. Der Dialogindex sollte beim Array-Längen beginnen und jedes Mal subtrahiert werden, anstatt addiert zu werden.
- Lassen Sie anstelle der Anzeige von Dialogen in der Reihenfolge den NPC jedes Mal eine zufällige Dialogzeile anzeigen, indem Sie Random.new() verwenden. Ein Beispielskript ist unten enthalten, um sich darauf zu beziehen.
local randomGenerator = Random.new()
-- Zeigt einen neuen Dialog, wann immer das NPC angeklickt wird
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end