Skapa ett Clash of Clans-liknande spel i Unity Pt. 2
I den här andra delen av vår tutorialserie kommer vi att implementera truppmekanik för att attackera och försvara i vårt Clash of Clans-liknande spel. Vi kommer att skapa truppenheter, hantera deras rörelser och beteende och tillåta spelare att distribuera dem under attacker.
Konfigurera truppprefabs
Först måste vi skapa truppprefabs som representerar olika enheter i spelet.
- Skapa ett nytt GameObject för din trupp genom att högerklicka i Hierarchy och välja 2D Object > Sprite.
- Döp den till Warrior och tilldela en sprite från dina tillgångar.
- Bifoga ett nytt skript som heter Troop för att hantera trupplogik.
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);
}
}
Skapa en truppchef
Vi kommer att skapa en Troop Manager som hanterar truppplacering och hanterar aktiva trupper på slagfältet.
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);
}
}
}
}
Implementering av attackmekanikern
För att attackera kommer vi att skapa ett grundläggande system där trupper kan attackera byggnader eller andra enheter.
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!");
}
}
}
Utplacera trupper från användargränssnittet
Därefter kommer vi att ställa in en enkel UI-knapp för att distribuera trupper. Skapa en knapp i Canvas och tilldela distributionsfunktionen.
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);
}
}
Lägger till fiendens försvar
För att göra spelet mer interaktivt, låt oss implementera fiendeförsvar som kommer att attackera trupperna.
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);
}
}
Slutsats
I den här handledningen har vi implementerat grundläggande truppmekanik för att attackera och försvara i vårt Clash of Clans-liknande spel. Vi täckte truppplacering, rörelser, attackbeteende och fiendens försvar. Du kan utöka denna mekanik ytterligare genom att lägga till trupptyper, speciella förmågor och mer komplex fientlig AI.