Système de mise à niveau de base dans Unity

Dans de nombreux jeux, les joueurs peuvent améliorer une base ou un bâtiment pour débloquer des fonctionnalités supplémentaires, améliorer la défense ou augmenter les taux de production. Ce didacticiel vous guidera dans la mise en place d'un système d'amélioration de base dans Unity, permettant d'améliorer un bâtiment sur plusieurs niveaux avec des changements visuels et fonctionnels à chaque niveau.

1. Mise en place de la structure de base

Tout d'abord, créez un script Base qui définit les propriétés de votre base, comme son niveau, sa santé et son taux de production. Chaque mise à niveau modifiera ces attributs.

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

Ce script Base inclut une méthode simple UpgradeBase() qui incrémente le niveau et met à niveau les attributs de la base. Attachez ce script au GameObject de base dans la scène.

2. Création d'un gestionnaire de mise à niveau

Ensuite, créez un script UpgradeManager qui gère les mises à niveau de base, y compris la vérification si le joueur dispose de suffisamment de monnaie pour effectuer la mise à niveau.

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

Attachez ce script UpgradeManager à un GameObject, attribuez le GameObject de base à son champ playerBase et définissez le upgradeCost initial. Chaque mise à niveau augmente le coût, ce qui rend les mises à niveau futures plus difficiles.

3. Mise en place d'un système monétaire

Pour gérer les coûts de mise à niveau, ajoutez un CurrencySystem comme moyen simple de suivre et de dépenser la monnaie du joueur. Voici un exemple:

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

Attachez ce CurrencySystem à un GameObject dans la scène. Le modèle singleton permet un accès facile à partir d'autres scripts, tels que UpgradeManager.

4. Mise à jour des visuels et des effets par niveau

Pour rendre chaque amélioration de base visuellement distincte, ajoutez des variantes pour chaque niveau, comme des modèles ou des textures différents. Par exemple:

  1. Créez plusieurs modèles 3D pour chaque niveau de base ou préparez différentes textures/matériaux.
  2. Ajoutez du code dans la classe Base pour échanger des modèles ou des matériaux à chaque fois que le niveau augmente.

Voici un extrait de code pour mettre à jour les visuels dans le script 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);
    }
}

Ce code activera le modèle correspondant au niveau actuel de la base et désactivera les autres.

5. Création d'une interface utilisateur pour les mises à niveau

Ensuite, créez des éléments d'interface utilisateur pour permettre au joueur de lancer des mises à niveau et de suivre le niveau actuel de la base. Pour ce faire:

  1. Créez un canevas avec un bouton intitulé "Upgrade Base".
  2. Attachez un événement OnClick à ce bouton, en le liant à la méthode AttemptUpgrade du UpgradeManager.
  3. Affichez le niveau, la santé et le taux de production de la base sur l'interface utilisateur pour donner aux joueurs des informations sur la progression de la mise à niveau.

6. Test du système de mise à niveau

Lancez le jeu et cliquez sur le bouton "Upgrade Base". À chaque mise à niveau, les attributs de la base devraient augmenter et les visuels devraient changer en conséquence. Utilisez le journal de débogage pour vérifier les changements de devise et les ajustements de niveau.

Extension du système

Ce système de mise à niveau de base peut être étendu en ajoutant:

  • Nouveaux niveaux avec des attributs distincts et des améliorations visuelles.
  • Besoins en ressources au-delà de la monnaie, tels que les matériaux ou le temps.
  • Effets spéciaux pour les mises à niveau, comme des effets de particules ou un retour sonore.

Conclusion

Nous avons créé un système de mise à niveau de base dans Unity, avec des augmentations d'attributs dynamiques, une vérification simple de la devise et une interface utilisateur pour les mises à niveau. Ce système fournit une base pour ajouter des mécanismes plus complexes dans votre jeu, tels que des mises à niveau en plusieurs étapes et des visuels distincts pour chaque niveau.