Établi de fabrication
Fait partie de la section Architecture de jeu dans Unity du Journey Unity de Coddy. Leçon 49 sur 50.
Dans un jeu de survie, un établi transforme ce que tu récoltes en objets utiles. Deux boutons permettent de ramasser du bois et de la pierre, et trois recettes les transforment en davantage d’objets : deux morceaux de bois donnent une planche, une planche et deux pierres donnent une hache, et quatre planches donnent un radeau. On ne peut appuyer sur le bouton d’une recette que lorsque l’inventaire contient tout ce dont elle a besoin, et fabriquer un objet consomme ces éléments. Les recettes sont des données renseignées sur l’établi dans l’Inspector, donc une nouvelle recette ne nécessite aucun nouveau code. L’inventaire annonce chaque changement à tous ceux qui l’écoutent, et il est enregistré au format JSON chaque fois qu’il change, donc quitter le jeu ne fait rien perdre.
Écris deux scripts : Inventory, sur le sac à dos, et CraftingBench, sur l’établi.
Défi
DifficileInventory :
- Une classe
[System.Serializable]ItemStackavecpublic string itemetpublic int count, et une classe[System.Serializable]InventoryDataavecpublic List<ItemStack> stacks. L’inventaire conserve un seulInventoryData. public event Action Changed, déclenché après chaque modification.public int Count(string item): le nombre d’éléments de cet objet qu’il contient, ou 0 s’il n’en contient aucun.public void Add(string item, int amount)ajoute à la pile de l’objet, ou ajoute une nouvelle pile à la fin de la liste.public void Remove(string item, int amount)en retire, et une pile qui atteint 0 quitte la liste.public string Describe()énumère les piles dans l’ordre, sous la formeWood 3, Plank 1, ou renvoieempty.- Chaque modification est immédiatement enregistrée dans
inventory.jsondansApplication.persistentDataPath, sous la forme deJsonUtility.ToJsonappliqué àInventoryData.Awakecharge ce fichier s’il existe.
CraftingBench, auquel l’Inspector attribue inventory, recipes, recipeButtons (un par recette, dans le même ordre), woodButton, stoneButton et inventoryText :
- Une classe
[System.Serializable]Ingredientavecpublic string itemetpublic int amount, et une classe[System.Serializable]Recipeavecpublic string resultetpublic List<Ingredient> needs. Lerecipesde l’établi est uneList<Recipe>, remplie dans la scène. - Les boutons de collecte ajoutent un
Woodou unStone. Chaque bouton de recette appellepublic void Craft(int index)avec l’index de sa recette. Craftne fait rien si l’inventaire ne contient pas tous les éléments requis par la recette. Sinon, il retire chaque ingrédient, ajoute un exemplaire du résultat et l’affiche dans le journal, sous la formeCrafted Axe.- Au démarrage et chaque fois que l’inventaire change, chaque bouton de recette n’est cliquable que si sa recette peut être fabriquée, et
inventoryTextaffiche la description après le mot Inventory, sous la formeInventory: Wood 3, Plank 1ouInventory: empty.
Appuie sur Play, collecte des ressources et fabrique un radeau, appuie sur Stop puis de nouveau sur Play, puis sur Check.
Essayez vous-même
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class CraftingBench : MonoBehaviour
{
[SerializeField] private Inventory inventory;
[SerializeField] private Button[] recipeButtons;
[SerializeField] private Button woodButton;
[SerializeField] private Button stoneButton;
[SerializeField] private TMP_Text inventoryText;
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Architecture de jeu dans Unity
1Des composants, pas des hiérarchies
Des composants simplesUn script de base pour les ennemisDes composants abstraitsDes composants qui fonctionnent ensembleRécapitulatif : tourelle modulaire4Données sérialisées
Classes sérialisablesListes dans l’inspecteurÉnumérations dans l’inspecteurRécapitulatif : table de butin7Machines à états
Les états sous forme de classesUne machine à étatsTransitionsLes cerveaux des ennemisRécapitulatif : états d’une porte10Projet : Survivant de l’arène
Le hérosTypes d’ennemis2Interfaces dans Unity
IDamageableInterfaces et TryGetComponentGetComponentsRécapitulatif : touche d’interaction5ScriptableObjects
Assets de donnéesStatistiques des armesParamètres partagésLes vagues sous forme de donnéesRécapitulatif : base de données d’objets