ステージの作り方(1):ステージギミックについて&動く障害物の作成

前回の作業でプレイヤーが動くようになりました。次はステージを作っていきましょう。

今回のゲーム「悪路王2020」ではステージのギミックが重要なので、その部分についての考え方~実装方法までを順番に説明していきますね。

スポンサーリンク

ステージを簡単に作るための考え方

では、はじめに「悪路王2020」のステージの作り方についての考え方を説明します。

今回のゲームは非常にシンプルなので、ステージも考え方一つでとても簡単に作ることができます。その考え方とはズバリ「障害物を動かす」という発想です。

普通2Dアクションゲームというと、このサイトのサンプルゲーム「ユニティちゃんの2Dアクション」のように

  • キャラクターが移動したり、ジャンプしたりできる
  • キャラクターに合わせてカメラが移動する

という風になっているのが一般的だと思います。しかし「悪路王2020」ではプレイヤーはキャラをジャンプさせることしかできないので、そもそもカメラを動かす必要がありません。

したがって今回は(普通の2Dゲームのように横長のステージを作ってプレイヤーを走らせるのではなく)カメラの見える範囲にだけステージを用意して、障害物を画面外から流せばいかにもプレイヤーキャラが走っているように見える、というトリックを使うというわけです。

動く障害物の作り方

ステージ作りの考え方が分かったところで、早速それを実装していきます。ここではステージの基本となる「動く障害物」を作ってみましょう。

障害物のゲームオブジェクトの作成

まず、障害物のゲームオブジェクトを作ります。

最初にインポートしてもらったスプライト画像の中に、「floor」という真っ黒な画像があると思うので、それをシーンにドラッグ&ドロップしてください。そうしたら、

  • 名前:Wall
  • タグ:Wall(※新しく作ってください)
  • レイヤー:Obstacle

に変更しましょう。できたらこのゲームオブジェクトに「ボックスコライダー2D」をアタッチして、下の画像のように設定を変更してください。

障害物のゲームオブジェクトの設定

こうすることで、スプライトのサイズを変更するとボックスコライダーの大きさも自動的に変化するようになります。

動く障害物のC#スクリプト

次に、障害物を動かすためのC#スクリプトを書いていきます。「Scripts」フォルダ内の「Obstacles」フォルダに新しいC#スクリプトを作り、名前を「Wall」に変更して次のスクリプトを書いてください。

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

[RequireComponent(typeof(SpriteRenderer))]
public class Wall : MonoBehaviour
{

    SpriteRenderer spriteRenderer;
    float speed = 5;    //とりあえずデフォルト値を5としておく

    public float Speed
    {
        set
        {
            speed = value;
        }
    }

    void Update()
    {
        transform.position = new Vector2(transform.position.x - speed * Time.deltaTime, transform.position.y);
    }

    //サイズと位置を調整
    public void SetWall(Vector2 size)
    {
        spriteRenderer = GetComponent<SpriteRenderer>();
        spriteRenderer.size = size;
        transform.position = new Vector2(transform.position.x, transform.position.y + size.y / 2);
    }

    //画面外に出たら破棄(※テストプレイ時にシーンビューに映っていると破棄されないので注意)
    private void OnBecameInvisible()
    {
        Destroy(gameObject);
    }

}

スクリプトを書けたら、それを先ほど作ったゲームオブジェクトにアタッチしてプレハブ化しましょう。これで動く障害物ができました。


次のページ→ステージの作り方(2):障害物生成オブジェクトの作成