Creando un juego tipo Clash of Clans en Unity, parte 2

En esta segunda parte de nuestra serie de tutoriales , implementaremos mecánicas de tropas para atacar y defender en nuestro juego similar a Clash of Clans. Crearemos unidades de tropas, gestionaremos su movimiento y comportamiento, y permitiremos a los jugadores desplegarlas durante los ataques.

Configuración de prefabricados de tropas

Primero, necesitamos crear prefabricados de tropas que representen diferentes unidades en el juego.

  1. Crea un nuevo GameObject para tu tropa haciendo clic derecho en la Jerarquía y seleccionando Objeto 2D > Sprite.
  2. Nómbralo Guerrero y asígnale un sprite de tus recursos.
  3. Adjunte un nuevo script llamado Troop para manejar la lógica de tropas.
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);
    }
}

Creación de un administrador de tropas

Crearemos un Administrador de Tropas que manejará el despliegue de tropas y administrará las tropas activas en el campo de batalla.

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

Implementación de la mecánica de ataque

Para atacar, crearemos un sistema básico donde las tropas pueden atacar edificios u otras unidades.

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

Despliegue de tropas desde la interfaz de usuario

A continuación, configuraremos un botón de interfaz de usuario simple para desplegar tropas. En el lienzo, crea un botón y asígnale la función de despliegue.

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

Añadiendo defensa contra el enemigo

Para hacer el juego más interactivo, implementemos defensas enemigas que atacarán a las tropas.

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

Conclusión

En este tutorial, hemos implementado mecánicas básicas de tropas para atacar y defender en nuestro juego similar a Clash of Clans. Cubrimos el despliegue de tropas, el movimiento, el comportamiento de ataque y las defensas enemigas. Puedes expandir estas mecánicas aún más agregando tipos de tropas, habilidades especiales y una IA enemiga más compleja.

Próximos pasos