Lag et Clash of Clans-lignende spill i Unity Pt. 3
I denne tredje delen av vår opplæringsserie, vil vi implementere et kampsystem for å gjøre det mulig for spillere å engasjere seg med andre spillere eller AI. Dette inkluderer håndtering av troppeinteraksjoner, helse, kampanimasjoner og den generelle kampmekanikken.
Forbedre troppsklassen
Vi må forbedre den eksisterende Troop-klassen for å håndtere kamper bedre. Dette vil inkludere sporing av helse og håndtering av angrep fra både spillere og AI.
using UnityEngine;
public class Troop : MonoBehaviour
{
public float movementSpeed = 2f;
public int health = 50; // Added health property
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()
{
// Attack the target
Building building = target.GetComponent();
if (building != null)
{
building.TakeDamage(damage);
Debug.Log(name + " attacked " + target.name);
}
}
public void TakeDamage(int damage)
{
health -= damage;
Debug.Log(name + " takes " + damage + " damage.");
if (health <= 0)
{
Destroy(gameObject);
Debug.Log(name + " destroyed!");
}
}
}
Opprette en Combat Manager
Vi vil lage en CombatManager som vil håndtere interaksjoner mellom tropper, inkludert oppdage når tropper er innenfor rekkevidde for å angripe og administrere målene deres.
using UnityEngine;
using System.Collections.Generic;
public class CombatManager : MonoBehaviour
{
public List playerTroops;
public List enemyTroops;
void Update()
{
foreach (Troop troop in playerTroops)
{
FindTarget(troop, enemyTroops);
}
foreach (Troop troop in enemyTroops)
{
FindTarget(troop, playerTroops);
}
}
private void FindTarget(Troop troop, List enemyTroops)
{
foreach (Troop enemy in enemyTroops)
{
if (Vector2.Distance(troop.transform.position, enemy.transform.position) < troop.attackRange)
{
troop.SetTarget(enemy.gameObject);
return; // Exit after setting the first target
}
}
troop.SetTarget(null); // No target found
}
}
Implementering av AI-atferd
For å gjøre kampen mer engasjerende, kan vi implementere grunnleggende AI-adferd for fiendtlige tropper.
public class EnemyAI : MonoBehaviour
{
public float patrolRange = 5f;
private Vector2 startPosition;
void Start()
{
startPosition = transform.position;
}
void Update()
{
// Simple patrol logic
transform.Translate(Vector2.right * Mathf.Sin(Time.time) * Time.deltaTime);
// Check if the troop is in range to attack
Troop troop = GetComponent();
if (troop != null && troop.target == null)
{
// Find a new target
CombatManager combatManager = FindObjectOfType();
combatManager.FindTarget(troop, combatManager.playerTroops);
}
}
}
Lage kampanimasjoner
For å forbedre den visuelle appellen til kamp, kan vi legge til enkle animasjoner til troppene våre. Du kan bruke Unitys Animator-komponent til å sette opp grunnleggende angrepsanimasjoner.
- Importer troppeanimasjonene dine til Unity.
- I Troop-klassen lager du en offentlig Animator-variabel.
- Utløs animasjonen under Attack-metoden.
public class Troop : MonoBehaviour
{
public Animator animator; // Add this line
private void Attack()
{
animator.SetTrigger("Attack"); // Trigger attack animation
// ... rest of the attack logic
}
}
Opprette et Combat UI
Vi vil implementere et enkelt brukergrensesnitt for å vise helsefelt for tropper og annen relevant kampinformasjon.
- I Hierarchy oppretter du et nytt UI > Canvas.
- Legg til UI > Image-elementer for å representere helsestreker for hver tropp.
- Bruk et skript for å oppdatere helselinjene basert på troppens helse.
using UnityEngine;
using UnityEngine.UI;
public class HealthBar : MonoBehaviour
{
public Troop troop;
public Image healthBar;
void Update()
{
float healthPercentage = (float)troop.health / 50; // Assuming max health is 50
healthBar.fillAmount = healthPercentage;
}
}
Konklusjon
I denne opplæringen har vi lagt til et kampsystem som lar spillere engasjere seg med andre spillere eller AI. Vi implementerte troppeinteraksjoner, helsestyring, kampanimasjoner og brukergrensesnitt for helsestatus. Dette danner grunnlaget for en mer interaktiv og strategisk spillopplevelse i ditt Clash of Clans-lignende spill.