Unity でクラッシュ・オブ・クランのようなゲームを作成するパート 4

チュートリアル シリーズのこの第 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 のようなゲームでの戦略的なゲームプレイを強化しました。独自の部隊クラスを作成し、能力をトリガーし、クールダウンを管理することで、プレイヤーによりダイナミックな戦闘体験を提供できます。