Membuat Game Mirip Clash of Clans di Unity Pt. 4

Di bagian keempat dari seri tutorial ini, kami akan menerapkan kemampuan khusus untuk berbagai jenis pasukan dalam permainan ala Clash of Clans. Kemampuan khusus menambah kedalaman dan strategi pada permainan, menjadikan setiap pasukan unik dan lebih menarik.

Mendefinisikan Jenis Pasukan

Pertama, mari kita definisikan berbagai jenis pasukan beserta kemampuannya masing-masing. Kita akan membuat kelas dasar yang disebut Pasukan dan memperoleh jenis pasukan tertentu darinya.

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

Membuat Jenis Pasukan Tertentu

Sekarang, mari kita buat kelas pasukan khusus yang mewarisi kelas Pasukan dan terapkan kemampuan khusus unik mereka.

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

Memicu Kemampuan Khusus

Kita perlu cara untuk memicu kemampuan khusus selama pertempuran. Kita dapat menambahkan metode di CombatManager untuk mengizinkan pasukan menggunakan kemampuan mereka.

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

Menambahkan Cooldown pada Kemampuan Khusus

Untuk mencegah spam kemampuan khusus, kita dapat menambahkan mekanisme cooldown untuk setiap jenis pasukan.

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

Membuat UI untuk Kemampuan Khusus

Ada baiknya untuk memiliki elemen UI yang menunjukkan kapan pasukan dapat menggunakan kemampuan khusus mereka. Anda dapat membuat tombol UI sederhana untuk setiap pasukan yang memicu kemampuan mereka.

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

Kesimpulan

Dalam tutorial ini, kami menerapkan kemampuan khusus untuk berbagai jenis pasukan, yang meningkatkan strategi permainan dalam permainan ala Clash of Clans. Dengan menciptakan kelas pasukan yang unik, memicu kemampuan, dan mengelola cooldown, kami dapat menawarkan pengalaman pertempuran yang lebih dinamis kepada para pemain.