Architecture IA des PNJ sur Roblox : Arbres de Comportement, FSM et Perception Spatiale

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

Outils d'Ingénierie et d'Analyse Cognitive

Concevoir des ennemis captivants et crédibles dans Roblox requiert une architecture décisionnelle structurée. Entasser tous les comportements dans un script géant rempli de conditions imbriquées mène inévitablement à des bugs de trajectoire et de lourds ralentissements serveur.

Les studios professionnels s'appuient sur deux approches complémentaires : les machines à états finis (FSM) pour la gestion macroscopique et les arbres de comportement pour les tactiques réactives. Ce guide aborde les blackboards, le raycasting de vision et la régulation des ticks par LOD.

1. Machines à États Finis (FSM) vs Arbres de Comportement (BT)

Choisir le bon modèle en fonction du type d'ennemi :

2. Le Motif Blackboard et la Perception Sensorielle

Calculer la conscience spatiale sans surcharger le processeur :

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œuds d'Arbres de Comportement : Sélecteurs et Séquences

Hiérarchisation des priorités tactiques :

5. Scalabilité Serveur : LOD d'IA et Object Pooling

Conserver 60 FPS constants avec plus de 100 monstres en jeu :

Frequently Asked Questions

Pourquoi 30 PNJ suffisent-ils à ralentir un serveur ?

Parce que répéter les raycasts et les calculs de pathfinding à 60 FPS sature le CPU. Appliquez un LOD d'IA pour espacer les requêtes.

Quel est l'avantage des Arbres de Comportement face aux FSM ?

Ils permettent d'insérer de nouveaux comportements modulaires sans reconstruire l'ensemble des liens de transition.

Comment empêcher les monstres de voir à travers les murs ?

En lançant un raycast de la tête du PNJ vers le torse du joueur en vérifiant l'absence d'obstacle intermédiaire.

Peut-on exécuter l'IA côté client ?

Non, les décisions capitales et les dégâts doivent demeurer sur le serveur afin d'éviter toute triche.

Développez vos Capacités d'Architecture et d'Analyse

Évaluez votre profil technique et optimisez votre concentration grâce aux outils DopaBrain.

Découvrir les Tests DopaBrain