Arquitetura de IA para NPCs no Roblox: Árvores de Comportamento, FSM e Percepção

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

Ferramentas de Engenharia e Análise Cognitiva

Desenvolver inimigos inteligentes e confiáveis no Roblox exige uma arquitetura estruturada. Amontoar todo o comportamento em um único script com dezenas de estruturas if-else gera bloqueios na navegação e afunda o desempenho do servidor.

Títulos comerciais utilizam Máquinas de Estados Finitos (FSM) para os estados principais e Árvores de Comportamento para táticas dinâmicas. Este guia apresenta o padrão Blackboard, cones de visão por raycasting e escalonamento de ticks por LOD.

1. Máquinas de Estados Finitos (FSM) vs Árvores de Comportamento (BT)

Escolhendo a arquitetura correta conforme a complexidade:

2. Padrão Blackboard e Cones de Percepção Visual

Consciência espacial sem gargalos de CPU no servidor:

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. Nós de Árvore de Comportamento: Seletores e Sequências

Definição hierárquica de prioridades:

5. Otimização no Servidor: AI LOD e Object Pooling

Garantindo 60 FPS com mais de 100 inimigos simultâneos:

Frequently Asked Questions

Por que 30 NPCs causam lentidão no servidor?

Porque rodar raycasts e cálculos de rota a cada frame satura o processador. Aplique AI LOD para espaçar as chamadas.

Qual é a vantagem da Árvore de Comportamento sobre a FSM?

Permite criar planos alternativos e comportamentos reativos sem poluir o código com dezenas de transições cruzadas.

Como impedir que inimigos vejam através de paredes?

Disparando um raycast da cabeça do NPC até o peito do jogador para confirmar linha desobstruída.

A IA pode ser calculada no cliente?

Não, decisões de alvo e dano devem ficar no servidor para evitar trapaças e descompasso na partida.

Maximize sua Capacidade de Engenharia e Foco

Descubra seu perfil mental estratégico e teste seus reflexos cognitivos no DopaBrain.

Explorar Ferramentas no DopaBrain