โครงสร้างข้อมูล เป็นวิธีที่นักเขียนโค้ดจัดเก็บและจัดระเบียบชุดข้อมูลทั้งหมด ใน 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 ที่ทำเครื่องหมายในสคริปต์ให้สร้าง อาเรย์ว่าง เพื่อจัดเก็บตัวเลือกบทสนทนา
-- หมุนเวียนบทสนทนาเมื่อการแจ้งเตือนถูกใช้local 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 และตรวจสอบว่า 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
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1endเล่นและยืนยันว่าคุณสามารถหมุนไปมาระหว่างบทสนทนาได้
สรุป
โครงสร้างข้อมูลคือวิธีการจัดเก็บชุดข้อมูล Luau ใช้ตารางเพื่อสร้างโครงสร้างข้อมูล อาเรย์เป็นประเภทหนึ่งของตารางที่สามารถถือรายการข้อมูลที่เรียงลำดับ ค่าแต่ละค่าภายในอาเรย์จะถูกกำหนดหมายเลขดัชนีเริ่มต้นด้วยดัชนี 1
สคริปต์นี้ใช้ประโยชน์จากอาเรย์เพื่อสร้างรายการบรรทัดบทสนทนาที่เป็นไปได้สำหรับตัวละครที่ไม่สามารถเล่นได้ (NPC)
สคริปต์ที่เสร็จสมบูรณ์
-- หมุนเวียนบทสนทนาเมื่อการแจ้งเตือนถูกใช้
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 ที่กำหนดให้ dialogueIndex กลับไปที่ 1 ในคำสั่ง else ตรวจสอบว่า 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