โครงสร้างข้อมูล คือวิธีที่นักพัฒนาซอฟต์แวร์เก็บและจัดระเบียบชุดข้อมูลทั้งหมด ใน Luau โครงสร้างข้อมูลจะถูกสร้างขึ้นด้วยตาราง ตาราง สามารถเก็บค่าหมายเลขใดก็ได้
บทความนี้จะพูดถึงการใช้ อาร์เรย์ ซึ่งเป็นประเภทตารางเฉพาะ เพื่อสร้างตัวละครที่พูดคุยได้

ตาราง
ตาราง เป็นประเภทข้อมูลที่สามารถเก็บค่าหลายค่าได้ แตกต่างจากประเภทข้อมูลอื่น ๆ ที่เก็บค่าเดียว ตารางไม่มีขนาดที่แน่นอนและสามารถเก็บค่าประเภทต่าง ๆ ได้ ด้วยตาราง คุณสามารถเก็บรายการในคลังของผู้เล่นหรือสร้างรายชื่อผู้เล่นหลายพันคน
อาร์เรย์
มีตารางหลายประเภท หนึ่งในประเภทคือ อาร์เรย์ ซึ่งเก็บรายการของค่าในลำดับที่เฉพาะเจาะจง เพื่อสร้างอาร์เรย์ ให้สร้างตัวแปรและกำหนดให้มันเป็นวงเล็บปีกกา { } แยกค่าภายในวงเล็บด้วยเครื่องหมายจุลภาคดังนี้:
local myArray = {"item1", "item2", 10, workspace.Part, myVariable}
สร้างตัวละครที่พูดคุยได้
เพื่อสำรวจอาร์เรย์ คุณจะทำงานกับตัวละครที่ไม่สามารถเล่นได้ (NPC) ซึ่งเมื่อคลิกจะมีการแสดงบรรทัดบทสนทนาที่แตกต่างกัน
โครงการนี้จะใช้โมเดล NPC ที่สร้างไว้ล่วงหน้า ซึ่งรวมถึงสคริปต์บางส่วนและ Prompt Detector แต่ไม่มีบทสนทนา
ใน Explorer ให้นำเข้า NPC โดยคลิกขวาที่ Workspace ⟩ Insert From File และเลือกไฟล์ที่ดาวน์โหลดมา
เขียนอาร์เรย์บทสนทนา
ขั้นตอนเหล่านี้ใช้เพื่อเก็บวลีต่าง ๆ สำหรับ NPC ที่จะพูดเมื่อผู้เล่นมีปฏิสัมพันธ์กับมัน
ใน Explorer ไปที่ NPC ⟩ ProximityPrompt ⟩ ChatManager
ใน ChatManager ที่ทำเครื่องหมายในสคริปต์ สร้าง อาร์เรย์ว่าง เพื่อเก็บตัวเลือกบทสนทนา
-- หมุนเวียนผ่านบทสนทนาเมื่อมีการใช้ promptlocal Chat = game:GetService("Chat")local prompt = script.Parentlocal npc = prompt.Parentlocal characterParts = npc.CharacterPartslocal head = characterParts.Head-- เพิ่มอาร์เรย์ที่นี่local dialogueArray = {}local function speak()local dialogue = "ฉันมีสิ่งหนึ่งที่จะพูด!"Chat:Chat(head, dialogue)endprompt.Triggered:Connect(speak)ภายในวงเล็บ {} ของอาร์เรย์ที่เพิ่งสร้างขึ้น ให้พิมพ์อย่างน้อยสามสตริงของบทสนทนา แยกด้วยเครื่องหมายจุลภาค
local dialogueArray = {"สวัสดี!", "ฉันรู้จักคุณไหม?", "ลาก่อน!"}
ใช้ดัชนีอาร์เรย์
แต่ละค่าภายในอาร์เรย์จะถูกกำหนดหมายเลข ดัชนี ดัชนีจะถูกกำหนดให้กับค่าในลำดับที่ค่าถูกเก็บไว้ ค่าตัวแรกอยู่ที่ดัชนี 1 ค่าตัวที่สองอยู่ที่ดัชนี 2 และต่อไปเรื่อย ๆ
บางภาษาเขียนโปรแกรม เช่น Java เริ่มดัชนีที่ 0
ในอาร์เรย์ที่เพิ่งสร้างขึ้น "สวัสดี" อยู่ที่ดัชนี 1 และ "ลาก่อน!" อยู่ที่ดัชนี 3
| ดัชนี | ค่า |
|---|---|
| 1 | สวัสดี |
| 2 | วันนี้เป็นวันที่ยอดเยี่ยม! |
| 3 | ลาก่อน! |
ใช้ค่าดัชนีเฉพาะ
ใช้ค่าดัชนีเพื่อกำหนดบทสนทนาที่เฉพาะเจาะจงให้กับ NPC เพื่อใช้ค่าที่ดัชนีเฉพาะ ให้เพิ่มดัชนีในวงเล็บโดยตรงหลังจากชื่ออาร์เรย์ เช่น dialogueArray[1]
แทนที่ค่าดีฟอลต์ของตัวแปร dialogue ด้วยดัชนี 2
local dialogueArray = {"สวัสดี!", "ฉันรู้จักคุณไหม?", "ลาก่อน!"}local function speak()local dialogue = dialogueArray[2]Chat:Chat(head, dialogue)endทดสอบการเล่นและคลิกที่ NPC ค่าที่สองในอาร์เรย์ควรปรากฏในฟองสบู่แชท ลองเปลี่ยนโค้ดเพื่อทดสอบค่าทุกค่าในตาราง

เปลี่ยนบรรทัดบทสนทนา
เมื่อผู้เล่นมีปฏิสัมพันธ์กับ NPC NPC จะพูดบรรทัดเดียวกันเสมอ นั่นน่าเบื่อ แทนที่จะใช้ตัวแปรเพื่ออัปเดตค่าดัชนีที่จะใช้
เมื่อใดก็ตามที่ผู้เล่นมีปฏิสัมพันธ์กับ NPC ให้เพิ่มค่าตัวแปร 1 เพื่อแสดงบรรทัดบทสนทนาถัดไป
เพื่อเก็บติดตามดัชนีปัจจุบัน ให้เพิ่มตัวแปรใหม่ชื่อ dialogueIndex ตั้งค่าตัวแปรเป็น 1 เพื่อเริ่มต้นที่จุดเริ่มต้นของอาร์เรย์
local dialogueArray = {"สวัสดี!", "ฉันรู้จักคุณไหม?", "ลาก่อน!"}local dialogueIndex = 1ใน speak() แทนที่ หมายเลขดัชนีใน dialogueArray[2] ด้วยตัวแปรที่คุณเพิ่งสร้างขึ้น
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)endที่ด้านล่างของฟังก์ชัน ให้เพิ่ม 1 ไปยัง dialogueIndex ครั้งถัดไปที่เรียก speak() บทสนทนาจะแสดงสตริงถัดไป
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex += 1endทดสอบการเล่นและคลิกที่ NPC เพื่อดูแต่ละสตริงบทสนทนาจากอาร์เรย์
สังเกตว่ามี ข้อผิดพลาด ในหน้าต่าง Output เมื่อสคริปต์ถึงจุดสิ้นสุดของอาร์เรย์
คุณจะแก้ไขสิ่งนี้ในส่วนถัดไปเพื่อให้บทสนทนากลับมาเริ่มต้นจากจุดเริ่มต้นหลังจากแสดงสตริงสุดท้าย
ขนาดอาร์เรย์
คุณสามารถใช้ขนาดของอาร์เรย์เพื่อทราบว่าเมื่อใดควรรีเซ็ตดัชนีที่ต้องการเป็น 1 ค้นหาขนาดของอาร์เรย์โดยการพิมพ์ # โดยไม่มีช่องว่างก่อนชื่ออาร์เรย์
ตัวอย่างเช่น: #dialogueArray
ตรวจสอบขนาดของอาร์เรย์กับค่าปัจจุบันของตัวแปรเพื่อทราบว่าเมื่อใดถึงเวลาที่จะเริ่มต้นกลับที่จุดเริ่มต้น
เริ่มต้นบทสนทนาใหม่
ใช้ขนาดอาร์เรย์เพื่อตรวจสอบว่าเมื่อใดถึงเวลาที่จะหมุนกลับไปยังบทสนทนาชิ้นแรก
เพิ่ม if statement และตรวจสอบว่า dialogueIndex เท่ากับ #dialogueArray ขนาดรวมของอาร์เรย์นี้ หากใช่ ให้ตั้งค่า dialogueIndex เป็น 1
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)if dialogueIndex == #dialogueArray thendialogueIndex = 1enddialogueIndex += 1endหาก dialogueIndex ไม่อยู่ที่จุดสิ้นสุด มันควรยังคงเพิ่ม 1 ไปยัง dialogueIndex ย้าย dialogueIndex += 1 ไปใต้ else statement
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1endเล่นและยืนยันว่าคุณสามารถหมุนเวียนและเริ่มต้นบทสนทนาใหม่ได้
สรุป
โครงสร้างข้อมูลคือวิธีการเก็บชุดข้อมูล Luau ใช้ตารางในการสร้างโครงสร้างข้อมูล อาร์เรย์เป็นประเภทหนึ่งของตารางที่สามารถเก็บรายการข้อมูลที่มีลำดับ ค่าทุกค่าภายในอาร์เรย์จะถูกกำหนดหมายเลขดัชนี โดยเริ่มจากดัชนี 1
สคริปต์นี้ใช้เพื่อสร้างรายการบรรทัดบทสนทนาที่เป็นไปได้สำหรับตัวละครที่ไม่สามารถเล่นได้ (NPC)
-- หมุนเวียนผ่านบทสนทนาเมื่อมีการใช้ prompt
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- เพิ่มอาร์เรย์ที่นี่
local dialogueArray = {"สวัสดี!", "ฉันรู้จักคุณไหม?", "ลาก่อน!"}
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)เคล็ดลับการแก้ไขปัญหา
หากตัวละครไม่ผ่านอาร์เรย์ของบทสนทนา ให้ลองเคล็ดลับการแก้ไขปัญหาดังต่อไปนี้
- ตรวจสอบ if statement ว่าตั้งค่า dialogueIndex กลับเป็น 1 หรือไม่ ใน else statement ให้ตรวจสอบว่า dialogueIndex มีการเพิ่ม 1 ให้กับตัวเองหรือไม่
- เมื่อได้รับขนาดของอาร์เรย์ ให้แน่ใจว่าไม่มีช่องว่างหลัง # ใน #dialogueArray
ความท้าทายเพิ่มเติม
ลองทำความท้าทายเพิ่มเติมด้านล่างนี้
- เขียนสคริปต์เพื่อให้บทสนทนาของ NPC หมุนย้อนกลับผ่านอาร์เรย์ ดัชนีบทสนทนาควรเริ่มที่ความยาวของอาร์เรย์และลบออกทุกครั้งแทนที่จะเพิ่ม
- แทนที่จะแสดงบทสนทนาในลำดับ ให้ NPC แสดงบรรทัดบทสนทนาที่สุ่มทุกครั้งโดยใช้ Random.new() สคริปต์ตัวอย่างรวมอยู่ด้านล่างเพื่ออ้างอิง
local randomGenerator = Random.new()
-- แสดงบทสนทนาใหม่เมื่อ NPC ถูกคลิก
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end