Membuat Game Mirip Clash of Clans di Unity Pt. 2

Di bagian kedua dari seri tutorial ini, kami akan menerapkan mekanisme pasukan untuk menyerang dan bertahan dalam permainan ala Clash of Clans. Kami akan membuat unit pasukan, mengelola pergerakan dan perilaku mereka, dan memungkinkan pemain untuk mengerahkan mereka selama serangan.

Mendirikan Pasukan Prefabrikasi

Pertama, kita perlu membuat prefab pasukan yang mewakili unit-unit berbeda dalam permainan.

  1. Buat GameObject baru untuk pasukan Anda dengan mengklik kanan di Hirarki dan pilih Objek 2D > Sprite.
  2. Beri nama Prajurit dan tetapkan sprite dari aset Anda.
  3. Lampirkan skrip baru bernama Pasukan untuk menangani logika pasukan.
using UnityEngine;

public class Troop : MonoBehaviour
{
    public float movementSpeed = 2f;
    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()
    {
        // Logic for attacking the target
        Debug.Log("Attacking " + target.name);
    }
}

Membuat Manajer Pasukan

Kami akan membuat Manajer Pasukan yang menangani penempatan pasukan dan mengelola pasukan aktif di medan perang.

using System.Collections.Generic;
using UnityEngine;

public class TroopManager : MonoBehaviour
{
    public GameObject troopPrefab;
    private List activeTroops = new List();

    public void DeployTroop(Vector3 position)
    {
        GameObject troopObject = Instantiate(troopPrefab, position, Quaternion.identity);
        Troop troop = troopObject.GetComponent();
        activeTroops.Add(troop);
    }

    void Update()
    {
        // Here we can handle troop behaviors or remove them if needed
        for (int i = activeTroops.Count - 1; i >= 0; i--)
        {
            if (activeTroops[i] == null)
            {
                activeTroops.RemoveAt(i);
            }
        }
    }
}

Menerapkan Mekanisme Serangan

Untuk menyerang, kami akan membuat sistem dasar di mana pasukan dapat menyerang bangunan atau unit lainnya.

using UnityEngine;

public class Building : MonoBehaviour
{
    public int health = 50;

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

Menerjunkan Pasukan dari UI

Selanjutnya, kita akan menyiapkan tombol UI sederhana untuk mengerahkan pasukan. Di Canvas, buat tombol dan tetapkan fungsi pengerahan.

using UnityEngine;
using UnityEngine.UI;

public class UIManager : MonoBehaviour
{
    public TroopManager troopManager;
    public Button deployButton;

    void Start()
    {
        deployButton.onClick.AddListener(OnDeployButtonClicked);
    }

    private void OnDeployButtonClicked()
    {
        Vector3 deployPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        deployPosition.z = 0; // Set z to 0 for 2D
        troopManager.DeployTroop(deployPosition);
    }
}

Menambahkan Pertahanan Musuh

Untuk membuat permainan lebih interaktif, mari terapkan pertahanan musuh yang akan menyerang pasukan.

public class EnemyDefense : MonoBehaviour
{
    public float attackRange = 2f;
    public int damage = 5;
    private Troop target;

    void Update()
    {
        if (target != null)
        {
            if (Vector2.Distance(transform.position, target.transform.position) < attackRange)
            {
                Attack();
            }
        }
    }

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

    private void Attack()
    {
        // Logic to damage the target troop
        Debug.Log("Attacking troop " + target.name);
        target.TakeDamage(damage);
    }
}

Kesimpulan

Dalam tutorial ini, kami telah menerapkan mekanisme dasar pasukan untuk menyerang dan bertahan dalam permainan mirip Clash of Clans. Kami membahas penempatan pasukan, pergerakan, perilaku menyerang, dan pertahanan musuh. Anda dapat memperluas mekanisme ini lebih jauh dengan menambahkan jenis pasukan, kemampuan khusus, dan AI musuh yang lebih kompleks.

Langkah Berikutnya