Unity'de Üs Yükseltme Sistemi

Birçok oyunda, oyuncular ek özellikleri açmak, savunmayı geliştirmek veya üretim oranlarını artırmak için bir üssü veya binayı yükseltebilirler. Bu eğitim, Unity'de bir üs yükseltme sistemi kurmanıza rehberlik edecek ve bir binanın her seviyede görsel ve işlevsel değişikliklerle birden fazla seviyeye yükseltilmesine olanak tanıyacaktır.

1. Temel Yapının Kurulması

İlk olarak, üssünüzün seviyesi, sağlığı ve üretim oranı gibi özelliklerini tanımlayan bir Base betiği oluşturun. Her seviye yükseltmesi bu nitelikleri değiştirecektir.

using UnityEngine;

public class Base : MonoBehaviour
{
    public int level = 1;
    public int health = 100;
    public int productionRate = 10;

    public void UpgradeBase()
    {
        level++;
        health += 50; // Increase health by 50 with each level
        productionRate += 5; // Increase production rate by 5 with each level
        Debug.Log("Base upgraded to level " + level);
    }
}

Bu Base betiği, seviyeyi artıran ve üssün niteliklerini yükselten basit bir UpgradeBase() metodunu içerir. Bu betiği sahnedeki taban GameObject'e ekleyin.

2. Yükseltme Yöneticisi Oluşturma

Daha sonra, oyuncunun yükseltme için yeterli para birimine sahip olup olmadığını kontrol etmek de dahil olmak üzere temel yükseltmeleri yöneten bir UpgradeManager betiği oluşturun.

using UnityEngine;

public class UpgradeManager : MonoBehaviour
{
    public Base playerBase;
    public int upgradeCost = 100;

    public void AttemptUpgrade()
    {
        if (CurrencySystem.Instance.SpendCurrency(upgradeCost))
        {
            playerBase.UpgradeBase();
            upgradeCost += 50; // Increase the cost for each upgrade
        }
        else
        {
            Debug.Log("Not enough currency to upgrade.");
        }
    }
}

Bu UpgradeManager betiğini bir GameObject'e ekleyin, temel GameObject'i playerBase alanına atayın ve başlangıç ​​upgradeCost değerini ayarlayın. Her yükseltme maliyeti artırarak gelecekteki yükseltmeleri daha zorlu hale getirir.

3. Bir Para Birimi Sisteminin Kurulması

Yükseltme maliyetlerini yönetmek için, oyuncunun parasını takip etmenin ve harcamanın basit bir yolu olarak CurrencySystem ekleyin. İşte bir örnek:

using UnityEngine;

public class CurrencySystem : MonoBehaviour
{
    public static CurrencySystem Instance;
    public int currency = 500;

    private void Awake()
    {
        if (Instance == null)
            Instance = this;
        else
            Destroy(gameObject);
    }

    public bool SpendCurrency(int amount)
    {
        if (currency >= amount)
        {
            currency -= amount;
            Debug.Log("Currency spent: " + amount + ". Remaining: " + currency);
            return true;
        }
        else
        {
            Debug.Log("Not enough currency.");
            return false;
        }
    }

    public void AddCurrency(int amount)
    {
        currency += amount;
        Debug.Log("Currency added: " + amount + ". Total: " + currency);
    }
}

Bu CurrencySystem'yi sahnedeki bir GameObject'e ekleyin. Tekil desen, UpgradeManager gibi diğer betiklerden kolay erişim sağlar.

4. Seviye Başına Görselleri ve Efektleri Güncelleme

Her bir temel yükseltmeyi görsel olarak farklı kılmak için her seviye için farklı modeller veya dokular gibi varyasyonlar ekleyin. Örneğin:

  1. Her bir temel seviye için birden fazla 3D model oluşturun veya farklı dokular/malzemeler hazırlayın.
  2. Seviye her arttığında modelleri veya materyalleri değiştirmek için Base sınıfına kod ekleyin.

Base betiğinde görselleri güncellemek için bir kod parçası:

public GameObject[] levelModels; // Assign each level's model in Inspector

public void UpgradeBase()
{
    level++;
    health += 50;
    productionRate += 5;
    UpdateBaseModel();
}

void UpdateBaseModel()
{
    for (int i = 0; i < levelModels.Length; i++)
    {
        levelModels[i].SetActive(i == level - 1);
    }
}

Bu kod, üssün mevcut seviyesine uyan modeli aktif hale getirecek ve diğerlerini devre dışı bırakacaktır.

5. Yükseltmeler için bir kullanıcı arayüzü oluşturma

Sonra, oyuncunun yükseltmeleri başlatmasına ve üssün mevcut seviyesini takip etmesine izin veren kullanıcı arayüzü öğeleri oluşturun. Bunu yapmak için:

  1. "Upgrade Base" etiketli bir buton içeren bir Canvas oluşturun.
  2. Bu düğmeye bir OnClick olayı ekleyin ve bunu UpgradeManager metodunun AttemptUpgrade metoduna bağlayın.
  3. Oyunculara yükseltme ilerlemesi hakkında geri bildirim vermek için üssün seviyesini, sağlığını ve üretim oranını kullanıcı arayüzünde görüntüleyin.

6. Yükseltme Sisteminin Test Edilmesi

Oyunu çalıştırın ve "Upgrade Base" düğmesine tıklayın. Her yükseltmeyle birlikte üssün nitelikleri artmalı ve görseller buna göre değişmelidir. Para birimi değişikliklerini ve seviye ayarlamalarını doğrulamak için Hata Ayıklama günlüğünü kullanın.

Sistemin Genişletilmesi

Bu temel yükseltme sistemi, şunları ekleyerek genişletilebilir:

  • Farklı özelliklere ve görsel geliştirmelere sahip yeni seviyeler.
  • Malzeme veya zaman gibi para biriminin ötesinde kaynak gereksinimleri.
  • Parçacık efektleri veya ses geri bildirimi gibi yükseltmeler için özel efektler.

Çözüm

Unity'de dinamik nitelik artışları, basit bir para birimi kontrolü ve yükseltmeler için kullanıcı arayüzü içeren bir temel yükseltme sistemi oluşturduk. Bu sistem, oyununuza çok aşamalı yükseltmeler ve her seviye için farklı görseller gibi daha karmaşık mekanikler eklemek için bir temel sağlar.