使用 Unity 创建类似部落冲突的游戏 Pt. 2

在我们的 教程系列 的第二部分中,我们将在类似《部落冲突》的游戏中实现用于进攻和防守的部队机制。我们将创建部队单位,管理其移动和行为,并允许玩家在进攻期间部署它们。

设置部队预制件

首先,我们需要创建代表游戏中不同单位的部队预制件。

  1. 通过在 Hierarchy 中单击鼠标右键并选择 2D Object > Sprite 为您的部队创建一个新的 GameObject。
  2. 将其命名为 Warrior 并从您的资产中分配一个精灵。
  3. 附加一个名为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);
    }
}

创建部队管理员

我们将创建一个部队管理员,负责部队部署并管理战场上的现役部队。

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

从用户界面部署部队

接下来,我们将设置一个简单的 UI 按钮来部署部队。在 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);
    }
}

结论

在本教程中,我们在类似《部落冲突》的游戏中实现了用于进攻和防守的基本部队机制。我们介绍了部队部署、移动、攻击行为和敌人防御。您可以通过添加部队类型、特殊能力和更复杂的敌人 AI 进一步扩展这些机制。

下一步