Arsitektur AI NPC Roblox: Behavior Trees, State Machines & Persepsi Spasial

By DopaBrain Roblox AI Engineering Team • Updated: September 2026 • Reading Time: 9 min

Alat Rekayasa & Analisis Kognitif

Menciptakan musuh yang pintar di Roblox memerlukan arsitektur keputusan yang terstruktur rapi. Menulis semua perilaku dalam satu skrip penuh kondisi if-else membuat musuh sering macet dan menyebabkan lag parah pada server.

Game komersial memadukan Finite State Machines (FSM) untuk status umum dan Behavior Trees untuk taktik tempur dinamis. Panduan ini membahas pola Blackboard, raycasting sudut pandang, dan pembagian beban tick melalui sistem LOD.

1. Finite State Machines (FSM) vs Behavior Trees (BT)

Menentukan pola arsitektur yang tepat:

2. Pola Blackboard & Penglihatan Sensori

Memberikan kesadaran ruang tanpa membebani prosesor server:

3. Production Implementation Architecture

ServerScriptService.NPCFramework.StateMachine
-- Modular Finite State Machine for Roblox NPC
local StateMachine = {}
StateMachine.__index = StateMachine

function StateMachine.new(npcInstance, states, initialState)
    local self = setmetatable({}, StateMachine)
    self.NPC = npcInstance
    self.States = states
    self.CurrentState = nil
    self.Blackboard = {
        Target = nil,
        LastSeenPos = nil,
        Health = 100,
        PatrolPoints = {}
    }
    
    self:ChangeState(initialState)
    return self
end

function StateMachine:ChangeState(newStateName)
    if self.CurrentState and self.States[self.CurrentState].Exit then
        self.States[self.CurrentState]:Exit(self.NPC, self.Blackboard)
    end
    
    self.CurrentState = newStateName
    if self.States[newStateName] and self.States[newStateName].Enter then
        self.States[newStateName]:Enter(self.NPC, self.Blackboard)
    end
end

function StateMachine:Update(dt)
    if self.CurrentState and self.States[self.CurrentState].Update then
        local nextState = self.States[self.CurrentState]:Update(self.NPC, self.Blackboard, dt)
        if nextState and nextState ~= self.CurrentState then
            self:ChangeState(nextState)
        end
    end
end

return StateMachine

4. Node Behavior Tree: Selector dan Sequence

Menyusun hierarki prioritas tindakan:

5. Skalabilitas Server: AI LOD & Object Pooling

Menjaga performa tetap 60 FPS meski ada lebih dari 100 musuh:

Frequently Asked Questions

Mengapa 30 NPC membuat server lag parah?

Karena raycast dan kalkulasi jalur yang berjalan setiap frame membebani CPU. Terapkan AI LOD untuk membagi beban.

Apa keunggulan Behavior Tree dibanding FSM?

BT memungkinkan penambahan taktik baru secara modular tanpa merombak diagram transisi yang rumit.

Bagaimana mencegah musuh melihat tembus dinding?

Gunakan raycast dari kepala NPC ke tubuh pemain untuk memastikan jalur pandang terbebas dari rintangan.

Bolehkah client mengontrol pergerakan AI?

Tidak, logika keputusan dan pemberian damage harus berada di server guna mencegah eksploitasi dan kecurangan.

Tingkatkan Kemampuan Arsitektur & Logika Sistem

Uji pola pikir teknis Anda dan optimalkan ketajaman konsentrasi di DopaBrain.

Mulai Tes di DopaBrain