Les structures de données sont la façon dont les développeurs stockent et organisent des ensembles complets de données.Dans Luau, les structures de données sont créées avec des tables. Les tables peuvent contenir n'importe quel nombre de valeurs.
Cet article couvre l'utilisation de tableaux , d'un taperde table spécifique, pour créer un personnage parlant.

Tables
Les tables sont des types de données qui peuvent contenir plusieurs valeurs.Contrairement à d'autres types de données qui stockent une seule valeur, les tables n'ont pas de taille fixe et peuvent contenir un mélange de différents types de valeur.Avec des tables, vous pouvez stocker des articles dans l'inventaire d'un joueur ou créer une liste de milliers de noms de joueurs.
Tables d'arrêt
Il existe différents types de tables.Un type est un tableau , qui stocke des listes de valeurs dans un ordre spécifique.Pour créer un matrice, créez une variable et attribuez-la des crochets courbes { } .Séparez les valeurs dans les parenthèses avec des virgules comme ci-dessous :
local myArray = {"item1", "item2", 10, workspace.Part, myVariable}
Créer un personnage parlant
Pour explorer les tableaux, vous travaillerez avec un personnage non jouable (PNJ) qui, lorsqu'il est cliqué, montre une ligne de dialogue différente.
Ce projet utilisera un modèlisationNPC préfabriqué, qui comprend un script partiel et un détecteur de prompt, mais manque de dialogue.
Dans Explorer, importez le PNJ en cliquant avec le bouton droit sur Espace de travail > Insérer à partir du fichier et sélectionnez le fichier téléchargé.
Coder un ensemble de matrice
Ces étapes utilisent un tableau pour stocker différentes phrases pour le PNJ à dire lorsque les joueurs interagissent avec.
Dans l' explorateur , allez à NPC > ProximityPrompt > ChatManager.
Dans ChatManager, où il est marqué dans le script, créez un array vide pour stocker les options de dialogue.
-- Passage en revue du dialogue de chat lorsque la demande est utiliséelocal Chat = game:GetService("Chat")local prompt = script.Parentlocal npc = prompt.Parentlocal characterParts = npc.CharacterPartslocal head = characterParts.Head-- Ajouter une matrice icilocal dialogueArray = {}local function speak()local dialogue = "I've got one thing to say!"Chat:Chat(head, dialogue)endprompt.Triggered:Connect(speak)Dans les parenthèses {} de l'array vient de créer, saisissez au moins trois chaînes de dialogue, séparées par des virgules.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
Utiliser les index d'array
Chaque valeur dans l'array est attribuée un nombre index .Les index sont attribués aux valeurs dans l'ordre dans lequel les valeurs sont stockées.La première valeur est à l'index 1, la deuxième à l'index 2, et ainsi de suite.
Certains langages de codage, comme Java, commencent les index à 0.
Dans l'array vient d'être créé, "Hi" est à l'index 1, et "Goodbye!" est à l'index 3.
Indice | Valeur |
---|---|
1 | Hi |
2 | C'est une belle journée ! |
3 | Au revoir ! |
Utiliser des valeurs d'index spécifiques
Utilisez les valeurs d'index pour attribuer des morceaux de dialogue spécifiques au PNJ.Pour utiliser une valeur à un index spécifique, ajoutez l'index entre parenthèses directement après le nom de l'matrice, comme dialogueArray[1] .
Remplacez la valeur par défaut de la variable dialogue par la valeur d'index 2.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}local function speak()local dialogue = dialogueArray[2]Chat:Chat(head, dialogue)endTestez et cliquez sur le PNJ. La deuxième valeur de l'array devrait apparaître dans la bulle de chat. Essayez de modifier le code pour tester chaque valeur de la table.
Changer les lignes de dialogue
Lorsque le joueur interagit avec le NPC, le PNJ dira toujours la même ligne.C'est ennuyeux.Au lieu de cela, utilisez une variable pour mettre à jour la valeur d'index à utiliser.
Chaque fois qu'un joueur interagit avec le PNJ, augmentez la valeur de la variable de 1 pour afficher la ligne de dialogue suivante.
Pour suivre l'index actuel, ajoutez une nouvelle variable nommée dialogueIndex. Définissez la variable à 1 pour commencer au début de l'matrice.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}local dialogueIndex = 1Dans speak() , remplacez le numéro d'index dans dialogueArray[2] par la variable que vous venez de créer.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)endEn bas de la fonction, ajoutez 1 à dialogueIndex. La prochaine fois que speak() est appelé, le dialogue affichera la prochaine chaîne.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex += 1endTestez et cliquez sur le PNJ pour voir chaque chaîne de dialogue de l'matrice.
Remarquez qu'il y a une erreur dans la fenêtre de sortie une fois que le script atteint la fin de l'matrice.
Vous résoudrez cela dans la section suivante afin que le dialogue redémarre au début après avoir affiché la dernière chaîne.
Tailles d'array
Vous pouvez utiliser la taille de l'array pour savoir quand réinitialiser l'index désiré à 1.Trouvez la taille de l'array en tapant # , sans espaces, avant le nom d'un matrice.
Par exemple : #dialogueArray
Vérifiez la taille de l'matricecontre la valeur actuelle de la variable pour savoir quand il est temps de recommencer au début.
Redémarrer le dialogue
Utilisez la taille de l'array pour vérifier quand il est temps de revenir à la première pièce de dialogue.
Ajoutez une déclaration if et vérifiez si dialogueIndex égale #dialogueArray , la taille totale de cet matrice. Si oui, alors définissez dialogueIndex à 1.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)if dialogueIndex == #dialogueArray thendialogueIndex = 1enddialogueIndex += 1endSi dialogueIndex n'est pas à la terminer, il devrait toujours ajouter 1 à dialogueIndex . Déplacez dialogueIndex += 1 sous une autre déclaration else.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1endJouez et confirmez que vous pouvez parcourir et redémarrer le dialogue.
Sommaire
Les structures de données sont la façon dont des ensembles de données sont stockés.Luau utilise des tables pour créer des structures de données.Les tableaux sont un type de table qui peut contenir des listes ordonnées d'informations.Chaque valeur dans l'array est attribuée un numéro d'index, à commencer par l'index 1.
Ce script a utilisé un tableau pour créer une liste de lignes de dialogue possibles pour un personnage non jouable (PNJ).
Script script
-- Passage en revue du dialogue de chat lorsque la demande est utilisée
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- Ajouter une matrice ici
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)
Conseils de dépannage
Si le personnage ne passe pas à travers l'array de dialogue, essayez les conseils de dépannage suivants.
- Vérifiez la déclaration if que dialogueIndex est réinitialisée à 1. Dans la déclaration else, vérifiez que dialogueIndex a 1 ajouté à elle-même.
- Lors de l'obtention de la taille de l'matrice, assurez-vous qu'il n'y a pas d'espaces après le # dans #dialogueArray.
Défis optionnels
Essayez l'un des défis facultatifs ci-dessous.
- Codez le script pour que le dialogue du PNJ revienne en arrière à travers l'matrice.L'index de dialogue doit commencer à l'array et soustraire à chaque fois au lieu d'ajouter.
- Au lieu d'afficher le dialogue dans l'ordre, faites en sorte que le PNJ montre une ligne de dialogue aléatoire à chaque fois en utilisant Random.new() .Un script d'échantillon est inclus ci-dessous pour référence
local randomGenerator = Random.new()
-- Affiche un nouveau dialogue chaque fois que le PNJ est cliqué
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end