Struktury danych to sposób, w jaki programiści przechowują i organizują całe zestawy danych. W Luau struktury danych tworzy się za pomocą tabel. Tabele mogą przechowywać dowolną liczbę wartości.
Ten artykuł dotyczy używania tablic, specyficznego typu tabel, do stworzenia mówiącej postaci.

Tabele
Tabele to typy danych, które mogą przechowywać wiele wartości. W przeciwieństwie do innych typów danych, które przechowują pojedynczą wartość, tabele nie mają ustalonego rozmiaru i mogą przechowywać mieszankę różnych typów wartości. Dzięki tabelom możesz przechowywać przedmioty w ekwipunku gracza lub stworzyć listę tysięcy nazw graczy.
Tablice
Istnieją różne typy tabel. Jednym z typów jest tablica, która przechowuje listy wartości w określonej kolejności. Aby stworzyć tablicę, utwórz zmienną i przypisz jej nawiasy klamrowe { }. Oddziel wartości wewnątrz nawiasów przecinkami, jak poniżej:
local myArray = {"item1", "item2", 10, workspace.Part, myVariable}
Stwórz mówiącą postać
Aby zbadać tablice, będziesz pracować z postacią, która nie jest kontrolowana przez gracza (NPC), która po kliknięciu wyświetli inny tekst dialogowy.
Ten projekt wykorzysta gotowy model NPC, który zawiera częściowy skrypt i detektor podpowiedzi, ale brakuje mu dialogu.
W Eksploratorze zaimportuj NPC, klikając prawym przyciskiem myszy na Workspace ⟩ Wstaw z pliku i wybierz pobrany plik.
Zapisz tablicę dialogową
Te kroki wykorzystują tablicę do przechowywania różnych fraz, które NPC ma powiedzieć, gdy gracze wchodzą z nim w interakcję.
W Eksploratorze przejdź do NPC ⟩ ProximityPrompt ⟩ ChatManager.
W ChatManager, w miejscu oznaczonym w skrypcie, stwórz pustą tablicę do przechowywania opcji dialogowych.
-- Cykl przez dialogi czatu, gdy używana jest podpowiedźlocal Chat = game:GetService("Chat")local prompt = script.Parentlocal npc = prompt.Parentlocal characterParts = npc.CharacterPartslocal head = characterParts.Head-- Dodaj tablicę tutajlocal dialogueArray = {}local function speak()local dialogue = "Mam jedną rzecz do powiedzenia!"Chat:Chat(head, dialogue)endprompt.Triggered:Connect(speak)Wewnątrz nawiasów {} nowo utworzonej tablicy wpisz co najmniej trzy ciągi dialogowe, oddzielone przecinkami.
local dialogueArray = {"Cześć!", "Czy się znamy?", "Do widzenia!"}
Użyj indeksów tablic
Każda wartość w tablicy ma przypisany numer indeksu. Indeksy są przypisywane wartościom w kolejności, w jakiej wartości są przechowywane. Pierwsza wartość znajduje się pod indeksem 1, druga pod indeksem 2, i tak dalej.
Niektóre języki programowania, takie jak Java, zaczynają indeksy od 0.
W nowo utworzonej tablicy "Cześć!" znajduje się pod indeksem 1, a "Do widzenia!" pod indeksem 3.
| Indeks | Wartość |
|---|---|
| 1 | Cześć! |
| 2 | Dziś jest świetny dzień! |
| 3 | Do widzenia! |
Użyj konkretnych wartości indeksów
Użyj wartości indeksów, aby przypisać konkretne fragmenty dialogu do NPC. Aby użyć wartości pod konkretnym indeksem, dodaj indeks w nawiasach bezpośrednio po nazwie tablicy, jak dialogueArray[1].
Zastąp domyślną wartość ciągu zmiennej dialogue indeksem 2.
local dialogueArray = {"Cześć!", "Czy się znamy?", "Do widzenia!"}local function speak()local dialogue = dialogueArray[2]Chat:Chat(head, dialogue)endPrzetestuj grę i kliknij NPC. Druga wartość tablicy powinna pojawić się w dymku czatu. Spróbuj zmienić kod, aby przetestować każdą wartość w tabeli.

Zmień linie dialogowe
Gdy gracz wchodzi w interakcję z NPC, NPC zawsze mówi tę samą linię. To nudne. Zamiast tego użyj zmiennej, aby zaktualizować, którą wartość indeksu użyć.
Za każdym razem, gdy gracz wchodzi w interakcję z NPC, zwiększ wartość zmiennej o 1, aby wyświetlić następną linię dialogu.
Aby śledzić bieżący indeks, dodaj nową zmienną o nazwie dialogueIndex. Ustaw zmienną na 1, aby rozpocząć od początku tablicy.
local dialogueArray = {"Cześć!", "Czy się znamy?", "Do widzenia!"}local dialogueIndex = 1W speak(), zastąp numer indeksu w dialogueArray[2] zmienną, którą właśnie stworzyłeś.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)endNa końcu funkcji dodaj 1 do dialogueIndex. Następnym razem, gdy speak() zostanie wywołane, dialog wyświetli następujący ciąg.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex += 1endPrzetestuj grę i kliknij NPC, aby zobaczyć każdy ciąg dialogowy z tablicy.
Zauważ, że w oknie Wyjścia pojawia się błąd, gdy skrypt osiąga koniec tablicy.
Naprawisz to w następnej sekcji, aby dialog zaczynał się od początku po wyświetleniu ostatniego ciągu.
Rozmiary tablic
Możesz użyć rozmiaru tablicy, aby wiedzieć, kiedy zresetować pożądany indeks do 1. Aby znaleźć rozmiar tablicy, wpisz #, bez spacji, przed nazwą tablicy.
Na przykład: #dialogueArray
Sprawdź rozmiar tablicy w porównaniu do bieżącej wartości zmiennej, aby wiedzieć, kiedy czas wrócić na początek.
Restartuj dialog
Użyj rozmiaru tablicy, aby sprawdzić, kiedy nadszedł czas, aby wrócić do pierwszego fragmentu dialogu.
Dodaj instrukcję if i sprawdź, czy dialogueIndex jest równy #dialogueArray, całkowitemu rozmiarowi tej tablicy. Jeśli tak, ustaw dialogueIndex na 1.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)if dialogueIndex == #dialogueArray thendialogueIndex = 1enddialogueIndex += 1endJeśli dialogueIndex nie jest na końcu, nadal powinno dodać 1 do dialogueIndex. Przenieś dialogueIndex += 1 pod instrukcję else.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1endGraj i potwierdź, że możesz przechodzić przez dialog i restartować go.
Podsumowanie
Struktury danych to sposób, w jaki zestawy danych są przechowywane. Luau używa tabel do tworzenia struktur danych. Tablice to typ tabeli, które mogą przechowywać uporządkowane listy informacji. Każda wartość w tablicy ma przypisany numer indeksu, zaczynając od indeksu 1.
Ten skrypt użył tablicy do stworzenia listy możliwych linii dialogowych dla postaci niegrywalnej (NPC).
-- Cykl przez dialogi czatu, gdy używana jest podpowiedź
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- Dodaj tablicę tutaj
local dialogueArray = {"Cześć!", "Czy się znamy?", "Do widzenia!"}
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)Wskazówki dotyczące rozwiązywania problemów
Jeśli postać nie przechodzi przez tablicę dialogów, spróbuj poniższych wskazówek dotyczących rozwiązywania problemów.
- Sprawdź instrukcję if, która ustawia dialogueIndex z powrotem na 1. W instrukcji else sprawdź, czy dialogueIndex ma dodane 1.
- Podczas uzyskiwania rozmiaru tablicy upewnij się, że nie ma spacji po # w #dialogueArray.
Opcjonalne wyzwania
Spróbuj jednego z poniższych opcjonalnych wyzwań.
- Zapisz skrypt, aby dialog NPC przebiegał wstecz przez tablicę. Indeks dialogu powinien zaczynać się od długości tablicy i odejmować za każdym razem zamiast dodawać.
- Zamiast pokazywać dialog w kolejności, spraw, aby NPC pokazywał losową linię dialogową za każdym razem, używając Random.new(). Przykładowy skrypt jest dołączony poniżej jako odniesienie.
local randomGenerator = Random.new()
-- Pokazuje nowy dialog za każdym razem, gdy NPC jest kliknięty
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end