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

I denne tredje delen av vår opplæringsserie, vil vi implementere et kampsystem for å gjøre det mulig for spillere å engasjere seg med andre spillere eller AI. Dette inkluderer håndtering av troppeinteraksjoner, helse, kampanimasjoner og den generelle kampmekanikken.

Forbedre troppsklassen

Vi må forbedre den eksisterende Troop-klassen for å håndtere kamper bedre. Dette vil inkludere sporing av helse og håndtering av angrep fra både spillere og AI.

using UnityEngine;

public class Troop : MonoBehaviour
{
    public float movementSpeed = 2f;
    public int health = 50; // Added health property
    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()
    {
        // Attack the target
        Building building = target.GetComponent();
        if (building != null)
        {
            building.TakeDamage(damage);
            Debug.Log(name + " attacked " + target.name);
        }
    }

    public void TakeDamage(int damage)
    {
        health -= damage;
        Debug.Log(name + " takes " + damage + " damage.");
        
        if (health <= 0)
        {
            Destroy(gameObject);
            Debug.Log(name + " destroyed!");
        }
    }
}

Opprette en Combat Manager

Vi vil lage en CombatManager som vil håndtere interaksjoner mellom tropper, inkludert oppdage når tropper er innenfor rekkevidde for å angripe og administrere målene deres.

using UnityEngine;
using System.Collections.Generic;

public class CombatManager : MonoBehaviour
{
    public List playerTroops;
    public List enemyTroops;

    void Update()
    {
        foreach (Troop troop in playerTroops)
        {
            FindTarget(troop, enemyTroops);
        }

        foreach (Troop troop in enemyTroops)
        {
            FindTarget(troop, playerTroops);
        }
    }

    private void FindTarget(Troop troop, List enemyTroops)
    {
        foreach (Troop enemy in enemyTroops)
        {
            if (Vector2.Distance(troop.transform.position, enemy.transform.position) < troop.attackRange)
            {
                troop.SetTarget(enemy.gameObject);
                return; // Exit after setting the first target
            }
        }

        troop.SetTarget(null); // No target found
    }
}

Implementering av AI-atferd

For å gjøre kampen mer engasjerende, kan vi implementere grunnleggende AI-adferd for fiendtlige tropper.

public class EnemyAI : MonoBehaviour
{
    public float patrolRange = 5f;
    private Vector2 startPosition;

    void Start()
    {
        startPosition = transform.position;
    }

    void Update()
    {
        // Simple patrol logic
        transform.Translate(Vector2.right * Mathf.Sin(Time.time) * Time.deltaTime);

        // Check if the troop is in range to attack
        Troop troop = GetComponent();
        if (troop != null && troop.target == null)
        {
            // Find a new target
            CombatManager combatManager = FindObjectOfType();
            combatManager.FindTarget(troop, combatManager.playerTroops);
        }
    }
}

Lage kampanimasjoner

For å forbedre den visuelle appellen til kamp, ​​kan vi legge til enkle animasjoner til troppene våre. Du kan bruke Unitys Animator-komponent til å sette opp grunnleggende angrepsanimasjoner.

  1. Importer troppeanimasjonene dine til Unity.
  2. I Troop-klassen lager du en offentlig Animator-variabel.
  3. Utløs animasjonen under Attack-metoden.
public class Troop : MonoBehaviour
{
    public Animator animator; // Add this line

    private void Attack()
    {
        animator.SetTrigger("Attack"); // Trigger attack animation
        // ... rest of the attack logic
    }
}

Opprette et Combat UI

Vi vil implementere et enkelt brukergrensesnitt for å vise helsefelt for tropper og annen relevant kampinformasjon.

  1. I Hierarchy oppretter du et nytt UI > Canvas.
  2. Legg til UI > Image-elementer for å representere helsestreker for hver tropp.
  3. Bruk et skript for å oppdatere helselinjene basert på troppens helse.
using UnityEngine;
using UnityEngine.UI;

public class HealthBar : MonoBehaviour
{
    public Troop troop;
    public Image healthBar;

    void Update()
    {
        float healthPercentage = (float)troop.health / 50; // Assuming max health is 50
        healthBar.fillAmount = healthPercentage;
    }
}

Konklusjon

I denne opplæringen har vi lagt til et kampsystem som lar spillere engasjere seg med andre spillere eller AI. Vi implementerte troppeinteraksjoner, helsestyring, kampanimasjoner og brukergrensesnitt for helsestatus. Dette danner grunnlaget for en mer interaktiv og strategisk spillopplevelse i ditt Clash of Clans-lignende spill.

Neste trinn