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.
Tantangan
SulitInventory:
- Sebuah class
[System.Serializable]bernamaItemStackdenganpublic string itemdanpublic int count, serta classInventoryDatadenganpublic List<ItemStack> stacks. Inventory menyimpan satuInventoryData. 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, sepertiWood 3, Plank 1, atau mengembalikanempty.- Setiap perubahan langsung disimpan ke
inventory.jsondiApplication.persistentDataPath, sebagai hasilJsonUtility.ToJsondariInventoryData.Awakememuat 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]bernamaIngredientdenganpublic string itemdanpublic int amount, serta classRecipedenganpublic string resultdanpublic List<Ingredient> needs.recipesmilik bench adalahList<Recipe>yang diisi di scene. - Tombol pengumpulan menambahkan satu
Woodatau satuStone. Setiap tombol resep memanggilpublic void Craft(int index)dengan indeks resepnya. Crafttidak 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, sepertiCrafted Axe.- Pada awal permainan dan setiap kali inventory berubah, setiap tombol resep hanya dapat diklik jika resepnya bisa dibuat, dan
inventoryTextmenampilkan deskripsi setelah kata Inventory, sepertiInventory: Wood 3, Plank 1atauInventory: 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;
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Arsitektur Game di Unity
1Komponen, Bukan Hierarki
Komponen KecilSkrip Dasar MusuhKomponen AbstrakKomponen yang Bekerja SamaRingkasan: Turret Modular5ScriptableObjects
Aset DataStatistik SenjataPengaturan BersamaGelombang sebagai DataUlasan: database Item8Kode yang Dapat Digunakan Kembali
Extension methodSingleton GenerikHelper GenerikUlasan: FindNearest