Menu
CoddyTech

Meja Kerajinan

Termasuk bagian Arsitektur Game di Unity dalam perjalanan Unity di Coddy. Pelajaran 49 dari 50.

Dalam game bertahan hidup, meja crafting mengubah bahan yang kamu kumpulkan menjadi barang yang bisa kamu gunakan. Dua tombol mengumpulkan kayu dan batu, lalu tiga resep mengubahnya menjadi barang lain: dua kayu menjadi satu papan, satu papan dan dua batu menjadi satu kapak, dan empat papan menjadi satu rakit. Tombol resep hanya bisa ditekan saat inventory memiliki semua bahan yang dibutuhkan resep, dan proses crafting menghabiskan bahan-bahan tersebut. Resep diisi sebagai data pada meja melalui Inspector, jadi resep baru tidak memerlukan kode baru. Inventory mengumumkan setiap perubahan kepada siapa pun yang mendengarkan, dan datanya disimpan sebagai JSON setiap kali berubah, jadi kamu tidak akan kehilangan apa pun saat keluar dari game.

Tulis dua skrip: Inventory, pada Backpack, dan CraftingBench, pada Bench.

challenge icon

Tantangan

Sulit

Inventory:

  • Sebuah class [System.Serializable] bernama ItemStack dengan public string item dan public int count, serta class InventoryData dengan public List<ItemStack> stacks. Inventory menyimpan satu InventoryData.
  • public event Action Changed, yang dipicu setelah setiap perubahan.
  • public int Count(string item): jumlah item yang disimpan, 0 jika tidak ada.
  • public void Add(string item, int amount) menambahkan jumlah ke tumpukan item, atau menambahkan tumpukan baru di akhir list. public void Remove(string item, int amount) mengurangi jumlahnya, dan tumpukan yang mencapai 0 dihapus dari list.
  • public string Describe() menampilkan tumpukan sesuai urutannya, seperti Wood 3, Plank 1, atau mengembalikan empty.
  • Setiap perubahan langsung disimpan ke inventory.json di Application.persistentDataPath, sebagai hasil JsonUtility.ToJson dari InventoryData. Awake memuat file tersebut jika ada.

CraftingBench, yang diberi inventory, recipes, recipeButtons oleh Inspector (satu untuk setiap resep, dengan urutan yang sama), woodButton, stoneButton, dan inventoryText:

  • Sebuah class [System.Serializable] bernama Ingredient dengan public string item dan public int amount, serta class Recipe dengan public string result dan public List<Ingredient> needs. recipes milik bench adalah List<Recipe> yang diisi di scene.
  • Tombol pengumpulan menambahkan satu Wood atau satu Stone. Setiap tombol resep memanggil public void Craft(int index) dengan indeks resepnya.
  • Craft tidak melakukan apa pun jika inventory tidak memiliki salah satu bahan yang dibutuhkan resep. Jika tidak, fungsi ini menghapus setiap bahan, menambahkan satu hasil, lalu mencatatnya, seperti Crafted Axe.
  • Pada awal permainan dan setiap kali inventory berubah, setiap tombol resep hanya dapat diklik jika resepnya bisa dibuat, dan inventoryText menampilkan deskripsi setelah kata Inventory, seperti Inventory: Wood 3, Plank 1 atau Inventory: empty.

Tekan Play, kumpulkan bahan dan buat rakit, tekan Stop lalu Play lagi, kemudian tekan Check.

Coba sendiri

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;
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Arsitektur Game di Unity