Membuat Game Mirip Clash of Clans di Unity Pt. 3

Di bagian ketiga dari seri tutorial ini, kami akan menerapkan sistem pertempuran untuk memungkinkan pemain berinteraksi dengan pemain lain atau AI. Ini termasuk mengelola interaksi pasukan, kesehatan, animasi pertempuran, dan mekanisme pertempuran secara keseluruhan.

Meningkatkan Kelas Pasukan

Kita perlu meningkatkan kelas Troop yang ada untuk menangani pertempuran dengan lebih baik. Ini akan mencakup pelacakan kesehatan dan penanganan serangan dari pemain dan AI.

using UnityEngine;

public class Troop : MonoBehaviour
{
    public float movementSpeed = 2f;
    public int health = 50; // Added health property
    public int damage = 10;
    public float attackRange = 1f;
    private GameObject target;

    void Update()
    {
        if (target != null)
        {
            MoveTowardsTarget();
        }
    }

    public void SetTarget(GameObject newTarget)
    {
        target = newTarget;
    }

    private void MoveTowardsTarget()
    {
        float step = movementSpeed * Time.deltaTime;
        transform.position = Vector2.MoveTowards(transform.position, target.transform.position, step);

        if (Vector2.Distance(transform.position, target.transform.position) < attackRange)
        {
            Attack();
        }
    }

    private void Attack()
    {
        // Attack the target
        Building building = target.GetComponent();
        if (building != null)
        {
            building.TakeDamage(damage);
            Debug.Log(name + " attacked " + target.name);
        }
    }

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

Membuat Manajer Pertempuran

Kita akan membuat CombatManager yang akan menangani interaksi antar pasukan, termasuk mendeteksi saat pasukan berada dalam jangkauan serangan dan mengelola target mereka.

using UnityEngine;
using System.Collections.Generic;

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

    void Update()
    {
        foreach (Troop troop in playerTroops)
        {
            FindTarget(troop, enemyTroops);
        }

        foreach (Troop troop in enemyTroops)
        {
            FindTarget(troop, playerTroops);
        }
    }

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

Menerapkan Perilaku AI

Untuk membuat pertempuran lebih menarik, kita dapat menerapkan perilaku AI dasar untuk pasukan musuh.

public class EnemyAI : MonoBehaviour
{
    public float patrolRange = 5f;
    private Vector2 startPosition;

    void Start()
    {
        startPosition = transform.position;
    }

    void Update()
    {
        // Simple patrol logic
        transform.Translate(Vector2.right * Mathf.Sin(Time.time) * Time.deltaTime);

        // Check if the troop is in range to attack
        Troop troop = GetComponent();
        if (troop != null && troop.target == null)
        {
            // Find a new target
            CombatManager combatManager = FindObjectOfType();
            combatManager.FindTarget(troop, combatManager.playerTroops);
        }
    }
}

Membuat Animasi Pertempuran

Untuk meningkatkan daya tarik visual pertempuran, kita dapat menambahkan animasi sederhana ke pasukan kita. Anda dapat menggunakan komponen Animator Unity untuk mengatur animasi serangan dasar.

  1. Impor animasi pasukan Anda ke Unity.
  2. Di kelas Troop, buat variabel publik Animator.
  3. Picu animasi selama metode Attack.
public class Troop : MonoBehaviour
{
    public Animator animator; // Add this line

    private void Attack()
    {
        animator.SetTrigger("Attack"); // Trigger attack animation
        // ... rest of the attack logic
    }
}

Membuat UI Pertempuran

Kami akan menerapkan UI sederhana untuk menampilkan bilah kesehatan pasukan dan informasi pertempuran relevan lainnya.

  1. Dalam Hierarchy, buat UI > Canvas baru.
  2. Tambahkan elemen UI > Image untuk mewakili bilah kesehatan untuk setiap pasukan.
  3. Gunakan skrip untuk memperbarui bilah kesehatan berdasarkan kesehatan pasukan.
using UnityEngine;
using UnityEngine.UI;

public class HealthBar : MonoBehaviour
{
    public Troop troop;
    public Image healthBar;

    void Update()
    {
        float healthPercentage = (float)troop.health / 50; // Assuming max health is 50
        healthBar.fillAmount = healthPercentage;
    }
}

Kesimpulan

Dalam tutorial ini, kami telah menambahkan sistem pertempuran yang memungkinkan pemain untuk berinteraksi dengan pemain lain atau AI. Kami menerapkan interaksi pasukan, manajemen kesehatan, animasi pertempuran, dan UI untuk status kesehatan. Ini menjadi dasar untuk pengalaman bermain yang lebih interaktif dan strategis dalam permainan seperti Clash of Clans.

Langkah Berikutnya