Wprowadzenie do tablic

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

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.

  1. Pobierz szablon NPC.

  2. W Eksploratorze zaimportuj NPC, klikając prawym przyciskiem myszy na WorkspaceWstaw 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ę.

  1. W Eksploratorze przejdź do NPCProximityPromptChatManager.

  2. 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.Parent
    local npc = prompt.Parent
    local characterParts = npc.CharacterParts
    local head = characterParts.Head
    -- Dodaj tablicę tutaj
    local dialogueArray = {}
    local function speak()
    local dialogue = "Mam jedną rzecz do powiedzenia!"
    Chat:Chat(head, dialogue)
    end
    prompt.Triggered:Connect(speak)
  3. 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.

IndeksWartość
1Cześć!
2Dziś jest świetny dzień!
3Do 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].

  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)
    end
  2. Przetestuj 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.

  1. 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 = 1
  2. W 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)
    end
  3. Na 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 += 1
    end
  4. Przetestuj 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.

  1. 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 then
    dialogueIndex = 1
    end
    dialogueIndex += 1
    end
  2. Jeś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 + 1
    end
  3. Graj 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).

Zakończony skrypt
-- 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
©2026 Roblox Corporation. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.