Een Clash of Clans-achtig spel maken in Unity Pt. 4

In dit vierde deel van onze tutorialserie implementeren we speciale vaardigheden voor verschillende troepentypen in onze Clash of Clans-achtige game. Speciale vaardigheden voegen diepte en strategie toe aan de gameplay, waardoor elke troep uniek en boeiender wordt.

Troepentypen definiëren

Laten we eerst verschillende troepentypen definiëren met hun respectievelijke vaardigheden. We maken een basisklasse genaamd Troop en leiden hier specifieke troepentypen uit af.

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...
}

Specifieke troepentypen creëren

Laten we nu specifieke troepenklassen creëren die overerven van de klasse Troop en hun unieke speciale vaardigheden implementeren.

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

Speciale vaardigheden activeren

We hebben een manier nodig om speciale vaardigheden te activeren tijdens gevechten. We kunnen een methode toevoegen in de CombatManager om troepen hun vaardigheden te laten gebruiken.

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

Cooldowns toevoegen aan speciale vaardigheden

Om te voorkomen dat we speciale vaardigheden spammen, kunnen we een afkoelmechanisme toevoegen aan elk troepentype.

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...
}

Een gebruikersinterface maken voor speciale vaardigheden

Het is handig om een ​​UI-element te hebben dat laat zien wanneer een troep zijn speciale vaardigheid kan gebruiken. Je kunt een eenvoudige UI-knop maken voor elke troep die zijn vaardigheid activeert.

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

Conclusie

In deze tutorial hebben we speciale vaardigheden voor verschillende troepentypen geïmplementeerd, wat de strategische gameplay in onze Clash of Clans-achtige game verbetert. Door unieke troepenklassen te creëren, vaardigheden te activeren en cooldowns te beheren, kunnen we spelers dynamischere gevechtservaringen bieden.