Unity에서 Clash of Clans와 유사한 게임 만들기 3부
튜토리얼 시리즈의 세 번째 부분에서는 플레이어가 다른 플레이어나 AI와 교류할 수 있는 전투 시스템을 구현합니다. 여기에는 군대 상호 작용, 체력, 전투 애니메이션 및 전반적인 전투 메커니즘 관리가 포함됩니다.
병력 계급 강화
우리는 전투를 더 잘 처리하기 위해 기존의 Troop 클래스를 강화해야 합니다. 여기에는 체력 추적과 플레이어와 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!");
}
}
}
전투 관리자 만들기
부대 간의 상호작용을 처리하고 부대가 공격 범위에 들어왔는지 감지하고 표적을 관리하는 등의 기능을 담당하는 CombatManager를 만들 것입니다.
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
}
}
AI 행동 구현
전투를 더욱 매력적으로 만들기 위해 적군에 대한 기본적인 AI 행동을 구현할 수 있습니다.
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);
}
}
}
전투 애니메이션 만들기
전투의 시각적 매력을 강화하기 위해, 우리는 군대에 간단한 애니메이션을 추가할 수 있습니다. Unity의 Animator 구성 요소를 사용하여 기본 공격 애니메이션을 설정할 수 있습니다.
- 군대 애니메이션을 Unity로 가져오세요.
- Troop 클래스에서 공개 Animator 변수를 만듭니다.
- 공격 메서드 중에 애니메이션을 트리거합니다.
public class Troop : MonoBehaviour
{
public Animator animator; // Add this line
private void Attack()
{
animator.SetTrigger("Attack"); // Trigger attack animation
// ... rest of the attack logic
}
}
전투 UI 만들기
우리는 부대의 체력 막대와 기타 관련 전투 정보를 표시하는 간단한 UI를 구현할 것입니다.
- Hierarchy에서 새 UI > Canvas를 만듭니다.
- 각 부대의 체력 막대를 나타내기 위해 UI > Image 요소를 추가합니다.
- 스크립트를 사용해 부대의 체력에 따라 체력 막대를 업데이트합니다.
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;
}
}
결론
이 튜토리얼에서는 플레이어가 다른 플레이어나 AI와 교류할 수 있는 전투 시스템을 추가했습니다. 우리는 군대 상호작용, 체력 관리, 전투 애니메이션, 체력 상태 UI를 구현했습니다. 이는 Clash of Clans와 같은 게임에서 보다 상호 작용적이고 전략적인 게임플레이 경험을 위한 기반을 형성합니다.