使用 Unity 创建类似部落冲突的游戏 Pt. 2
在我们的 教程系列 的第二部分中,我们将在类似《部落冲突》的游戏中实现用于进攻和防守的部队机制。我们将创建部队单位,管理其移动和行为,并允许玩家在进攻期间部署它们。
设置部队预制件
首先,我们需要创建代表游戏中不同单位的部队预制件。
- 通过在 Hierarchy 中单击鼠标右键并选择 2D Object > Sprite 为您的部队创建一个新的 GameObject。
- 将其命名为 Warrior 并从您的资产中分配一个精灵。
- 附加一个名为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 进一步扩展这些机制。