Tạo một trò chơi giống Clash of Clans trong Unity Pt. 2

Trong phần thứ hai của chuỗi hướng dẫn này, chúng ta sẽ triển khai cơ chế quân lính để tấn công và phòng thủ trong trò chơi giống Clash of Clans của chúng ta. Chúng ta sẽ tạo các đơn vị quân lính, quản lý chuyển động và hành vi của chúng, và cho phép người chơi triển khai chúng trong các cuộc tấn công.

Thiết lập quân đội tiền chế

Đầu tiên, chúng ta cần tạo các đơn vị quân mẫu đại diện cho các đơn vị khác nhau trong trò chơi.

  1. Tạo một GameObject mới cho quân của bạn bằng cách nhấp chuột phải vào Hierarchy và chọn 2D Object > Sprite.
  2. Đặt tên là Warrior và gán một sprite từ tài sản của bạn.
  3. Đính kèm một tập lệnh mới có tên là Troop để xử lý logic quân đội.
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);
    }
}

Tạo Quản lý quân đội

Chúng tôi sẽ tạo một Trình quản lý quân đội để xử lý việc triển khai quân đội và quản lý quân đội đang hoạt động trên chiến trường.

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

Triển khai Cơ chế tấn công

Để tấn công, chúng ta sẽ tạo ra một hệ thống cơ bản nơi quân lính có thể tấn công các tòa nhà hoặc các đơn vị khác.

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

Triển khai quân từ UI

Tiếp theo, chúng ta sẽ thiết lập một nút UI đơn giản để triển khai quân. Trong Canvas, tạo một nút và chỉ định chức năng triển khai.

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

Thêm phòng thủ của kẻ thù

Để trò chơi mang tính tương tác hơn, hãy triển khai hệ thống phòng thủ của kẻ thù để tấn công quân địch.

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

Phần kết luận

Trong hướng dẫn này, chúng tôi đã triển khai cơ chế quân cơ bản để tấn công và phòng thủ trong trò chơi giống Clash of Clans của chúng tôi. Chúng tôi đã đề cập đến việc triển khai quân, di chuyển, hành vi tấn công và phòng thủ của kẻ thù. Bạn có thể mở rộng các cơ chế này hơn nữa bằng cách thêm các loại quân, khả năng đặc biệt và AI của kẻ thù phức tạp hơn.

Các bước tiếp theo