Архитектура ИИ для NPC в Roblox: Деревья поведения, FSM и сенсорные системы

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

Инженерные и когнитивные аналитические тесты

Создание правдоподобных врагов в Roblox требует продуманной архитектуры. Сваливание всех действий в один гигантский скрипт с десятками if-else приводит к ступору навигации и падению тикрейта сервера.

В коммерческой разработке используют конечные автоматы (FSM) для глобальных состояний и деревья поведения (Behavior Trees) для боевых тактик. В этом руководстве рассмотрены базы данных Blackboard, конусы зрения на Raycast и система AI LOD.

1. Конечные автоматы (FSM) против деревьев поведения (BT)

Выбор шаблона в зависимости от сложности логики:

2. Паттерн Blackboard и сенсорное зрение

Пространственное восприятие без перегрузки процессора сервера:

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. Узлы деревьев поведения: селекторы и последовательности

Построение гибкой иерархии действий:

5. Оптимизация на сервере: AI LOD и пулинг объектов

Удержание 60 FPS при 100+ активных монстрах:

Frequently Asked Questions

Почему 30 NPC вызывают падение тикрейта сервера?

Непрерывный расчет траекторий и лучей на каждом кадре перегружает CPU. Применяйте AI LOD.

В чем преимущество деревьев поведения перед FSM?

Они позволяют легко добавлять новые варианты действий без перестройки всей паутины состояний.

Как исключить обнаружение сквозь стены?

Пускать луч от головы NPC к торсу игрока и проверять отсутствие физических преград.

Можно ли перенести логику ИИ на клиент?

Нет, решения и регистрация урона должны оставаться на сервере во избежание читов.

Развивайте инженерное мышление и фокус

Оцените свои аналитические способности и улучшите когнитивную продуктивность на DopaBrain.

Пройти когнитивные тесты на DopaBrain