Crearea unui joc asemănător Clash of Clans în Unity Pt. 2

În această a doua parte a seria noastră de tutoriale, vom implementa mecanisme de trupe pentru atac și apărare în jocul nostru asemănător Clash of Clans. Vom crea unități de trupe, le vom gestiona mișcarea și comportamentul și le vom permite jucătorilor să le desfășoare în timpul atacurilor.

Configurarea prefabricatelor pentru trupe

În primul rând, trebuie să creăm prefabricate de trupe care reprezintă diferite unități din joc.

  1. Creați un nou GameObject pentru trupa dvs. făcând clic dreapta în Hierarchy și selectând 2D Object > Sprite.
  2. Numiți-i Warrior și atribuiți un sprite din activele dvs.
  3. Atașați un nou script numit Troop pentru a gestiona logica trupelor.
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);
    }
}

Crearea unui manager de trupe

Vom crea un manager de trupe care se ocupă de desfășurarea trupelor și gestionează trupele active pe câmpul de luptă.

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

Implementarea mecanicii de atac

Pentru a ataca, vom crea un sistem de bază în care trupele pot ataca clădiri sau alte unități.

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

Desfășurarea trupelor din interfața de utilizare

Apoi, vom configura un buton simplu de interfață pentru a desfășura trupe. În Canvas, creați un buton și atribuiți funcția de implementare.

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

Adăugarea Apărării Inamicului

Pentru a face jocul mai interactiv, să implementăm apărări inamice care vor ataca trupele.

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

Concluzie

În acest tutorial, am implementat mecanica de bază a trupelor pentru atac și apărare în jocul nostru asemănător Clash of Clans. Am acoperit desfășurarea trupelor, mișcarea, comportamentul de atac și apărarea inamicului. Puteți extinde aceste mecanici și mai mult adăugând tipuri de trupe, abilități speciale și AI inamic mai complex.

Următorii pași