スポンサーリンク
スポンサーリンク
Unityゲームの作り方メモ

【Unity2D】タワーディフェンスゲームの作り方【にゃんこ大戦争風】

Unity

Unityを使用して作成したにゃんこ大戦争風タワーディフェンスゲームの作り方のメモです。ゲーム制作の参考にしていただければ嬉しいです。トグルボタンをクリックすると記事が表示されます。小さくて見ずらい画像はクリックで拡大できます。

にゃんこ大戦争について

にゃんこ大戦争』は、PONOSが開発したモバイルゲームで、簡単なルールで楽しめるタワーディフェンスゲームです。以下は、ゲームの基本的なルールの概要です。

  1. 基本の目的: プレイヤーは「キャットベース」と呼ばれる拠点を守り、敵の進撃を阻止することが目的です。
  2. にゃんこユニットの配置: プレイヤーはさまざまなにゃんこユニット(キャラクター)を選んで配置し、それらのユニットが敵に立ち向かいます。ユニットは一定の時間で生成され、コストを消費して配置します。
  3. 敵の進撃: 敵は波状にやってきて、キャットベースに向かって進撃してきます。プレイヤーの目標は、敵を倒してキャットベースを守ることです。

ステージの作成

背景を配置する

こちらの無料アセットを使用して背景を配置しました。

orderinLayerすべて0以下に設定しました。

拠点の配置

いらすとやさんのイラストを使用して拠点を配置しました。

サイズを調整して敵の拠点を赤味方の拠点を青に変更しました。

orderinLayerを1に設定しました。

オブジェクトをまとめて、名前を変更しました。

UIの作成

UI→Canvasを作成しました。

RenderModeをScreenSpaceCameraに変更しました。

RenderCameraにMainCameraをアタッチしました。

一番手前に表示したいのでOrderinLayerを100に設定しました。

UIScaleModeをScaleWithScreenSizeに変更しました。

ReferenceResolutionを画面サイズと同じに変更しました。

ScreenMatchModeをExpandに変更しました。

拠点のHP

テキストを二つ作成して拠点の上に配置しました。

召喚ボタンの作成

キャラクターを召喚するボタンを配置します。

空のオブジェクトを作成して、その子オブジェクトにボタンを4つ作成しました。

空のオブジェクトにGridLayoutGroupをアタッチして位置を調整しました。

ボタンの色やTextを変更しました。

ゴールドの表示

テキストを二つ配置して現在のゴールドを表示するUIを作成しました。

LEVELボタン

キャラクターの作成

こちらのアセットを使用してプレイヤーを配置しました。

歩くモーションの画像を複数選択してヒエラルキーウィンドウにドラッグ&ドロップしました。

名前をKnightDに変更しました。

同時にアニメーションが作成されるので名前を付けて保存しました。

攻撃モーション用の画像を複数選択してKnightDにドラッグ&ドロップして攻撃モーションを作成しました。

add componentからRigidbody2Dを追加しました。

GravityScaleを0にしてConstrainsのfreezeRotationZにチェックを入れました。

add componentからBoxColider2Dを追加しました。

istriggerにチェックを入れてコライダーの位置を調整しました。

モンスターをプレイヤーと同じように配置しました。

追加するコンポーネントはプレイヤーと同じです。

こちらのアセットを使用してモンスターを配置しました。

Enemyタグを作成して設定しました。

新しくC#スクリプトを作成しました。名前はCharactorMoveにしました。

作成したスクリプトを敵と味方のキャラクターにアタッチしました。

スクリプトを開いてコードを追加しました。

using UnityEngine;

public class CharactorMove : MonoBehaviour
{
    public enum TYPE 
    {
        PLAYER,
        ENEMY,
    }
    public TYPE type;

    float direction;
    Vector3 pos;

  bool isMove = true;
   
    void Start()
    {
        switch (type) 
        {
            case TYPE.PLAYER:
                direction = -1;
                break;
                
            case TYPE.ENEMY:
                direction = 1;
                break;
        
        }
        pos = new Vector3(direction, 0, 0);
    }

    void Update()
    {
       if (isMove) 
        {
            transform.position += pos * Time.deltaTime;
        }
    }
}

キャラクターのinspector画面からタイプを設定しました。

キャラクターが歩くようになりました。

新しくC#スクリプトを作成しました。名前はHitPointにしました。

作成したスクリプトを敵と味方のキャラクターにアタッチしました。

using UnityEngine;

public class HitPoint : MonoBehaviour
{
    public int hp;
  

    public void Damage(int damage) 
    {
        hp -= damage;
        if (hp <= 0)
        {
            Destroy(this.gameObject);
        }

    }
}

キャラクターのinspector画面からHPを設定しました。

右クリック→MakeTrangitionで歩くモーションと攻撃モーションを矢印で繋ぎます。

Paraetersタブの+ボタンを押して、Attackのboolを作成します。

矢印を選択してCounditionsを設定して、

AttackがTrueになったら攻撃モーションに切り替えるように、

Attackがfalseになったら歩くモーションに切り替えるようにしました。

hasexitTimeのチェックを外してtrunsitionsDurarationsを0に変更しました。

Animator anim;

void Start()
    {
        anim = GetComponent<Animator>();
    }   

  private void OnTriggerEnter2D(Collider2D collision)
    {
        //敵にぶつかったら移動停止
        if (collision.gameObject.tag == "Enemy" && type == TYPE.PLAYER
            ||collision.gameObject.tag == "Player" && type == TYPE.ENEMY)
        {
            isMove= false;
            //攻撃アニメーションに切り替える
            anim.SetBool("Attack",true);
            //ダメージ計算
            HitPoint hitPoint = collision.GetComponent<HitPoint>();
            StartCoroutine(AttackAction(hitPoint));
        }
    }

  private void OnTriggerExit2D(Collider2D collision)
    {
    //敵とぶつからなくなったら歩き出す
        isMove = true;
        anim.SetBool("Attack", false);
    }

    IEnumerator AttackAction(HitPoint hitPoint) 
    {
    //ダメージ処理
        while (hitPoint.hp > 0) 
        {
            yield return new WaitForSeconds(1);
            hitPoint.Damage(1);
        
        }
    
    }

キャラクター同士がぶつかると戦うようになりました。

おすすめのアセット

スポンサーリンク
C-BA memo
タイトルとURLをコピーしました