Struktury danych to sposób, w jaki programiści przechowują i organizują całe zestawy danych.W Luau struktury danych są tworzone za pomocą tabel. Tabele mogą zawierać dowolną liczbę wartości.
Ten artykuł dotyczy używania matryc , specyficznego wpisywaćtabeli, do tworzenia mówiącej postaci.

Tabelki
Tabele są rodzajami danych, które mogą zawierać wiele wartości.W przeciwieństwie do innych typów danych, które przechowują pojedynczą wartość, tabele nie mają stałego rozmiaru i mogą zawierać miks różnych typów wartości.Dzięki tablicom możesz przechowywać przedmioty w ekwipunku gracza lub stworzyć listę tysięcy nazw graczy.
Matryce
Istnieją różne rodzaje tabel.Jeden typ to matryca , która przechowuje listy wartości w określonej kolejności.Aby utworzyć tablicę, utwórz zmienną i przypisz jej klamry krzywe { } .Oddzielne wartości wewnątrz nawiasów za pomocą przecinków tak jak poniżej:
local myArray = {"item1", "item2", 10, workspace.Part, myVariable}
Stwórz rozmawiającą postać
Aby zbadać matryce, będziesz pracować z niedostępną postacią (NPC), która, po kliknięciu, wyświetla inną linię dialogu.
Ten projekt wykorzysta gotowy model NPC, który zawiera częściowy skrypt i wykrywacz poleceń, ale brakuje dialogu.
W Explorer, importuj NPC, klikając prawym przyciskiem myszy na Przestrzeń roboczą > Wstaw z pliku i wybierz pobrany plik.
Zakoduj tablicę dialogów
Te kroki wykorzystują tablicę do przechowywania różnych fraz dla NPC, które powie, gdy gracze z nim interakują.
W Eksploratorze , przejdź do NPC > ProximityPrompt > ChatManager.
W ChatManager, gdzie oznaczono w skrypcie, utwórz pustą próżniową matrycę , aby przechować opcje dialogu.
-- Przejścia między dialogiem czatu, gdy wysłana jest prośbalocal Chat = game:GetService("Chat")local prompt = script.Parentlocal npc = prompt.Parentlocal characterParts = npc.CharacterPartslocal head = characterParts.Head-- Dodaj tutaj arraylocal dialogueArray = {}local function speak()local dialogue = "I've got one thing to say!"Chat:Chat(head, dialogue)endprompt.Triggered:Connect(speak)W nawiasach {} z właśnie utworzonej matrycy, wprowadź co najmniej trzy struny dialogu, oddzielone przecinkami.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
Użyj indeksów array
Każda wartość w arrayu otrzymuje numer index.Indeksy są przypisywane do wartości w kolejności, w której są przechowywane wartości.Pierwsza wartość jest na indeksie 1, druga na indeksie 2 itd.
Niektóre języki kodowania, takie jak Java, rozpoczynają indeksy na 0.
W właśnie utworzonej matrycy, "Hi" jest na indeksie 1, a "Goodbye!" jest na indeksie 3.
Indeks | Wartość |
---|---|
1 | Hi |
2 | Dzisiaj jest świetny dzień! |
3 | Do widzenia! |
Użyj określonych wartości indeksu
Użyj wartości indeksu, aby przypisać określone części dialogu do NPC.Aby użyć wartości w określonym indeksie, dodaj indeks w nawiasach bezpośrednio po nazwie matrycy, tak jak dialogueArray[1] .
Zastąp domyślną wartość ciągu zmiennej dialogue wartością indeksu 2.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}local function speak()local dialogue = dialogueArray[2]Chat:Chat(head, dialogue)endPrzetestuj i kliknij NPC. Druga wartość wiersza powinna pojawić się w bąbelku czatu. Spróbuj zmienić kod, aby przetestować każdą wartość w tabeli.
Zmień linie dialogowe
Kiedy gracz wchodzi w interakcję z NPC, NPC zawsze powie tę samą linię.To jest nudne.Zamiast tego użyj zmiennej, aby aktualizować wartość indeksu, którą należy użyć.
Zawsze, gdy gracz wchodzi w interakcję z NPC, zwiększ wartość zmiennej o 1, aby wyświetlić następną linię dialogu.
Aby śledzić obecny indeks, dodaj nową zmienną o nazwie dialogueIndex. Ustaw zmienną na 1, aby rozpocząć na początku matrycy.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}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 dole funkcji dodaj 1 do dialogueIndex. Następnym razem, gdy speak() zostanie wezwany, dialog wyświetli następną ciąg.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex += 1endPrzetestuj i kliknij NPC, aby zobaczyć każdą linijkę dialogu z listy.
Zauważ, że wystąpił błąd w oknie wyjścia , gdy skrypt dotrze do końca matrycy.
Naprawisz to w następnej sekcji, więc dialog zostanie ponownie uruchomiony od początku po wyświetleniu ostatniej ciąg.
Rozmiary matrycy
Możesz użyć rozmiaru matrycy, aby wiedzieć, kiedy należy zresetować pożądany indeks do 1.Znajdź rozmiar zbioru poprzez wpisanie # bez spacji przed nazwą zbioru.
Na przykład: #dialogueArray
Sprawdź rozmiar matrycy w porównaniu z obecną wartością zmiennej, aby wiedzieć, kiedy nadszedł czas, aby zacząć od początku.
Uruchom ponownie dialog
Użyj rozmiaru matrycy, aby sprawdzić, kiedy nadszedł czas, aby powrócić do pierwszego kawałka dialogu.
Dodaj oświadczenie if i sprawdź, czy dialogueIndex równa się #dialogueArray, ogólna wielkość tego obiektu. 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ńczyć, nadal powinno dodać 1 do dialogueIndex. Przesuń dialogueIndex += 1 pod wyrażeniem else.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1endZagraj i potwierdź, że możesz przejść przez dialog i ponownie go uruchomić.
Podsumowanie
Struktury danych są sposobem przechowywania zestawów danych.Luau używa tabel do tworzenia struktur danych.Tabele są rodzajem tabel, które mogą zawierać uporządkowane listy informacji.Każda wartość w obrębie array otrzymuje numer indeksu, począwszy od indeksu 1.
Ten skrypt użył tablicy, aby stworzyć listę możliwych linii dialogowych dla niedostępnej postaci (NPC).
Zakończony skrypt
-- Przejścia między dialogiem czatu, gdy wysłana jest prośba
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- Dodaj tutaj array
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
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 listę dialogów, spróbuj następujących wskazówek rozwiązywania problemów.
- Sprawdź, czy stwierdzenie if jest ustawione na 1, w przeciwnym razie sprawdź, czy dialogueIndex zostało dodane do niego 1. W oświadczeniu else sprawdź, czy dialogueIndex ma dodane 1 do siebie.
- Gdy uzyskujesz rozmiar matrycy, upewnij się, że nie ma spacji po # w #dialogueArray.
Opcjonalne wyzwania
Spróbuj jednego z opcjonalnych wyzwań poniżej.
- Skoduj skrypt, aby dialog NPC cofał się wstecz przez array.Indeks dialogu powinien zacząć się od array i odliczać za każdym razem zamiast dodawać.
- Zamiast pokazywać dialog w kolejności, pozwól, aby NPC wyświetlał losową linię dialogu za każdym razem, używając Random.new().Poniżej znajduje się przykładowy skrypt do odwołania
local randomGenerator = Random.new()
-- Pokazuje nowy dialog za każdym razem, gdy kliknięty jest NPC
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end