Створення гри, схожої на 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 для налаштування базової анімації атаки.
- Імпортуйте анімацію своїх військ у Unity.
- У класі Troop створіть загальнодоступну змінну Animator.
- Запустити анімацію під час методу 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
}
}
Створення бойового інтерфейсу
Ми запровадимо простий інтерфейс користувача для відображення смуг здоров’я для військ та іншої відповідної бойової інформації.
- У Hierarchy створіть новий UI > Canvas.
- Додайте елементи UI > Image, щоб відобразити шкали здоров’я для кожного війська.
- Використовуйте сценарій, щоб оновити смужки здоров'я на основі здоров'я війська.
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.