Lag et Clash of Clans-lignende spill i Unity Pt. 2

I denne andre delen av vår opplæringsserie, vil vi implementere troppemekanikk for å angripe og forsvare i vårt Clash of Clans-lignende spill. Vi vil opprette troppsenheter, administrere deres bevegelser og oppførsel, og la spillere utplassere dem under angrep.

Sette opp troppeprefabrikker

Først må vi lage tropp-prefabrikker som representerer forskjellige enheter i spillet.

  1. Lag et nytt GameObject for troppen din ved å høyreklikke i Hierarchy og velge 2D Object > Sprite.
  2. Gi det navnet Warrior og tildel en sprite fra eiendelene dine.
  3. Legg ved et nytt skript kalt Troop for å håndtere troppelogikk.
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);
    }
}

Opprette en Troop Manager

Vi vil opprette en troppesjef som håndterer troppedistribusjon og administrerer aktive tropper på slagmarken.

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

Implementering av angrepsmekanikeren

For å angripe vil vi lage et grunnleggende system der tropper kan angripe bygninger eller andre enheter.

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

Utplassering av tropper fra brukergrensesnittet

Deretter setter vi opp en enkel UI-knapp for å distribuere tropper. I lerretet oppretter du en knapp og tilordner distribusjonsfunksjonen.

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

Legger til fiendtlig forsvar

For å gjøre spillet mer interaktivt, la oss implementere fiendtlige forsvar som vil angripe troppene.

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

Konklusjon

I denne opplæringen har vi implementert grunnleggende troppemekanikk for å angripe og forsvare i vårt Clash of Clans-lignende spill. Vi dekket utplassering av tropper, bevegelser, angrepsadferd og fiendens forsvar. Du kan utvide denne mekanikken ytterligere ved å legge til troppetyper, spesielle evner og mer kompleks fiendtlig AI.

Neste trinn