พฤติกรรมของปัญญาประดิษฐ์ด้วยเครื่องจักรสถานะ
นำตรรกะปัญญาประดิษฐ์ของศัตรูที่อิง FSM ไปใช้งานทั้งหมดด้วยสคริปต์ Lua
พฤติกรรมของปัญญาประดิษฐ์ด้วยเครื่องจักรสถานะ เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Lua Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
เครื่องจักรสถานะจำกัดคืออะไร
เครื่องจักรสถานะจำกัด (FSM) กำหนดพฤติกรรมเป็นชุดของสถานะที่มีการเปลี่ยนสถานะระหว่างกัน โดยถูกกระตุ้นด้วยเงื่อนไขหรือเหตุการณ์
โครงสร้างตาราง FSM
แทน FSM ด้วยตารางที่มีสถานะปัจจุบัน ตารางสถานะ และ callback สำหรับเข้า ออก หรืออัปเดตในแต่ละสถานะ ซึ่งเป็นส่วนเสริม
local function newFSM(initialState)
return {
current = initialState,
states = {},
}
endการกำหนดสถานะ
แต่ละสถานะคือตารางที่มีฟังก์ชัน enter, update และ exit ซึ่งเป็นส่วนเสริม
local fsm = newFSM("idle")
fsm.states.idle = {
enter = function(self) print("Enter idle") end,
update = function(self, dt)
if self.enemy then self:transition("chase") end
end,
exit = function(self) print("Exit idle") end
}การเพิ่มสถานะไล่ล่า
สถานะไล่ล่าจะติดตามผู้เล่น และเปลี่ยนไปเป็นการโจมตีเมื่อเข้าใกล้มากพอ
fsm.states.chase = {
enter = function(self) print("Chasing!") end,
update = function(self, dt)
if self.distToPlayer < 2 then
self:transition("attack")
elseif not self.enemy then
self:transition("idle")
end
end
}ฟังก์ชันเปลี่ยนสถานะ
การเปลี่ยนสถานะจะเรียก exit ของสถานะปัจจุบัน เปลี่ยนสถานะ แล้วจึงเรียก enter ของสถานะใหม่
function fsm:transition(newState)
local cur = self.states[self.current]
if cur and cur.exit then cur:exit() end
self.current = newState
local next = self.states[newState]
if next and next.enter then next:enter() end
endการอัปเดต FSM
ในแต่ละจังหวะของเกม ให้เรียก fsm:update(dt) เพื่อเรียกใช้ตรรกะการอัปเดตของสถานะปัจจุบัน
function fsm:update(dt)
local state = self.states[self.current]
if state and state.update then
state:update(dt)
end
endเครื่องจักรสถานะแบบลำดับชั้น
สถานะสามารถมี FSM ซ้อนอยู่ภายในได้ สถานะหลักจัดการพฤติกรรมในภาพรวม เช่น การต่อสู้หรือการลาดตระเวน ส่วน FSM ย่อยจัดการรายละเอียดภายในสถานะหลักแต่ละสถานะ
FSM ที่ขับเคลื่อนด้วยข้อมูล
กำหนดการเปลี่ยนสถานะของ FSM เป็นตารางข้อมูลที่โหลดจากไฟล์การตั้งค่า วิธีนี้ช่วยให้นักออกแบบปรับแต่ง AI ได้โดยไม่ต้องแก้โค้ด
local transitions = {
idle = {seeEnemy = "chase"},
chase = {lostEnemy = "idle", nearEnemy = "attack"},
attack = {enemyDead = "idle"},
}เครื่องจักรสถานะแบบสแตก
สแตกสถานะช่วยให้สถานะชั่วคราว เช่น "stunned" ถูกวางไว้เหนือสถานะปัจจุบัน และกลับไปทำสถานะเดิมต่อเมื่อสถานะชั่วคราวเสร็จสิ้น
ตัวแทน AI หลายตัว
เอนทิตีศัตรูแต่ละตัวมีอินสแตนซ์ FSM ของตนเอง ดังนั้น AI ของแต่ละตัวจึงทำงานอย่างเป็นอิสระ วิธีนี้ทำได้ง่ายด้วยตารางและคลอสเชอร์ของ Lua
การแก้ไขข้อบกพร่องของ FSM
บันทึกการเปลี่ยนสถานะทั้งหมดระหว่างการพัฒนา ตารางติดตามจะเก็บ {from, to, time} ไว้สำหรับวิเคราะห์พฤติกรรม AI ย้อนหลัง
คำถามเกี่ยวกับ FSM
อะไรเป็นตัวกระตุ้นการเปลี่ยนสถานะใน FSM
ทบทวน: AI ด้วยเครื่องจักรสถานะ
FSM ของ Lua ใช้ตารางออบเจกต์สถานะ (enter/update/exit) พร้อมฟังก์ชันเปลี่ยนสถานะ โครงสร้างนี้แยกส่วนต่าง ๆ ของ AI ได้อย่างชัดเจน รองรับการออกแบบที่ขับเคลื่อนด้วยข้อมูล และขยายได้ตั้งแต่สมองศัตรูแบบง่ายไปจนถึงพฤติกรรมแบบลำดับชั้นที่ซับซ้อน
คำถามที่พบบ่อย
บทเรียน “พฤติกรรมของปัญญาประดิษฐ์ด้วยเครื่องจักรสถานะ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “พฤติกรรมของปัญญาประดิษฐ์ด้วยเครื่องจักรสถานะ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “พฤติกรรมของปัญญาประดิษฐ์ด้วยเครื่องจักรสถานะ”
นำตรรกะปัญญาประดิษฐ์ของศัตรูที่อิง FSM ไปใช้งานทั้งหมดด้วยสคริปต์ Lua คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “พฤติกรรมของปัญญาประดิษฐ์ด้วยเครื่องจักรสถานะ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม
ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ระบบเหตุการณ์ใน Lua
- การเขียนสคริปต์แบบใช้คอมโพเนนต์
- พฤติกรรมของปัญญาประดิษฐ์ด้วยเครื่องจักรสถานะ
- การกำหนดค่าและโหลดใหม่แบบขับเคลื่อนด้วยข้อมูล