Basisupgradesysteem in Unity

In veel games kunnen spelers een basis of gebouw upgraden om extra functies te ontgrendelen, de verdediging te verbeteren of de productiesnelheid te verhogen. Deze tutorial begeleidt je door het opzetten van een basisupgradesysteem in Unity, waardoor een gebouw kan worden geüpgraded naar meerdere niveaus met visuele en functionele veranderingen op elk niveau.

1. De basisstructuur opzetten

Maak eerst een Base-script dat de eigenschappen van je basis definieert, zoals het level, de gezondheid en de productiesnelheid. Elke levelupgrade wijzigt deze attributen.

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

Dit Base-script bevat een eenvoudige UpgradeBase()-methode die het level verhoogt en de attributen van de base upgradet. Koppel dit script aan de base GameObject in de scene.

2. Een upgrademanager maken

Maak vervolgens een UpgradeManager-script dat de basisupgrades beheert, inclusief het controleren of de speler genoeg valuta heeft om te upgraden.

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

Koppel dit UpgradeManager-script aan een GameObject, wijs het basis GameObject toe aan het veld playerBase en stel de initiële upgradeCost in. Elke upgrade verhoogt de kosten, waardoor toekomstige upgrades moeilijker worden.

3. Een valutasysteem opzetten

Om upgradekosten te beheren, voegt u een CurrencySystem toe als een eenvoudige manier om de valuta van de speler bij te houden en uit te geven. Hier is een voorbeeld:

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

Koppel dit CurrencySystem aan een GameObject in de scène. Het singletonpatroon biedt gemakkelijke toegang vanuit andere scripts, zoals de UpgradeManager.

4. Visuals en effecten per niveau bijwerken

Om elke basisupgrade visueel onderscheidend te maken, voegt u variaties toe voor elk level, zoals verschillende modellen of texturen. Bijvoorbeeld:

  1. Maak meerdere 3D-modellen voor elk basisniveau of bereid verschillende texturen/materialen voor.
  2. Voeg code toe aan de klasse Base om modellen of materialen te wisselen telkens wanneer het niveau wordt verhoogd.

Hier is een codefragment voor het bijwerken van visuals in het Base-script:

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

Met deze code activeer je het model dat overeenkomt met het huidige level van de basis en deactiveer je de andere modellen.

5. Een gebruikersinterface voor upgrades maken

Maak vervolgens UI-elementen om de speler in staat te stellen upgrades te initiëren en het huidige niveau van de basis te volgen. Om dit te doen:

  1. Maak een canvas met een knop met het label "Upgrade Base".
  2. Koppel een OnClick-gebeurtenis aan deze knop en koppel deze aan de AttemptUpgrade-methode van de UpgradeManager.
  3. Geef het niveau, de gezondheid en de productiesnelheid van de basis weer in de gebruikersinterface, zodat spelers feedback krijgen over de voortgang van de upgrade.

6. Het upgradesysteem testen

Start het spel en klik op de "Upgrade Base"-knop. Met elke upgrade zouden de attributen van de basis moeten toenemen en de visuals zouden dienovereenkomstig moeten veranderen. Gebruik het Debug-logboek om valutawijzigingen en levelaanpassingen te verifiëren.

Uitbreiding van het systeem

Dit basisupgradesysteem kan worden uitgebreid door het volgende toe te voegen:

  • Nieuwe levels met unieke kenmerken en visuele verbeteringen.
  • Hulpbronvereisten die verder gaan dan alleen geld, zoals materialen of tijd.
  • Speciale effecten voor upgrades, zoals deeltjeseffecten of geluidsfeedback.

Conclusie

We hebben een basisupgradesysteem in Unity gemaakt, met dynamische attribuutverhogingen, een eenvoudige valutacontrole en UI voor upgrades. Dit systeem biedt een basis voor het toevoegen van complexere mechanismen aan je spel, zoals multi-stage upgrades en aparte visuals voor elk level.