[Unity]初心者向け横スクロール2Dアクションゲームの作り方(敵作り)

前回はゲームオーバー画面を作り、落下した時にゲームオーバーとなるようにしました。
今回は落下以外にも敵を追加し、ゲームオーバーになる要素を増やしていきます。

敵は動画のように右から左に突進させ、触れるとゲームオーバーとなります。


目次

操作キャラ作り

ステージ作り

GAMEOVER画面作り

敵作り

GAMECLER画面とタイトル作り

まずはヒエラルキーの「+」マークから「空のオブジェクト」を追加し、名前を「Enemy」にします。敵のパーツはここに入れていきましょう(画像赤丸)

次にヒエラルキーの「+」マークから「2Dオブジェクト」→「スプライト」→「正方形」とクリックしていきます(画像赤丸)

追加されたスプライトは「enemy」という名前にします(画像赤丸)
これを最初に作った「Enemy」の中に入れます。

そして画像ファイルにある黒いロケットのような画像を「enemy」のスプライトに左クリック長押しで入れます(画像赤丸)

そしてスケールをいじり、大きさを地面より少し小さい程度まで縮めます(画像赤丸)

そして敵をステージの出現させたい位置に移動させましょう。

このenemyには「コンポーネント追加」から「Box Collider 2D」を追加します(画像赤丸)

そしてオフセットを変更し、当たり判定を画像と同じになるように変更します(画像赤丸)

ここまでできたら新しくスクリプトを追加します。名前は「EnemyAttack」にします(画像赤丸)

スクリプトは以下のコードをコピー&ペーストしてください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyAttack : MonoBehaviour
{
    public float speed;

    public bool up = false;
    public bool right = false;
    public bool left = false;
    public bool down = false;

    public GameObject GameOver;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        Vector2 pos = transform.position;
        if (up == true)
        {
            pos.y += speed * Time.deltaTime;
        }
        if (right == true)
        {
            pos.x += speed * Time.deltaTime;
        }
        if (left == true)
        {
            pos.x -= speed * Time.deltaTime;
        }
        if (down == true)
        {
            pos.y -= speed * Time.deltaTime;
        }
        transform.position = pos;
    }
    private void OnCollisionEnter2D(Collision2D other)
    {
        if (other.gameObject.CompareTag("Player"))
        {
            GameOver.SetActive(true);
        }
    }
}

できたらそのスクリプトをenemyに入れます。
そしてenemyにスクリプトが付いていることを確認してください(画像赤丸)

追加した「EnemyAttack」にも速度、「Up」「右」「左」「Down」という欄がありますが、これらは地面の時と同じで速度をいじると敵のスピードが変化し、各方向にチェックを入れることで敵がその方向に移動します。

一番下には「GameOver」という項目があるのでここにはヒエラルキーの非表示にしてある「GAMEOVER」を入れます。

ここでさらにヒエラルキーに「空のオブジェクト」を追加し、名前を「EnemyTrrger」とします。

そして新しいスクリプト「Enemy」を追加します(画像赤丸)

スクリプトは以下のコードをコピー&ペーストしてください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Enemy : MonoBehaviour
{
    public GameObject enemy;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
    private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.CompareTag("Player"))
        {
            enemy.SetActive(true);
        }
    }
}

そして再びヒエラルキーの「+」マークからスプライトを追加し、「EnemyTrrger」の中に入れます(画像赤丸)

そのスプライトは「Sprite Renderer」のチェックを外して透明にし(画像1番目の赤丸)、「Box Collider 2D」を追加します(画像2番目の赤丸)
このスプライトに触れた瞬間に敵が出現するようにします。なので大きさや位置を変えて、敵を表示させたい箇所に
このスプライトを設置しましょう(画像3番目の赤丸)

画像の場合、スプライトと重なっている地面に着地した時に敵を出現させたいのでこの位置に縦長に設置しています。

さらに「トリガーにする」にチェックを入れて接触できなくします(画像赤丸)

次に「enemy」敵のオブジェクトですね。それをインスペクターのチェックを外して非表示にします。ゲームオーバーの時と同じですね。

そしてさっき作った「Enemy」を「EnemyTrrger」の中のスプライトに入れます。するとEnemyに「Enemy」という欄があるので非表示にしたEnemyを入れます。同じ文字が続いていてわかりずらいと思いますが、画像の通りにやって貰えば大丈夫です!

これで完成です。ゲームを実行してスプライトを設置したブロックに乗った時に敵が出現すればOKです。

次はクリア画面とタイトル画面を作っていきます。次回が最後の解説になるので頑張ってください!

次の解説

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です