Opret et Clash of Clans-lignende spil i Unity Pt. 2

I denne anden del af vores tutorialserie implementerer vi troppemekanik til angreb og forsvar i vores Clash of Clans-lignende spil. Vi vil skabe troppeenheder, styre deres bevægelser og adfærd og give spillerne mulighed for at implementere dem under angreb.

Opsætning af Troop Prefabs

Først skal vi lave troppepræfabrikater, der repræsenterer forskellige enheder i spillet.

  1. Opret et nyt GameObject til din troppe ved at højreklikke i Hierarchy og vælge 2D Object > Sprite.
  2. Navngiv den Warrior og tildel en sprite fra dine aktiver.
  3. Vedhæft et nyt script kaldet Troop for at håndtere troppelogik.
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);
    }
}

Oprettelse af en Troop Manager

Vi vil oprette en Troop Manager, der håndterer troppedeployering 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 af angrebsmekanikeren

Til angreb vil vi skabe et grundlæggende system, hvor tropper kan angribe bygninger eller andre enheder.

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

Indsættelse af tropper fra brugergrænsefladen

Dernæst opsætter vi en simpel UI-knap til at implementere tropper. I lærredet skal du oprette en knap og tildele implementeringsfunktionen.

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

Tilføjelse af fjendens forsvar

For at gøre spillet mere interaktivt, lad os implementere fjendens forsvar, der vil angribe tropperne.

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

Konklusion

I denne tutorial har vi implementeret grundlæggende troppemekanik til at angribe og forsvare i vores Clash of Clans-lignende spil. Vi dækkede troppeindsættelse, bevægelse, angrebsadfærd og fjendens forsvar. Du kan udvide denne mekanik yderligere ved at tilføje troppetyper, specielle evner og mere kompleks fjendens AI.

Næste trin