Crearea unui joc asemănător Clash of Clans în Unity Pt. 4

În această a patra parte a seria noastră de tutoriale, vom implementa abilități speciale pentru diferite tipuri de trupe în jocul nostru asemănător Clash of Clans. Abilitățile speciale adaugă profunzime și strategie jocului, făcând fiecare trupă unică și mai captivantă.

Definirea tipurilor de trupe

Mai întâi, să definim diferite tipuri de trupe cu abilitățile lor respective. Vom crea o clasă de bază numită Troop și vom obține anumite tipuri de trupe din aceasta.

using UnityEngine;

public abstract class Troop : MonoBehaviour
{
    public float movementSpeed = 2f;
    public int health = 50;
    public int damage = 10;
    public float attackRange = 1f;

    public abstract void SpecialAbility(); // Abstract method for special ability

    public void TakeDamage(int damage)
    {
        health -= damage;
        Debug.Log(name + " takes " + damage + " damage.");
        
        if (health <= 0)
        {
            Destroy(gameObject);
            Debug.Log(name + " destroyed!");
        }
    }

    // Other existing methods...
}

Crearea unor tipuri de trupe specifice

Acum, să creăm clase de trupe specifice care moștenesc din clasa Troop și să le implementăm abilitățile speciale unice.

// Warrior Troop
public class Warrior : Troop
{
    public override void SpecialAbility()
    {
        // Example: Increase damage temporarily
        damage *= 2;
        Debug.Log(name + " activates special ability: Double Damage!");
    }
}

// Archer Troop
public class Archer : Troop
{
    public override void SpecialAbility()
    {
        // Example: Long-range attack
        attackRange *= 2;
        Debug.Log(name + " activates special ability: Long Range!");
    }
}

Declanșarea abilităților speciale

Avem nevoie de o modalitate de a declanșa abilități speciale în timpul luptei. Putem adăuga o metodă în CombatManager pentru a permite trupelor să-și folosească abilitățile.

public class CombatManager : MonoBehaviour
{
    public List playerTroops;
    public List enemyTroops;

    void Update()
    {
        foreach (Troop troop in playerTroops)
        {
            FindTarget(troop, enemyTroops);
            if (Input.GetKeyDown(KeyCode.Space)) // Press Space to use special ability
            {
                troop.SpecialAbility();
            }
        }

        foreach (Troop troop in enemyTroops)
        {
            FindTarget(troop, playerTroops);
            // Optional: Add AI logic to use special abilities
        }
    }

    private void FindTarget(Troop troop, List enemyTroops)
    {
        foreach (Troop enemy in enemyTroops)
        {
            if (Vector2.Distance(troop.transform.position, enemy.transform.position) < troop.attackRange)
            {
                troop.SetTarget(enemy.gameObject);
                return; // Exit after setting the first target
            }
        }

        troop.SetTarget(null); // No target found
    }
}

Adăugarea timpilor de recădere la abilitățile speciale

Pentru a preveni spam-ul abilităților speciale, putem adăuga un mecanism de răcire fiecărui tip de trupă.

public abstract class Troop : MonoBehaviour
{
    // Existing properties...
    public float specialAbilityCooldown = 5f;
    private float lastAbilityTime;

    public virtual void SpecialAbility()
    {
        if (Time.time >= lastAbilityTime + specialAbilityCooldown)
        {
            lastAbilityTime = Time.time;
            // Override in derived classes
        }
        else
        {
            Debug.Log(name + " ability on cooldown.");
        }
    }

    // Other existing methods...
}

Crearea interfeței de utilizare pentru abilități speciale

Este util să aveți un element UI care arată când o trupă își poate folosi abilitatea specială. Puteți crea un buton simplu de interfață pentru fiecare trupă care declanșează capacitatea lor.

using UnityEngine;
using UnityEngine.UI;

public class UIManager : MonoBehaviour
{
    public Troop troop;
    public Button specialAbilityButton;

    void Start()
    {
        specialAbilityButton.onClick.AddListener(OnSpecialAbilityClicked);
    }

    private void OnSpecialAbilityClicked()
    {
        troop.SpecialAbility();
    }

    void Update()
    {
        // Update button state based on cooldown if needed
    }
}

Concluzie

În acest tutorial, am implementat abilități speciale pentru diferite tipuri de trupe, îmbunătățind jocul strategic în jocul nostru asemănător Clash of Clans. Prin crearea unor clase de trupe unice, declanșarea abilităților și gestionarea perioadelor de răcire, le putem oferi jucătorilor experiențe de luptă mai dinamice.