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

前回は操作キャラ作りをしましたので、今回はステージ作りをしていきます。
動画のように好きにブロックを配置して、プレイヤーが上に乗るとブロックが動くようにします。


目次

操作キャラ作り

ステージ作り

GAMEOVER画面作り

敵作り

GAMECLER画面とタイトル作り

まずは前回作った地面をまとめましょう。
ヒエラルキーの「+」マークから「空のオブジェクトを作成」をクリックします(画像赤丸)

追加したオブジェクトには「ステージ」という名前を付けます(画像赤丸)

できたらステージに使っているブロックを全て左クリック長押しでこのステージの中に入れます(画像赤丸)

次にヒエラルキーの「Main Camera」を左クリック長押しで「Player」の中に入れます(画像赤丸)
こうすることでプレイ中カメラがプレイヤーを追いかけてくれます。

さらに「Player」をクリックし(画像1番目の赤丸)、「Rigidbody 2D」の「Constraints」をクリックして、その中の「回転を固定」にチェックを入れます(画像2番目の赤丸)

ここまでできたらステージのブロックを複製して、横に進めるようにブロックを追加していきます(画像赤丸)
ここからは自分の好きなようにブロックを追加していってみてください。

ある程度ブロックを追加したら新しくスクリプトを追加し、名前を「Gimmick」にします(画像赤丸)

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

using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;

public class Gimmick : MonoBehaviour
{
    public bool uo_bool = false;
    public bool right_bool = false;
    public bool left_bool = false;
    public bool down_bool = false;
    private bool update = false;

    public float speed;
    public float stop;
    private bool Rock = false;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if (update == true)
        {
            Up();
            Right();
            Left();
            Down();
        }
    }
    private void OnCollisionEnter2D(Collision2D other)
    {
        if (other.gameObject.CompareTag("Player")&& Rock == false)
        {
            update = true;
            other.gameObject.transform.SetParent(transform);
            Invoke("STOP",stop);
        }
    }
    private void OnCollisionExit2D(Collision2D other)
    {
        if (other.gameObject.CompareTag("Player") && Rock == false)
        {
            other.gameObject.transform.SetParent(null);
        }
    }
    void Up()
    {
        if(uo_bool == true)
        {
            Vector2 pos = transform.position;
            pos.y += speed * Time.deltaTime; 
            transform.position = pos;
        }
    }
    void Right()
    {
        if (right_bool == true)
        {
            Vector2 pos = transform.position;
            pos.x += speed * Time.deltaTime;
            transform.position = pos;
        }
    }
    void Left()
    {
        if (left_bool == true)
        {
            Vector2 pos = transform.position;
            pos.x += -speed * Time.deltaTime;
            transform.position = pos;
        }
    }
    void Down()
    {
        if (down_bool == true)
        {
            Vector2 pos = transform.position;
            pos.y += -speed * Time.deltaTime;
            transform.position = pos;
        }
    }
    void STOP()
    {
        update = false;
        Rock = true;
    }
}

このスクリプトは地面を移動させるコードが書かれています。
しかしそれは「Player」のタグがついたオブジェクトが触れた時です。なのでヒエラルキーの「Player」のタグをクリックして「Player」を選びましょう。「Player」は元からタグがあるので新しく作らなくても大丈夫です!

スクリプトが完成したら何でもいいので一つの地面オブジェクトにスクリプトを入れて見てください(画像1番目の赤丸)

そして地面にスクリプトが付いていることを確認しましょう(画像2番目の赤丸)

「Gimmick」にはそれぞれ「Up_bool」「Right_bool」「Left_bool」「Down_bool」というチェックがつけられる項目がありますが、それぞれプレイヤーが乗った時に「上」「右」「左」「下」に移動させることができます。
速度の数値は地面の移動速度を変化させることができ、停止の数値は移動を開始してから何秒後に停止させるか決めることができます。

例えば画像だとDown_boolにチェックがついており、速度が10、停止が5に設定されています。これはプレイヤーが地面に触れると下に10のスピードで下がるようになっています(画像赤丸)

動画でみるとこんな感じですね。

次に「Right_bool」にチェックを入れて速度を5、停止を4にします。

すると右方向に地面が移動させることができます。これで自分の好きなようにステージを作ってみてください。
今回は以上となります!

好きなようにステージを作れたら次はゲームオーバー画面を作っていきます。
敵も追加していくのでステージの難易度をさらにあげることができるので良ければ読んでいってください!

次の解説へ

コメントを残す

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