Erstellen eines Clash of Clans-ähnlichen Spiels in Unity, Teil 2

In diesem zweiten Teil unserer Tutorial-Reihe implementieren wir Truppenmechaniken für Angriff und Verteidigung in unserem Clash of Clans-ähnlichen Spiel. Wir erstellen Truppeneinheiten, verwalten ihre Bewegung und ihr Verhalten und ermöglichen es den Spielern, sie bei Angriffen einzusetzen.

Einrichten von Truppen-Prefabs

Zuerst müssen wir Truppen-Prefabs erstellen, die verschiedene Einheiten im Spiel darstellen.

  1. Erstellen Sie ein neues GameObject für Ihre Truppe, indem Sie mit der rechten Maustaste in die Hierarchie klicken und 2D-Objekt > Sprite auswählen.
  2. Nennen Sie es Warrior und weisen Sie ein Sprite aus Ihren Assets zu.
  3. Fügen Sie ein neues Skript namens Troop an, um die Truppenlogik zu handhaben.
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);
    }
}

Einen Truppenmanager erstellen

Wir werden einen Truppenmanager erstellen, der den Truppeneinsatz übernimmt und aktive Truppen auf dem Schlachtfeld verwaltet.

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

Implementierung der Angriffsmechanik

Zum Angreifen erstellen wir ein Basissystem, bei dem Truppen Gebäude oder andere Einheiten angreifen können.

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

Truppen über die Benutzeroberfläche einsetzen

Als Nächstes richten wir eine einfache UI-Schaltfläche zum Einsatz von Truppen ein. Erstellen Sie im Canvas eine Schaltfläche und weisen Sie die Einsatzfunktion zu.

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

Hinzufügen feindlicher Verteidigung

Um das Spiel interaktiver zu gestalten, implementieren wir feindliche Verteidigungsanlagen, die die Truppen angreifen.

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

Abschluss

In diesem Tutorial haben wir grundlegende Truppenmechaniken für Angriff und Verteidigung in unserem Clash of Clans-ähnlichen Spiel implementiert. Wir haben Truppenaufstellung, Bewegung, Angriffsverhalten und feindliche Verteidigung behandelt. Sie können diese Mechaniken weiter ausbauen, indem Sie Truppentypen, Spezialfähigkeiten und eine komplexere feindliche KI hinzufügen.

Nächste Schritte