Tworzenie gry podobnej do Clash of Clans w Unity Pt. 4

W tej czwartej części naszego serii samouczków wdrożymy specjalne umiejętności dla różnych typów oddziałów w naszej grze podobnej do Clash of Clans. Specjalne umiejętności dodają głębi i strategii do rozgrywki, czyniąc każdy oddział wyjątkowym i bardziej angażującym.

Definiowanie typów wojsk

Najpierw zdefiniujmy różne typy wojsk z ich odpowiednimi umiejętnościami. Stworzymy klasę bazową o nazwie Troop i wyprowadzimy z niej konkretne typy wojsk.

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

Tworzenie określonych typów wojsk

Teraz utwórzmy konkretne klasy wojsk, które dziedziczą po klasie Troop i zaimplementujmy ich unikalne, specjalne umiejętności.

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

Wyzwalanie specjalnych zdolności

Potrzebujemy sposobu na wyzwalanie specjalnych zdolności podczas walki. Możemy dodać metodę w CombatManager, aby umożliwić żołnierzom korzystanie ze swoich zdolności.

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

Dodawanie czasów odnowienia do umiejętności specjalnych

Aby zapobiec spamowaniu specjalnymi umiejętnościami, możemy dodać mechanizm odnawiania do każdego typu wojsk.

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

Tworzenie interfejsu użytkownika dla umiejętności specjalnych

Przydatny jest element UI, który pokazuje, kiedy oddział może użyć swojej specjalnej zdolności. Możesz utworzyć prosty przycisk UI dla każdego oddziału, który uruchamia jego zdolność.

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

Wniosek

W tym samouczku zaimplementowaliśmy specjalne umiejętności dla różnych typów wojsk, ulepszając strategiczną rozgrywkę w naszej grze podobnej do Clash of Clans. Tworząc unikalne klasy wojsk, wyzwalając umiejętności i zarządzając cooldownami, możemy zaoferować graczom bardziej dynamiczne doświadczenia bojowe.