Opret et Clash of Clans-lignende spil i Unity Pt. 4

I denne fjerde del af vores tutorialserie implementerer vi specielle evner for forskellige troppetyper i vores Clash of Clans-lignende spil. Særlige evner tilføjer dybde og strategi til gameplayet, hvilket gør hver troppe unik og mere engagerende.

Definition af troppetyper

Lad os først definere forskellige troppetyper med deres respektive evner. Vi opretter en basisklasse kaldet Troop og udleder specifikke troppetyper fra den.

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

Oprettelse af specifikke troppetyper

Lad os nu skabe specifikke troppeklasser, der arver fra Troop-klassen og implementere deres unikke specielle evner.

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

Udløser særlige evner

Vi har brug for en måde at udløse specielle evner under kamp. Vi kan tilføje en metode i CombatManager for at tillade tropper at bruge deres evner.

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

Tilføjelse af nedkøling til specielle evner

For at forhindre spamming af specielle evner, kan vi tilføje en nedkølingsmekanisme til hver troppetype.

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

Oprettelse af brugergrænseflade til specielle evner

Det er nyttigt at have et UI-element, der viser, hvornår en tropp kan bruge deres særlige evner. Du kan oprette en simpel UI-knap for hver troppe, der udløser deres evner.

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

Konklusion

I denne tutorial implementerede vi specielle evner til forskellige troppetyper, hvilket forbedrede det strategiske gameplay i vores Clash of Clans-lignende spil. Ved at skabe unikke troppeklasser, udløse evner og administrere nedkøling, kan vi tilbyde spillere mere dynamiske kampoplevelser.