Les structures de données sont la façon dont les développeurs stockent et organisent des ensembles de données entiers. Dans Lua, 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 , 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 aux 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 valeurs. Avec les tables, vous pouvez stocker des articles dans l'inventaire d'un joueur ou créer une liste de milliers de noms de joueur.
tableaux
Il existe différents types de tables. Un type est un tableau, qui stocke les listes de valeurs dans un ordre spécifique. Pour créer un matrice, créez une variable et attribuez-lui des crochets curly brackets { } . Séparez les valeurs dans les crochets 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é, affiche une autre ligne de dialogue.
Ce projet utilisera un modèlisationde NPC prédéfini, qui inclut un script partiel et un détecteur de提示, mais manque de dialogue.
Dans Explorer, importez le NPC en faisant un clic droit sur Espace de travail > Télécharger le fichier et sélectionnez le fichier téléchargé.
Codage d'un tableau de dialogue
Ces étapes utilisent un tableau pour stocker différentes phrases pour que le PNJ dise quand les joueurs interagissent avec lui.
Dans l' Explorateur, allez à NPC > ProximityPrompt > ChatManager.
Dans ChatManager, où marqué dans le script, créez un tableau vide pour stocker les options de dialogue.
-- Cycle through chat dialogue when prompt is usedlocal Chat = game:GetService("Chat")local prompt = script.Parentlocal npc = prompt.Parentlocal characterParts = npc.CharacterPartslocal head = characterParts.Head-- Ajouter un tableau 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'arrêt créé, saisissez au moins trois lignes de dialogue, séparées par des virgules.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
Utiliser les index de tableau
Chaque valeur dans le tableau est attribuée un nombre index . Les indexes sont attribués aux valeurs dans l'ordre dans lequel les valeurs sont stockées. Le premier valeur est à l'index 1, le deuxième à l'index 2 et ainsi de suite.
Certains langages de programmation, comme le Java, commencent les index à 0.
Dans l' array vient de créer, "Hi" est à l' index 1 et "Goodbye!" est à l' index 3.
Index | Valeur |
---|---|
1 | Salut |
2 | Aujourd'hui, c'est un jour merveilleux ! |
3 | Au revoir ! |
Utiliser les valeurs d'index spécifiques
Utilisez les valeurs d'index pour attribuer des pièces de dialogue spécifiques à l'PNJ. Pour utiliser une valeur à un index spécifique, ajoutez l'index en majuscules directement après le nom de l'matrice, comme dialogueArray[1] .
Remplacez la valeur de chaîne par défaut de la variable dialogue avec l'index 2.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}local function speak()local dialogue = dialogueArray[2]Chat:Chat(head, dialogue)endTestez le jeu et cliquez sur le PNJ. La deuxième valeur de l'arrêt devrait apparaître dans la bulle de chat. Essayez de modifier le code pour tester chacune des valeurs dans la table.
Changer les lignes de dialogue
Lorsque le joueur interagit avec le PNJ, le NPC dira toujours la même ligne. C'est ennuyeux. Au lieu de cela, utilisez une variable pour mettre à jour laquelle est la valeur d'index à utiliser.
Chaque fois qu'un joueur interagit avec le PNJ, augmentez la valeur de variable de 1 pour afficher la prochaine ligne de dialogue.
Pour suivre l'index actuel, ajoutez une nouvelle variable nommée dialogueIndex . Set the variable to 1 to start at the beginning of the matrice.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}local dialogueIndex = 1En speak() , remplacer le numéro d'index dans dialogueArray[2] avec la variable que vous venez de créer.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)endAu 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 le jeu et cliquez sur le PNJ pour voir chaque chaîne de dialogue de l'matrice.
Remarquez qu'il y a une erreur erreur dans la fenêtre de sortie une fois que le script atteint la fin de l'matrice.
Vous le ferez dans la prochaine section afin que le dialogue se redémarre du début après qu'il ait affiché la dernière chaîne.
Tailles d'阵
Vous pouvez utiliser la taille de l' array pour savoir quand réinitialiser l' index souhaité à 1. Trouvez la taille taille d'un tableau 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émarrage du dialogue
Utilisez la taille de l'arrêt pour vérifier quand il est temps de revenir à la première pièce de dialogue.
Ajoutez une if statement et vérifiez si dialogueIndex correspond à #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.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)if dialogueIndex == #dialogueArray thendialogueIndex = 1elsedialogueIndex += 1endendJouez et confirmez que vous pouvez cyclez à travers et redémarrer le dialogue.
Résumé
Les structures de données sont la façon dont les ensembles de données sont stockés. Lua utilise des tableaux 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 le tableau est attribuée un numéro d'index, commençant 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
-- Cycle through chat dialogue when prompt is used
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- Ajouter un tableau ici
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
local dialogueIndex = 1
local function speak()
local dialogue = dialogueArray[dialogueIndex]
Chat:Chat(head, dialogue)
if dialogueIndex == #dialogueArray then
dialogueIndex = 1
else
dialogueIndex += 1
end
end
prompt.Triggered:Connect(speak)
Conseils de débogage
Si le personnage ne passe pas à travers l' array de dialogue, essayez les astuces de débogage suivantes.
- Vérifiez si la déclaration if que dialogueIndex est réinitialisée à 1. Dans la déclaration else, vérifiez que dialogueIndex a 1 ajouté à lui-même.
- Lors de la récupération de la taille de l'matrice, assurez-vous qu'il n'y a pas d'espace après le # dans #dialogueArray .
Défis facultatifs
Essayez l'un des défis facultatifs ci-dessous.
- Codez le script pour que le dialogue du PNJ se déclenche à travers l' matrice. Le dialogueIndex doit commencer à l' array et soustraire à chaque fois au lieu d'ajouter.
- Au lieu de montrer le dialogue dans l'ordre, faites le NPC montrer une ligne de dialogue aléatoire à chaque fois en utilisant Random.new() . Un script d'exemple est inclus ci-dessous pour référencer
local randomGenerator = Random.new()
-- Affiche une nouvelle boîte de 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