Створення гри, схожої на Clash of Clans, в Unity Pt. 3

У цій третій частині нашої серії навчальних посібників ми запровадимо бойову систему, яка дозволить гравцям взаємодіяти з іншими гравцями або ШІ. Це включає в себе керування взаємодією військ, здоров’ям, бойовою анімацією та загальною бойовою механікою.

Підвищення класу військ

Нам потрібно вдосконалити існуючий клас Troop, щоб краще впоратися з боями. Це включатиме відстеження здоров’я та обробку атак як від гравців, так і від ШІ.

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

Створення Combat Manager

Ми створимо CombatManager, який керуватиме взаємодією між військами, зокрема виявлятиме, коли війська знаходяться в радіусі атаки, і керуватиме їхніми цілями.

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

Впровадження AI Behavior

Щоб зробити бій більш захоплюючим, ми можемо реалізувати базову поведінку ШІ для ворожих військ.

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

Створення бойових анімацій

Щоб підвищити візуальну привабливість бою, ми можемо додати прості анімації до наших військ. Ви можете використовувати компонент Unity Animator для налаштування базової анімації атаки.

  1. Імпортуйте анімацію своїх військ у Unity.
  2. У класі Troop створіть загальнодоступну змінну Animator.
  3. Запустити анімацію під час методу Attack.
public class Troop : MonoBehaviour
{
    public Animator animator; // Add this line

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

Створення бойового інтерфейсу

Ми запровадимо простий інтерфейс користувача для відображення смуг здоров’я для військ та іншої відповідної бойової інформації.

  1. У Hierarchy створіть новий UI > Canvas.
  2. Додайте елементи UI > Image, щоб відобразити шкали здоров’я для кожного війська.
  3. Використовуйте сценарій, щоб оновити смужки здоров'я на основі здоров'я війська.
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;
    }
}

Висновок

У цьому посібнику ми додали бойову систему, яка дозволяє гравцям взаємодіяти з іншими гравцями або ШІ. Ми впровадили взаємодію військ, управління здоров’ям, бойову анімацію та інтерфейс користувача для стану здоров’я. Це створює основу для більш інтерактивного та стратегічного ігрового процесу у вашій грі, схожій на Clash of Clans.

Наступні кроки