Menu
CoddyTech

Верстак для крафта

Часть раздела Архитектура игр в Unity путешествия по Unity на Coddy. Урок 62 из 64.

В игре на выживание верстак превращает собранные вами ресурсы в полезные предметы. Две кнопки собирают дерево и камень, а три рецепта превращают их в нечто большее: из двух единиц дерева получается доска, из доски и двух единиц камня — топор, а из четырёх досок — плот. Кнопку рецепта можно нажать, только если в инвентаре есть всё необходимое для его создания, а при создании предмета эти ресурсы расходуются. Рецепты — это данные, которые заполняются на верстаке в Inspector, поэтому для добавления нового рецепта не нужен новый код. Инвентарь сообщает обо всех изменениях всем, кто на него подписан, и каждый раз при изменении сохраняется в формате JSON, поэтому после выхода из игры ничего не теряется.

Для создания этого проекта нужны два урока. В этом уроке мы напишем Inventory для Backpack; рецепты верстака будут в следующем уроке.

challenge icon

Задание

Сложно

Часть 1: заполни Inventory; сбор ресурсов готов.

  1. Добавь сериализуемые ItemStack (публичные item, count) и InventoryData (публичный List<ItemStack> stacks).
  2. Заполни Count, Add, Remove (стек удаляется при значении 0) и Describe: Wood 3, Plank 1 или empty.
  3. При каждом изменении сохраняй данные в inventory.json в Application.persistentDataPath и вызывай событие Changed; Awake загружает эти данные.

Нажми «Играть», собери ресурсы, а затем сыграй ещё раз: древесина вернулась. Затем нажми «Проверить».

Попробуйте сами

using System;
using System.Collections.Generic;
using System.IO;
using UnityEngine;

// Здесь размещаются ItemStack и InventoryData

public class Inventory : MonoBehaviour
{
    public event Action Changed;

    void Awake()
    {
        // Загрузить inventory.json, если файл существует
    }

    public int Count(string item)
    {
        return 0;
    }

    public void Add(string item, int amount)
    {
    }

    public void Remove(string item, int amount)
    {
    }

    public string Describe()
    {
        return "empty";
    }
}

Все уроки раздела Архитектура игр в Unity

Потренируйтесь самостоятельно: Песочница Unity