Banco da lavoro
Fa parte della sezione Architettura dei giochi in Unity del percorso Unity di Coddy. Lezione 49 di 50.
In un gioco di sopravvivenza, un banco da lavoro trasforma ciò che raccogli in oggetti che puoi usare. Due pulsanti permettono di raccogliere legno e pietra, e tre ricette li trasformano in altro: due pezzi di legno fanno una tavola, una tavola e due pietre fanno un'ascia, quattro tavole fanno una zattera. Il pulsante di una ricetta può essere premuto solo quando l'inventario contiene tutto ciò che serve per realizzarla, e la creazione consuma quegli oggetti. Le ricette sono dati inseriti nel banco dall'Inspector, quindi per aggiungere una nuova ricetta non serve scrivere altro codice. L'inventario comunica ogni cambiamento a chiunque sia in ascolto e viene salvato come JSON ogni volta che cambia, così non perdi nulla quando esci dal gioco.
Scrivi due script: Inventory, sullo zaino, e CraftingBench, sul banco.
Sfida
DifficileInventory:
- Una classe
[System.Serializable]ItemStackconpublic string itemepublic int count, e una classe[System.Serializable]InventoryDataconpublic List<ItemStack> stacks. L'inventario conserva unInventoryData. public event Action Changed, attivato dopo ogni modifica.public int Count(string item): quanti oggetti di quel tipo contiene, 0 se non ne contiene.public void Add(string item, int amount)aggiunge alla pila dell'oggetto oppure aggiunge una nuova pila alla fine dell'elenco.public void Remove(string item, int amount)ne sottrae, e una pila che raggiunge 0 viene rimossa dall'elenco.public string Describe()elenca le pile nell'ordine in cui compaiono, comeWood 3, Plank 1, oppure restituisceempty.- Ogni modifica viene salvata subito in
inventory.jsoninApplication.persistentDataPath, comeJsonUtility.ToJsondiInventoryData.Awakecarica il file se esiste.
CraftingBench, a cui l'Inspector assegna inventory, recipes, recipeButtons (uno per ricetta, nello stesso ordine), woodButton, stoneButton e inventoryText:
- Una classe
[System.Serializable]Ingredientconpublic string itemepublic int amount, e una classe[System.Serializable]Recipeconpublic string resultepublic List<Ingredient> needs.recipesdel banco è unaList<Recipe>, compilata nella scena. - I pulsanti di raccolta aggiungono un'unità di
Woodo un'unità diStone. Ogni pulsante delle ricette chiamapublic void Craft(int index)con l'indice della propria ricetta. Craftnon fa nulla se nell'inventario manca qualcosa che serve per la ricetta. Altrimenti rimuove ogni ingrediente, aggiunge un'unità del risultato e lo registra, comeCrafted Axe.- All'avvio e ogni volta che l'inventario cambia, ciascun pulsante delle ricette è cliccabile solo se è possibile creare la relativa ricetta, e
inventoryTextmostra la descrizione dopo la parola Inventory, comeInventory: Wood 3, Plank 1oppureInventory: empty.
Premi Play, raccogli materiali e crea una zattera, premi Stop e poi di nuovo Play, quindi Check.
Provalo tu
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;
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Architettura dei giochi in Unity
1Componenti, non gerarchie
Componenti piccoliUno script base per i nemiciComponenti astrattiComponenti che collaboranoRiepilogo: torretta modulare4Dati serializzati
Classi serializzabiliListe nell'InspectorEnum nell'InspectorRiepilogo: tabella del bottino7Macchine a stati
Gli stati come classiUna macchina a statiTransizioniIntelligenze dei nemiciRiepilogo: stati della porta10Progetto: Sopravvissuto nell’arena
L’eroeTipi di nemici5ScriptableObjects
Asset di datiStatistiche delle armiImpostazioni condiviseOndate come datiRiepilogo: database degli oggetti