Unity에서 Clash of Clans와 유사한 게임 만들기 2부
튜토리얼 시리즈의 두 번째 부분에서는 Clash of Clans와 비슷한 게임에서 공격과 방어를 위한 군대 메커니즘을 구현합니다. 군대 유닛을 만들고, 이동과 행동을 관리하고, 플레이어가 공격 중에 배치할 수 있도록 합니다.
군대 프리팹 설정
먼저, 게임 내의 다양한 유닛을 나타내는 병력 프리팹을 만들어야 합니다.
- 계층에서 마우스 오른쪽 버튼을 클릭하고 2D 개체 > 스프라이트를 선택하여 부대에 대한 새로운 게임 오브젝트를 만듭니다.
- 이름을 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에서 군대 배치
다음으로, 군대를 배치하기 위한 간단한 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);
}
}
결론
이 튜토리얼에서는 Clash of Clans와 비슷한 게임에서 공격과 방어를 위한 기본 군대 메커니즘을 구현했습니다. 군대 배치, 이동, 공격 행동, 적 방어를 다루었습니다. 군대 유형, 특수 능력, 더 복잡한 적 AI를 추가하여 이러한 메커니즘을 더욱 확장할 수 있습니다.