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

チュートリアル シリーズのパート 2 では、Clash of Clans のようなゲームで攻撃と防御を行うための部隊の仕組みを実装します。部隊ユニットを作成し、その動きと動作を管理し、プレイヤーが攻撃中に部隊を展開できるようにします。

部隊プレハブの設置

まず、ゲーム内のさまざまなユニットを表す部隊プレハブを作成する必要があります。

  1. 階層 を右クリックし、2D オブジェクト > スプライト を選択して、部隊の新しい GameObject を作成します。
  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 ボタン​​を設定します。キャンバスでボタンを作成し、展開機能を割り当てます。

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

結論

このチュートリアルでは、クラッシュ・オブ・クランのようなゲームで攻撃と防御を行うための基本的な部隊の仕組みを実装しました。部隊の配置、移動、攻撃行動、敵の防御について説明しました。部隊の種類、特殊能力、より複雑な敵 AI を追加することで、これらの仕組みをさらに拡張できます。

次のステップ