Basis-Upgrade-System in Unity

In vielen Spielen können Spieler eine Basis oder ein Gebäude aufrüsten, um zusätzliche Funktionen freizuschalten, die Verteidigung zu verbessern oder die Produktionsrate zu steigern. Dieses Tutorial führt Sie durch die Einrichtung eines Basis-Aufrüstsystems in Unity, mit dem ein Gebäude auf mehrere Ebenen aufgewertet werden kann, wobei sich auf jeder Ebene optische und funktionale Änderungen ergeben.

1. Einrichten der Grundstruktur

Erstellen Sie zunächst ein Base-Skript, das die Eigenschaften Ihrer Basis definiert, z. B. deren Level, Gesundheit und Produktionsrate. Jedes Level-Upgrade ändert diese Attribute.

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);
    }
}

Dieses Base-Skript enthält eine einfache UpgradeBase()-Methode, die das Level erhöht und die Attribute der Basis verbessert. Fügen Sie dieses Skript an das Basis-GameObject in der Szene an.

2. Erstellen eines Upgrade-Managers

Erstellen Sie als Nächstes ein UpgradeManager-Skript, das die Basis-Upgrades verwaltet und unter anderem prüft, ob der Spieler über genügend Währung für das Upgrade verfügt.

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.");
        }
    }
}

Fügen Sie dieses UpgradeManager-Skript an ein GameObject an, weisen Sie das Basis-GameObject seinem playerBase-Feld zu und legen Sie die anfänglichen upgradeCost fest. Jedes Upgrade erhöht die Kosten, was zukünftige Upgrades anspruchsvoller macht.

3. Einrichten eines Währungssystems

Um Upgrade-Kosten zu verwalten, fügen Sie ein CurrencySystem hinzu, um die Währung des Spielers einfach zu verfolgen und auszugeben. Hier ist ein Beispiel:

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);
    }
}

Fügen Sie dieses CurrencySystem an ein GameObject in der Szene an. Das Singleton-Muster ermöglicht einfachen Zugriff von anderen Skripten, wie z. B. dem UpgradeManager.

4. Aktualisieren von Grafiken und Effekten pro Level

Um jedes Basis-Upgrade optisch unverwechselbar zu machen, fügen Sie für jedes Level Variationen hinzu, z. B. unterschiedliche Modelle oder Texturen. Beispiel:

  1. Erstellen Sie mehrere 3D-Modelle für jede Basisebene oder bereiten Sie unterschiedliche Texturen/Materialien vor.
  2. Fügen Sie in der Klasse Base Code hinzu, um bei jedem Levelanstieg Modelle oder Materialien auszutauschen.

Hier ist ein Codeausschnitt zum Aktualisieren von Bildern im Skript Base:

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);
    }
}

Dieser Code aktiviert das Modell, das dem aktuellen Level der Basis entspricht, und deaktiviert die anderen.

5. Erstellen einer Benutzeroberfläche für Upgrades

Erstellen Sie als Nächstes UI-Elemente, mit denen der Spieler Upgrades einleiten und den aktuellen Stand der Basis verfolgen kann. Gehen Sie dazu wie folgt vor:

  1. Erstellen Sie ein Canvas mit einer Schaltfläche mit der Bezeichnung "Upgrade Base".
  2. Fügen Sie dieser Schaltfläche ein OnClick-Ereignis hinzu und verknüpfen Sie es mit der Methode AttemptUpgrade des UpgradeManager.
  3. Zeigen Sie das Level, die Gesundheit und die Produktionsrate der Basis auf der Benutzeroberfläche an, um den Spielern Feedback zum Upgrade-Fortschritt zu geben.

6. Testen des Upgrade-Systems

Starten Sie das Spiel und klicken Sie auf die Schaltfläche "Upgrade Base". Mit jedem Upgrade sollten die Attribute der Basis verbessert werden und die visuelle Darstellung sollte sich entsprechend ändern. Verwenden Sie das Debug-Protokoll, um Währungsänderungen und Levelanpassungen zu überprüfen.

Erweiterung des Systems

Dieses grundlegende Upgrade-System kann durch Hinzufügen folgender Elemente erweitert werden:

  • Neue Level mit besonderen Eigenschaften und visuellen Verbesserungen.
  • Ressourcenbedarf, der über das Geld hinausgeht, wie etwa Materialien oder Zeit.
  • Spezialeffekte für Upgrades, wie Partikeleffekte oder Sound-Feedback.

Abschluss

Wir haben in Unity ein Basis-Upgradesystem mit dynamischen Attributerhöhungen, einer einfachen Währungsprüfung und einer Benutzeroberfläche für Upgrades erstellt. Dieses System bietet eine Grundlage für das Hinzufügen komplexerer Mechanismen in Ihr Spiel, wie mehrstufige Upgrades und unterschiedliche Grafiken für jedes Level.