Ptite city

Description

Le but de ce prototype a été au début de faire un jeu s’inspirant du Petite Bourgade, un jeu de société où les joueurs doivent placer des ressources dans leur village quadrillé pour construire des bâtiments.

Le projet à évolué quand j’ai découvert le GOAP, une IA qui permet à des agents de faire des choix et de suivre une série d’action non définie.

Le but est de recréer un jeu de gestion, Banished est l’inspiration principale, où le joueur va s’occuper de son village paisiblement.

J’ai d’abord créé un sol de manière procédural pour ne pas avoir un sol unique puis j’ai commencé à m’occuper des villageois et c’est là que c’est devenu intéressant.

Détails

  • But : Utilisation du GOAP
  • Moteur : Unity

GOAP

J’ai commencé le prototype par créer un sol généré procéduralement, histoire de ne pas avoir un sol d’une couleur unie. Je me suis ensuite attaqué à la partie du contrôle des personnages et j’ai fait des recherches sur les différentes façons qu’ont les personnages non-joueurs pour savoir quoi faire dans un jeu. Une IA a attiré mon attention, le GOAP (Goal Oriented Action Planning) qui permet à un agent de faire et d’exécuter un plan en fonction d’un objectif donné.

Comment fonctionne le GOAP. Un agent qui possède différentes actions fait partie d’un « monde » modélisé par plusieurs variables. Chaque action change les variables de l’agent et/ou du monde. On donne un objectif à l’agent, qui correspond à un set de variable à atteindre, et l’agent regarde parmi ses actions lesquelles vont permettre de satisfaire ces conditions. Si ces actions ont elles aussi des conditions, il cherche à nouveau parmi ses actions comment les résoudre et ainsi de suite jusqu’à avoir rempli toutes les conditions des actions. En remontant ainsi la chaine d’actions choisies, l’agent dispose d’un plan à suivre pour atteindre l’objectif souhaité.

Le chaine youtube AI and games a fait une super vidéo à ce sujet : vidéo de AI and games.

Dans Unity, l’agent possède plusieurs composants, les derniers étant relatifs au GOAP. Le composant Goap Agent permet la gestion du plan, c’est à dire le fait de demander un plan et d’ensuite l’exécuter. Il possède ensuite 3 actions, le Go To qui lui permet de se déplacer, le Collect Resrouce qui lui permet de prendre une ressource et le Drop Resource qui lui permet de la déposer. Ce sont les actions de bases nécessaires pour le fonctionnement du prototype.

Le bûcheron quant à lui possède une action de plus qui lui permet d’interagir avec un Resource Giver, un objet qui donne des ressources et dans son cas du bois. Les 2 Resources Giver de bois sont l’arbre et le tronc d’arbre, et son action lui permet de les couper pour recevoir les ressources associées.

Goap in action

La capture déconne un peu niveau couleurs mais l’on peut y voir le bucheron en action, lorsqu’on clique sur l’arbre, il se déplace pour se mettre en face de l’arbre, puis utilise l’action UseResourceGiverForWoodcutter qui lui permet d’utiliser sa hache pour couper l’arbre.

À la fin, on remarque que pour prendre un nouveau bout de bois, alors qu’il en possède un, il va se déplacer au bon endroit puis échanger les 2 bouts de bois. En effet, l’action « prendre une ressource » dispose de la condition « aucune ressource », le goap trouve donc dans son plan le fait de d’abord poser le bout de bois qu’il possède déjà sans que le fait d’échanger les 2 ressources soit explicitement codé.

Author: nyrh