0Pricing
Lua Academy · บทเรียน

พฤติกรรมของปัญญาประดิษฐ์ด้วยเครื่องจักรสถานะ

นำตรรกะปัญญาประดิษฐ์ของศัตรูที่อิง 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ระบบเหตุการณ์ใน Lua
  2. การเขียนสคริปต์แบบใช้คอมโพเนนต์
  3. พฤติกรรมของปัญญาประดิษฐ์ด้วยเครื่องจักรสถานะ
  4. การกำหนดค่าและโหลดใหม่แบบขับเคลื่อนด้วยข้อมูล
← กลับไปที่ Lua Academy