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.
Escolhendo a arquitetura correta conforme a complexidade:
Consciência espacial sem gargalos de CPU no servidor:
-- 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
Definição hierárquica de prioridades:
Garantindo 60 FPS com mais de 100 inimigos simultâneos:
Porque rodar raycasts e cálculos de rota a cada frame satura o processador. Aplique AI LOD para espaçar as chamadas.
Permite criar planos alternativos e comportamentos reativos sem poluir o código com dezenas de transições cruzadas.
Disparando um raycast da cabeça do NPC até o peito do jogador para confirmar linha desobstruída.
Não, decisões de alvo e dano devem ficar no servidor para evitar trapaças e descompasso na partida.
Descubra seu perfil mental estratégico e teste seus reflexos cognitivos no DopaBrain.
Explorar Ferramentas no DopaBrain