Unity에서 Clash of Clans와 유사한 게임 만들기 2부

튜토리얼 시리즈의 두 번째 부분에서는 Clash of Clans와 비슷한 게임에서 공격과 방어를 위한 군대 메커니즘을 구현합니다. 군대 유닛을 만들고, 이동과 행동을 관리하고, 플레이어가 공격 중에 배치할 수 있도록 합니다.

군대 프리팹 설정

먼저, 게임 내의 다양한 유닛을 나타내는 병력 프리팹을 만들어야 합니다.

  1. 계층에서 마우스 오른쪽 버튼을 클릭하고 2D 개체 > 스프라이트를 선택하여 부대에 대한 새로운 게임 오브젝트를 만듭니다.
  2. 이름을 Warrior로 지정하고 자산에서 스프라이트를 할당합니다.
  3. 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를 추가하여 이러한 메커니즘을 더욱 확장할 수 있습니다.

다음 단계