Criando um jogo semelhante ao Clash of Clans no Unity Pt. 2

Nesta segunda parte da nossa série de tutoriais, implementaremos mecânicas de tropas para atacar e defender em nosso jogo estilo Clash of Clans. Criaremos unidades de tropas, gerenciaremos seus movimentos e comportamentos e permitiremos que os jogadores as implantem durante os ataques.

Configurando Prefabs de Tropas

Primeiro, precisamos criar grupos de tropas que representem diferentes unidades no jogo.

  1. Crie um novo GameObject para sua tropa clicando com o botão direito do mouse em Hierarquia e selecionando Objeto 2D > Sprite.
  2. Nomeie-o como Guerreiro e atribua um sprite dos seus recursos.
  3. Anexe um novo script chamado Troop para manipular a lógica das 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);
    }
}

Criando um gerente de tropa

Criaremos um gerente de tropas que cuidará da distribuição de tropas e gerenciará as tropas ativas no campo de batalha.

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

Implementando a mecânica de ataque

Para atacar, criaremos um sistema básico onde as tropas podem atacar edifícios ou outras 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!");
        }
    }
}

Implantando tropas pela interface do usuário

Em seguida, configuraremos um botão de UI simples para implantar tropas. No Canvas, crie um botão e atribua a função de implantação.

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

Adicionando Defesa Inimiga

Para tornar o jogo mais interativo, vamos implementar defesas inimigas que atacarão as 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);
    }
}

Conclusão

Neste tutorial, implementamos mecânicas básicas de tropas para atacar e defender em nosso jogo estilo Clash of Clans. Cobrimos a implantação de tropas, movimento, comportamento de ataque e defesas inimigas. Você pode expandir essas mecânicas ainda mais adicionando tipos de tropas, habilidades especiais e IA inimiga mais complexa.

Próximos passos