Le strutture di dati sono il modo in cui i programmatori memorizzano e organizzano interi insiemi di dati.In Luau, le strutture di dati vengono create con tabelle. Tabelle può contenere qualsiasi numero di valori.
Questo articolo tratta l'uso di array , un inserisci / scrividi tabella specifico, per creare un personaggio parlante.

Tavoli
Tabelle sono tipi di dati che possono contenere più valori.A differenza di altri tipi di dati che memorizzano un singolo valore, le tabelle non hanno una dimensione fissa e possono contenere un mix di diversi tipi di valore.Con le tabelle, puoi archiviare oggetti nell'inventario di un Giocatoreo creare un elenco di migliaia di nomi di giocatori.
Array
Esistono diversi tipi di tabelle.Un tipo è un array , che memorizza liste di valori in un ordine specifico.Per creare un vettore, crea una variabile e assegnale parentesi curly { } .Separa i valori all'interno dei parentesi con virgole come sotto:
local myArray = {"item1", "item2", 10, workspace.Part, myVariable}
Crea un personaggio parlante
Per esplorare gli array, lavorerai con un personaggio non giocabile (NPC) che, quando viene cliccato, mostra una diversa linea di dialogo.
Questo progetto utilizzerà un modello NPC pre-fatto, che include uno script parziale e un rilevatore di prompt ma manca il dialogo.
In Explorer, importa il NPC facendo clic con il pulsante destro del mouse su Spazio di lavoro > Inserisci dal file e seleziona il file scaricato.
Codifica un vettoredi dialogo
Questi passaggi utilizzano un array per memorizzare diverse frasi per l'NPC da dire quando i giocatori interagiscono con esso.
Nell' Explorer , vai a NPC > ProximityPrompt > ChatManager.
In ChatManager, dove è stato marcato nel script, crea un array vuoto per archiviare le opzioni di dialogo.
-- Cicli attraverso il dialogo della chat quando viene utilizzata la richiestalocal Chat = game:GetService("Chat")local prompt = script.Parentlocal npc = prompt.Parentlocal characterParts = npc.CharacterPartslocal head = characterParts.Head-- Aggiungi array quilocal dialogueArray = {}local function speak()local dialogue = "I've got one thing to say!"Chat:Chat(head, dialogue)endprompt.Triggered:Connect(speak)Entro i parentesi {} dell'array appena creato, digita almeno tre stringhe di dialogo, separate da virgole.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
Usa gli indici di array
Ogni valore nell'array viene assegnato un numero index .Gli indici vengono assegnati ai valori nell'ordine in cui i valori vengono memorizzati.Il primo valore è all'indice 1, il secondo all'indice 2, e così via.
Alcune lingue di programmazione, come Java, iniziano gli indici a 0.
Nell'array appena creato, "Hi" è all'indice 1 e "Goodbye!" è all'indice 3.
Indice | Valore |
---|---|
1 | Hi |
2 | Oggi è una grande giornata! |
3 | Ciao ciao! |
Usa valori di indice specifici
Usa i valori di indice per assegnare pezzi specifici di dialogo al NPC.Per utilizzare un valore in un indice specifico, aggiungi l'indice tra parentesi subito dopo il nome dell'vettore, come dialogueArray[1] .
Sostituisci il valore della stringa predefinita della variabile dialogue con l'indice 2.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}local function speak()local dialogue = dialogueArray[2]Chat:Chat(head, dialogue)endPlaytest e clicca il NPC. Il secondo valore dell'array dovrebbe apparire nella bolla di chat. Prova a modificare il codice per testare ciascun valore nella tabella.
Cambia le linee di dialogo
Quando il giocatore interagisce con il PNG, il NPC dirà sempre la stessa linea.Questo è noioso.Invece, usa una variabile per aggiornare quale valore di indice utilizzare.
Ogni volta che un giocatore interagisce con il NPC, aumenta il valore variabile di 1 per visualizzare la seguente linea di dialogo.
Per tenere traccia dell'indice attuale, aggiungi una nuova variabile chiamata dialogueIndex . Imposta la variabile a 1 per iniziare all'inizio dell'vettore.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}local dialogueIndex = 1In speak() , sostituisci il numero dell'indice in dialogueArray[2] con la variabile che hai appena creato.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)endNella parte inferiore della funzione, aggiungi 1 a dialogueIndex . La prossima volta che viene chiamata speak() , il dialogo mostrerà la prossima Stringa.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex += 1endProva e clicca l'NPC per vedere ogni stringa di dialogo dall'vettore.
Nota che c'è un errore nell'area di output una volta che lo script raggiunge la fine dell'vettore.
Risolverai questo nella sezione successiva in modo che il dialogo si riavvii dall'inizio dopo aver mostrato l'ultima Stringa.
Dimensione degli array
Puoi usare la dimensione dell'array per sapere quando ripristinare l'indice desiderato a 1.Trova la dimensione dell'array digitando # , senza spazi, prima del nome di un vettore.
Ad esempio: #dialogueArray
Verifica la dimensione dell'vettorerispetto al valore attuale della variabile per sapere quando è il momento di tornare all'inizio.
Riavvia il dialogo
Usa la dimensione dell'array per controllare quando è il momento di tornare alla prima parte del dialogo.
Aggiungi una dichiarazione if e controlla se dialogueIndex è uguale a #dialogueArray , la dimensione totale di questo vettore. Se è così, imposta dialogueIndex a 1.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)if dialogueIndex == #dialogueArray thendialogueIndex = 1enddialogueIndex += 1endSe dialogueIndex non è alla Terminare, dovrebbe comunque aggiungere 1 a dialogueIndex . Sposta dialogueIndex += 1 sotto una dichiarazione else.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1endGioca e conferma di poter passare attraverso e riavviare il dialogo.
Sommariamente
Le strutture dei dati sono come vengono memorizzati insiemi di dati.Luau utilizza tabelle per creare strutture di dati.Gli array sono un tipo di tabella che può contenere elenchi ordinati di informazioni.Ogni valore all'interno dell'array viene assegnato un numero di indice, a partire dall'indice 1.
Questo script ha utilizzato un array per creare un elenco di possibili linee di dialogo per un Personaggio Non Giocabile (NPC).
scriptcompletato
-- Cicli attraverso il dialogo della chat quando viene utilizzata la richiesta
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- Aggiungi array qui
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)
Suggerimenti per la risoluzione dei problemi
Se il personaggio non passa attraverso l'array di dialogo, prova i seguenti suggerimenti di soluzione dei problemi.
- Controlla la dichiarazione if che dialogueIndex viene ripristinata a 1. Nella dichiarazione else, controlla che dialogueIndex abbia 1 aggiunto a sé stesso.
- Quando si ottiene la dimensione dell'vettore, assicurati che non ci siano spazi dopo il # in #dialogueArray .
Sfide opzionali
Prova una delle sfide opzionali qui sotto.
- Codifica lo script in modo che il dialogo del NPC vada all'indietro attraverso l'vettore.L'indice del dialogo dovrebbe iniziare dall'array e sottrarre ogni volta invece di aggiungere.
- Invece di mostrare il dialogo in ordine, fai in modo che l'NPC mostri una linea di dialogo casuale ogni volta usando Random.new() .Un script di esempio è incluso qui sotto per fare riferimento
local randomGenerator = Random.new()
-- Mostra un nuovo dialogo ogni volta che viene cliccato l'NPC
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end