Üretim Tezgâhı
Coddy'nin Unity Journey'sinin Unity'de Oyun Mimarisi bölümünün bir parçası. Ders 49 / 50.
Bir hayatta kalma oyununda, üretim tezgâhı topladıklarını kullanabileceğin eşyalara dönüştürür. İki düğme odun ve taş toplar, üç tarif de bunları başka eşyalara dönüştürür: iki odun bir tahta eder, bir tahta ve iki taş bir balta eder, dört tahta bir sal eder. Bir tarifin düğmesine yalnızca envanterde tarifin gerektirdiği her şey varsa basılabilir; üretim sırasında bu malzemeler tüketilir. Tarifler, Inspector'da tezgâha girilen verilerdir; bu nedenle yeni bir tarif için yeni kod gerekmez. Envanter, her değişikliği dinleyenlere bildirir ve her değiştiğinde JSON olarak kaydedilir; böylece oyundan çıkmak hiçbir şeyin kaybolmasına yol açmaz.
İki betik yaz: Inventory, Backpack üzerinde; ve CraftingBench, Bench üzerinde.
Görev
ZorInventory:
- Bir
[System.Serializable]ItemStacksınıfı;public string itemvepublic int countalanlarına, ayrıcapublic List<ItemStack> stacksalanına sahip bir[System.Serializable]InventoryDatasınıfı. Envanter birInventoryDatatutar. - Her değişiklikten sonra tetiklenen
public event Action Changed. public int Count(string item): envanterde bu eşyadan kaç tane bulunduğunu döndürür; hiç yoksa 0 döndürür.public void Add(string item, int amount), eşyanın yığınına ekleme yapar veya listenin sonuna yeni bir yığın ekler.public void Remove(string item, int amount)yığından çıkarır ve sayısı 0'a ulaşan bir yığın listeden çıkarılır.public string Describe()yığınları sıraylaWood 3, Plank 1biçiminde listeler veyaemptydöndürür.- Her değişiklik,
InventoryData'nınJsonUtility.ToJsonçıktısı olarakApplication.persistentDataPathiçindekiinventory.jsondosyasına hemen kaydedilir. Dosya varsaAwakebu dosyayı yükler.
CraftingBench; Inspector'ın atadığı inventory, recipes, (her tarif için bir tane ve aynı sırada) recipeButtons, woodButton, stoneButton ve inventoryText alanlarına sahiptir:
public string itemvepublic int amountalanlarına sahip bir[System.Serializable]Ingredientsınıfı vepublic string resultilepublic List<Ingredient> needsalanlarına sahip bir[System.Serializable]Recipesınıfı. Tezgâhınrecipesalanı, sahnede doldurulan birList<Recipe>'tir.- Toplama düğmeleri bir
Woodveya birStoneekler. Her tarif düğmesi, tarifinin indeksiylepublic void Craft(int index)metodunu çağırır. - Envanterde tarifin gerektirdiği herhangi bir şey yoksa
Crafthiçbir şey yapmaz. Aksi takdirde tüm malzemeleri çıkarır, sonuçtan bir tane ekler veCrafted Axebiçiminde günlük kaydı oluşturur. - Başlangıçta ve envanter her değiştiğinde, her tarif düğmesi yalnızca tarifi üretilebiliyorsa tıklanabilir olur;
inventoryText, açıklamayı Inventory kelimesinden sonraInventory: Wood 3, Plank 1veyaInventory: emptybiçiminde gösterir.
Play'e basın, malzeme toplayıp bir sal üretin, Stop'a ve ardından tekrar Play'e basın, sonra Check'e basın.
Kendin dene
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;
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Unity'de Oyun Mimarisi bölümündeki tüm dersler
1Hiyerarşiler Değil, Bileşenler
Küçük BileşenlerTemel Bir Düşman BetiğiSoyut BileşenlerBirlikte Çalışan BileşenlerÖzet: Modüler Taret4Serileştirilmiş Veriler
Serileştirilebilir SınıflarInspector'da ListelerInspector'da Enum'larÖzet: Ganimet Tablosu7Durum Makineleri
Sınıflar Olarak DurumlarBir Durum MakinesiGeçişlerDüşmanların Yapay ZekâsıTekrar: Kapı Durumları10Proje: Arena Hayatta Kalma
KahramanDüşman Türleri5ScriptableObjects
Veri VarlıklarıSilah İstatistikleriPaylaşılan AyarlarVeri Olarak DalgalarTekrar: Eşya Veritabanı8Yeniden Kullanılabilir Kod
Genişletme MetotlarıGeneric SingletonGeneric YardımcılarTekrar: FindNearest