Створення гри, схожої на Clash of Clans, в Unity Pt. 2
У цій другій частині нашої серії навчальних посібників ми запровадимо механіку військ для нападу та захисту в нашій грі, схожій на Clash of Clans. Ми будемо створювати військові підрозділи, керувати їхнім пересуванням і поведінкою, а також дозволити гравцям розгортати їх під час атак.
Налаштування військових збірних
По-перше, нам потрібно створити префаби військ, які представляють різні одиниці в грі.
- Створіть новий GameObject для свого загону, клацнувши правою кнопкою миші Hierarchy і вибравши 2D Object > Sprite.
- Назвіть його Воїн і призначте спрайт зі своїх ресурсів.
- Додайте новий сценарій під назвою Troop для обробки логіки військ.
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);
}
}
Створення Troop Manager
Ми створимо Troop Manager, який займатиметься розгортанням військ і керуватиме активними військами на полі бою.
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);
}
}
}
}
Впровадження механіки атаки
Для атаки ми створимо базову систему, де війська зможуть атакувати будівлі чи інші одиниці.
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!");
}
}
}
Розгортання військ з інтерфейсу користувача
Далі ми налаштуємо просту кнопку інтерфейсу користувача для розгортання військ. У Canvas створіть кнопку та призначте функцію розгортання.
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);
}
}
Додавання оборони ворога
Щоб зробити гру більш інтерактивною, давайте реалізуємо захист противника, який буде атакувати війська.
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);
}
}
Висновок
У цьому посібнику ми реалізували базову механіку військ для нападу та захисту в нашій грі, схожій на Clash of Clans. Ми розглянули розгортання військ, пересування, атакуючу поведінку та захист противника. Ви можете розширити цю механіку, додавши типи військ, спеціальні здібності та складніший ШІ ворога.