Les PNJ dans le jeu vidéo : comment fonctionnent les personnages non-joueurs (avec démos jouables)
Créez votre propre jeu vidéo de PNJ
Qu'est-ce qu'un PNJ dans un jeu vidéo ? Découvrez comment les PNJ sont conçus, comment ils se comportent, et jouez à quatre vrais jeux 3D dans le navigateur où les personnages non-joueurs se déplacent, parlent et réagissent.
Un PNJ dans un jeu vidéo est un personnage non-joueur : une entité qui n'est pas directement contrôlée par le joueur mais qui occupe l'espace, détient un état et réagit aux conditions du monde. Le terme est volontairement large, et c'est cette ampleur qui cause la plupart des confusions. Un commerçant avec un emploi du temps, un coéquipier qui vous suit dans un couloir et un marchand errant qui répète une seule réplique sont tous des PNJ, mais ils ne sont pas conçus de la même manière et ne coûtent pas la même chose à faire tourner.
Cette page explique ce qu'est réellement un PNJ, comment on en construit un, et comment le distinguer d'un déclencheur scripté qui ne fait que sembler vivant. Quatre mondes jouables de ce site servent d'exemples concrets — Agent Sprite Forge, The Cyclops' Island, Mini World et le constructeur de jeux 3D lui-même — pour que vous puissiez vous approcher d'un PNJ et observer son comportement au lieu d'en lire la description.
Réponse rapide : qu'est-ce qui compte comme PNJ dans un jeu vidéo ?
Un PNJ est tout personnage du monde de jeu qui n'est pas sous le contrôle direct du joueur. Il possède une position, un état et au moins un comportement qui se déclenche sans que le joueur appuie sur un bouton. Si vous retirez le joueur de la scène et que le personnage fait encore quelque chose — parcourir un itinéraire, ouvrir une porte, réagir à un événement proche —, c'est un PNJ.
La frontière entre un personnage et un mécanisme, c'est la possession de l'état. Un personnage possède des variables qui persistent d'une image à l'autre : santé actuelle, cible actuelle, index de patrouille actuel, nœud de dialogue actuel. Un mécanisme est en pratique sans état — il se déclenche une fois lorsqu'une condition est remplie, puis c'est terminé. Une plaque de pression qui ouvre une porte est un mécanisme. Un garde qui réagit à l'ouverture de la porte, se souvient que vous étiez là et change d'itinéraire est un PNJ. La différence n'est pas la fidélité visuelle. C'est de savoir si quelque chose survit à l'image dans laquelle l'événement s'est produit.
Une brève histoire du PNJ dans le jeu vidéo
Les aventures textuelles de la fin des années 1970 et des années 1980 traitaient les PNJ comme des cibles du parseur. Un personnage n'existait que sous la forme d'un nom commun que le parseur reconnaissait, accompagné d'un petit bloc de drapeaux. Le voleur des premières aventures textuelles dérobait un objet si vous étiez dans la même pièce et qu'il ne l'avait pas déjà fait — c'est un PNJ à deux variables : la présence et un drapeau a-volé. Pas de pathfinding, pas d'animation, pas de planification. Le comportement était dans le drapeau, pas dans le personnage.
Les PNJ de l'ère des sprites ont ajouté l'animation et la collision, mais ont gardé un comportement mince. Un villageois parcourait une boucle fixe de deux points, jouait une animation d'attente lorsque le joueur était dans un certain rayon et ouvrait une boîte de dialogue au contact. Le changement technique important était que le PNJ avait désormais une position dans le monde physique, il devait donc être peu coûteux. Avec des dizaines à l'écran simultanément sur du matériel 8 bits et 16 bits, chaque PNJ recevait quelques octets d'état et exécutait une vérification par image pas plus complexe qu'une comparaison de distance.
Les PNJ pilotés par un emploi du temps sont apparus lorsque les budgets de mémoire et de CPU ont permis à un personnage d'exister indépendamment de la position du joueur. Un commerçant doté d'une valeur d'horaires d'ouverture, d'un point de passage de domicile et d'un itinéraire de marche peut être ailleurs quand vous arrivez, et cette absence est lisible pour le joueur. L'implémentation, c'est une horloge plus une table de correspondance : à l'heure de jeu 21, viser le point de passage du domicile ; à 08, viser la boutique. Le joueur ne voit jamais la table, seulement la conséquence.
Les PNJ générés sont l'ère actuelle. Au lieu de rédiger une réplique par état, vous rédigez une description de personnage et laissez un modèle produire le dialogue, les répliques courtes ou le comportement à l'exécution. Le compromis n'est plus le stockage mais le déterminisme : une réplique générée ne peut pas être entièrement prévisualisée, il vous faut donc des garde-fous sur le ton, la longueur et ce que le PNJ est autorisé à mentionner. Dans le constructeur de jeux 3D, les invites de PNJ sont limitées à une description et à un petit ensemble de comportements, précisément pour cette raison.
Comment sont conçus les PNJ modernes
Chaque PNJ est un empilement de cinq parties qui coopèrent : l'état, la navigation, l'animation, le dialogue et la perception. L'état, ce sont les données que possède le PNJ — santé, cible, index de patrouille, nœud de dialogue, niveau d'alerte. La navigation, c'est la manière dont il se déplace entre les points. L'animation, c'est la manière dont le déplacement et les moments d'attente sont représentés. Le dialogue, c'est le texte et la voix produits en réponse à des conditions. La perception, c'est l'entrée qui signale au PNJ qu'il s'est passé quelque chose, généralement un test de distance, un lancer de rayon de ligne de vue ou le chevauchement d'un volume déclencheur.
Dans un projet typique, ces parties vivent à des endroits distincts. L'état est un script ou un composant sur l'entité du PNJ — en termes Unity, un MonoBehaviour ; dans Godot, un script de nœud ; dans une construction Three.js pour navigateur, un objet simple attaché au maillage. La navigation est soit des données de points de passage, soit un navmesh. L'animation est une machine à états avec des clips nommés comme idle, walk, attack. Le dialogue est un fichier de données, souvent un petit graphe de nœuds ou une table indexée par état. La perception est généralement une forme de collision et une vérification par image.
Le mode de défaillance le plus courant est la divergence entre l'état et l'animation. Le PNJ est dans un état de poursuite mais joue encore le clip d'attente, il glisse donc vers vous sans remuer les jambes. Le correctif n'est pas plus d'animation ; c'est un seul endroit dans le code qui écrit l'état actuel et un seul endroit qui le lit pour choisir le clip. Quand ces deux endroits vivent dans des scripts différents, vous obtenez le glissement. Quand ils sont dans la même fonction, non.
La deuxième défaillance la plus courante est une navigation qui ne correspond pas au niveau. Un itinéraire de patrouille conçu pour un ancien agencement enverra un PNJ dans un mur ou dans le vide après un changement de géométrie. Dans les constructions pour navigateur, l'approche robuste la moins coûteuse consiste à conserver les points de patrouille sous forme d'objets vides nommés et à les recalculer au chargement, pour que déplacer un mur ne laisse pas l'itinéraire orphelin.
C'est la perception qui rend les PNJ coûteux. Un lancer de rayon par PNJ et par image convient pour quelques personnages et devient du gaspillage pour des centaines. Les optimisations habituelles sont une grille spatiale partagée, un intervalle de vérification et un rejet précoce par la distance avant l'exécution de tout lancer de rayon. Si un PNJ se trouve à 40 mètres et que son rayon de perception est de 8, le lancer de rayon ne devrait jamais avoir lieu.
Où vit chaque partie dans une scène
État : sur l'entité du PNJ elle-même. Gardez-le petit — une poignée de nombres et une chaîne pour le nœud de dialogue actuel. Si vous en avez besoin de davantage, scindez le PNJ en deux personnages.
Navigation : sous forme de liste de points dans l'espace du monde, stockée à côté de la scène, et non intégrée au modèle. Animation : sous forme de clips nommés sur le rig, sélectionnés par un seul commutateur d'état. Dialogue : dans un fichier de données séparé, pour que les rédacteurs puissent le modifier sans toucher au code. Perception : sous forme de volume déclencheur plus un test de distance, le lancer de rayon intervenant en dernier, pas en premier.
01
Déposez le modèle du PNJ dans la scène et attachez un composant d'état avec des champs pour l'état actuel, la cible et l'index de patrouille.
02
Ajoutez trois ou quatre objets points de passage et nommez-les pour que l'itinéraire survive aux modifications du niveau.
03
Câblez une machine à états d'animation avec au moins idle et walk, et pilotez-la uniquement à partir de la valeur de l'état actuel.
04
Ajoutez un volume déclencheur de perception dimensionné au rayon de conscience du PNJ.
05
Rédigez le dialogue sous forme de petite table indexée par état, avec une réplique par défaut pour les états sans correspondance.
06
Recalculez les points de passage et les clés de dialogue au chargement, puis testez en déplaçant un mur et en confirmant que la patrouille se déroule toujours.
Quatre mondes jouables, quatre types de PNJ
La manière la plus claire de comprendre le comportement d'un PNJ est de se placer à côté de l'un d'eux et de modifier ce qu'il peut voir. Ces quatre mondes sur Neta Studio illustrent chacun un schéma de comportement différent. Ouvrez-les, entrez dans la portée de perception du PNJ, puis ressortez et observez ce qui change.
Agent Sprite Forge fait tourner des PNJ définis par une courte description de personnage plus un petit ensemble d'états. Approchez-vous de l'un d'eux et sa réponse est générée à partir de cette description, contrainte aux états que le monde expose. Le test intéressant est la répétition : approchez le même PNJ deux fois et comparez combien la seconde réponse varie. Cette variance est celle du modèle, pas celle du monde — la machine à états, elle, est fixe.
The Cyclops' Island utilise un grand PNJ avec un schéma de poursuite et de recherche. Quand le joueur se trouve dans le rayon de perception, le cyclope poursuit ; quand le joueur rompt la ligne de vue, il cherche à la dernière position connue puis revient à un itinéraire de patrouille. C'est l'étape de recherche qui lui donne l'air d'un personnage plutôt que d'un missile à tête chercheuse — il agit sur des informations périmées.
Mini World place plusieurs petits PNJ sur de courtes boucles avec des invites d'interaction. Leur comportement est délibérément mince : marcher, marquer une pause, réagir quand le joueur est à moins d'un mètre. L'intérêt ici, c'est la quantité. Vous pouvez en observer cinq ou six à la fois et constater combien une boucle de PNJ convaincante est en réalité peu coûteuse.
Le constructeur de jeux 3D est l'endroit où vous placez et configurez directement les PNJ. Chaque PNJ reçoit une description, un itinéraire de patrouille et un ensemble d'états. Construisez quelque chose de petit — une pièce, un PNJ, un itinéraire — et testez les limites : réduisez le rayon de perception jusqu'à ce que le PNJ ne vous remarque plus jamais, puis augmentez-le jusqu'à ce qu'il ne cesse plus de vous remarquer. La largeur de la bande utile entre ces deux extrêmes constitue le problème de réglage, et il existe dans chaque moteur.
Une note sur les performances. Dans une construction pour navigateur, le coût des PNJ est dominé par les vérifications de perception et l'animation, pas par la géométrie. Dix PNJ avec des lancers de rayon par image coûteront plus cher que dix PNJ avec des vérifications à intervalle partagé, même si les modèles très détaillés sont sur ceux à intervalle. Si une scène saccade lorsque des PNJ sont actifs, examinez d'abord la boucle de perception.
- Agent Sprite ForgeDes PNJ pilotés par une description, avec des réponses générées et contraintes. Utilisez-le pour voir comment un petit ensemble d'états plus une invite de personnage produisent un dialogue qui reste dans le sujet.
- The Cyclops' IslandUn unique grand PNJ avec des états de poursuite, de recherche et de retour à la patrouille. Utilisez-le pour étudier comment le fait d'agir sur des informations périmées donne une impression d'intelligence.
- Mini WorldPlusieurs PNJ légers sur de courtes boucles avec des invites de proximité. Utilisez-le pour constater combien peu de comportement suffit pour qu'un personnage paraisse présent.
- 3D game builderPlacez des PNJ, définissez des descriptions, tracez des itinéraires de patrouille et réglez les rayons de perception. Utilisez-le pour trouver la bande fonctionnelle entre un PNJ qui ne vous remarque jamais et un autre qui ne s'arrête jamais.
Pourquoi le comportement, et non les graphismes, vend un PNJ
Un personnage peu détaillé qui parcourt un itinéraire, marque une pause à une porte et se trouve ailleurs quand vous revenez paraît vivant. Un personnage très détaillé qui reste planté au même endroit et répète une réplique ressemble à un meuble. Le joueur n'évalue pas des polygones. Le joueur se construit un modèle de ce que veut le personnage, et ce modèle provient du timing et de la position, pas du maillage.
Le mécanisme, ce sont les attentes. Si un personnage est au marché le matin et chez lui le soir, le joueur forme une hypothèse — ce personnage a une routine — et l'hypothèse se confirme à la deuxième visite. Cette confirmation constitue tout l'effet. Elle coûte une horloge et une table de correspondance. On ne peut pas la remplacer en ajoutant du détail à une statue, car la statue ne contredit ni ne confirme jamais rien.
C'est pourquoi les PNJ pilotés par un emploi du temps de jeux bien plus anciens font encore parler d'eux, tandis que des PNJ statiques visuellement supérieurs sont oubliés. Le comportement est le contenu. Le modèle est l'emballage. Si vous construisez dans un éditeur de navigateur et que votre temps est limité, consacrez-le aux transitions d'état et aux itinéraires de patrouille avant de le consacrer aux textures.
Comment distinguer un PNJ d'un déclencheur scripté
Les PNJ comme les déclencheurs réagissent au joueur, c'est pourquoi on les confond en revue de conception. La distinction tient à ceci : quelque chose persiste-t-il après l'événement ? Servez-vous des signaux ci-dessous comme d'une liste de contrôle lorsque vous déterminez lequel des deux vous avez sous les yeux.
Ce tableau n'est pas un test de pureté. Beaucoup de jeux utilisent un déclencheur pour lancer le comportement d'un PNJ — un volume déclencheur qui fait passer un garde de la patrouille à l'alerte. C'est normal et correct. Le problème survient lorsqu'un déclencheur est présenté au joueur comme un personnage : il se déclenche une fois, le personnage ne réagit plus jamais à rien, et l'illusion s'effondre à la deuxième rencontre.
| Signal | C'est un PNJ | C'est un déclencheur scripté |
|---|---|---|
| Se répète | Le même personnage répond encore à la deuxième rencontre | Se déclenche une fois et plus jamais |
| État | Possède des variables qui survivent à l'image — niveau d'alerte, index de patrouille | N'a aucun état au-delà d'un drapeau déclenché/non déclenché |
| Position | Se déplace dans le monde entre les rencontres | Reste là où il a été placé |
| Portée de réaction | Réagit différemment selon le contexte (jour, santé, distance) | Même réponse quel que soit le contexte |
| Échec | Peut se coincer, perdre une cible ou mal se déplacer | Ne peut pas échouer — soit il s'est déclenché, soit non |
| Coût | Budget de perception et d'animation par image | Négligeable après l'événement |
| Dialogue | Sélectionne une réplique dans un ensemble indexé par état | Joue une seule réplique fixe |
Entrez dans le monde auquel il appartient
Un sprite est un personnage qui n'a nulle part où se tenir. La dernière étape est celle que personne d'autre ne propose : prenez la feuille que vous venez de créer et placez-la dans un monde où l'on peut se promener — une petite île, une planète, un coin de rue sous la pluie. Chaque monde de ce site a été créé à partir d'une seule description écrite et publié sous forme de page jouable.
Retour au 3D Game Builder
Les 31 mondes, jeux et scènes 3D terminés sont réunis sur une seule page — chacun d'eux jouable.