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

튜토리얼 시리즈의 네 번째 부분에서는 Clash of Clans와 비슷한 게임에서 다양한 군대 유형에 대한 특수 능력을 구현합니다. 특수 능력은 게임 플레이에 깊이와 전략을 더해 각 군대를 독특하고 더욱 매력적으로 만듭니다.

군대 유형 정의

먼저, 각각의 능력에 따라 다른 군대 유형을 정의해 보겠습니다. Troop이라는 기본 클래스를 만들고 여기에서 특정 군대 유형을 파생시킵니다.

using UnityEngine;

public abstract class Troop : MonoBehaviour
{
    public float movementSpeed = 2f;
    public int health = 50;
    public int damage = 10;
    public float attackRange = 1f;

    public abstract void SpecialAbility(); // Abstract method for special ability

    public void TakeDamage(int damage)
    {
        health -= damage;
        Debug.Log(name + " takes " + damage + " damage.");
        
        if (health <= 0)
        {
            Destroy(gameObject);
            Debug.Log(name + " destroyed!");
        }
    }

    // Other existing methods...
}

특정 군대 유형 생성

이제 Troop 클래스를 상속하고 고유한 특수 능력을 구현하는 특정 부대 클래스를 만들어 보겠습니다.

// Warrior Troop
public class Warrior : Troop
{
    public override void SpecialAbility()
    {
        // Example: Increase damage temporarily
        damage *= 2;
        Debug.Log(name + " activates special ability: Double Damage!");
    }
}

// Archer Troop
public class Archer : Troop
{
    public override void SpecialAbility()
    {
        // Example: Long-range attack
        attackRange *= 2;
        Debug.Log(name + " activates special ability: Long Range!");
    }
}

특수 능력 발동

전투 중에 특수 능력을 발동할 방법이 필요합니다. CombatManager에 메서드를 추가하여 군인이 능력을 사용할 수 있도록 할 수 있습니다.

public class CombatManager : MonoBehaviour
{
    public List playerTroops;
    public List enemyTroops;

    void Update()
    {
        foreach (Troop troop in playerTroops)
        {
            FindTarget(troop, enemyTroops);
            if (Input.GetKeyDown(KeyCode.Space)) // Press Space to use special ability
            {
                troop.SpecialAbility();
            }
        }

        foreach (Troop troop in enemyTroops)
        {
            FindTarget(troop, playerTroops);
            // Optional: Add AI logic to use special abilities
        }
    }

    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
    }
}

특수 능력에 쿨다운 추가

특수 능력을 스팸으로 보내는 것을 방지하기 위해 각 병력 유형에 재사용 대기 시간을 추가하는 것이 좋습니다.

public abstract class Troop : MonoBehaviour
{
    // Existing properties...
    public float specialAbilityCooldown = 5f;
    private float lastAbilityTime;

    public virtual void SpecialAbility()
    {
        if (Time.time >= lastAbilityTime + specialAbilityCooldown)
        {
            lastAbilityTime = Time.time;
            // Override in derived classes
        }
        else
        {
            Debug.Log(name + " ability on cooldown.");
        }
    }

    // Other existing methods...
}

특수 능력을 위한 UI 만들기

군대가 특수 능력을 사용할 수 있는 시점을 보여주는 UI 요소가 있으면 유용합니다. 각 군대에 대해 능력을 발동하는 간단한 UI 버튼을 만들 수 있습니다.

using UnityEngine;
using UnityEngine.UI;

public class UIManager : MonoBehaviour
{
    public Troop troop;
    public Button specialAbilityButton;

    void Start()
    {
        specialAbilityButton.onClick.AddListener(OnSpecialAbilityClicked);
    }

    private void OnSpecialAbilityClicked()
    {
        troop.SpecialAbility();
    }

    void Update()
    {
        // Update button state based on cooldown if needed
    }
}

결론

이 튜토리얼에서 우리는 다양한 군대 유형에 대한 특수 능력을 구현하여 Clash of Clans와 같은 게임에서 전략적 게임 플레이를 강화했습니다. 고유한 군대 클래스를 만들고, 능력을 발동하고, 쿨다운을 관리함으로써 플레이어에게 더욱 역동적인 전투 경험을 제공할 수 있습니다.