自動生成するステージの作り方について【Unity】

今回は、ユニティちゃんが走っているステージを自動生成したいと思います。

現状では縦長のステージを1つ配置しているだけなので、生成時に負荷がかかってしまいます。

そこで、マップチップのように形状を変更したものを複数用意して、キャラクターが一定の距離進んだら新しいステージを自動的に生成するようにします。

ステージの生成を自動化することで、作業効率も上がりますし、生成するパターンもランダムにすることが出来るので、長いステージを作成する際にオススメの手法です。

スポンサーリンク

自動生成するステージの作り方

ゲーム開始時に生成される初期ステージは固定にしておきます。敵の出現するタイミングをコントロール出来るようにするためですね。

Cubeを使って初期ステージを作成

Terrainのコピーは何かと苦労することがあるので、使い勝手の良いCubeを使って初期に表示されるステージを作ります。

Cubeでステージを作成する

PositionZの値を10にしてScaleは(5,0.1,20)にします。ちなみに、ユニティちゃんのPositionは(0,0,1)にしています。

名前をStage1と変更したら、プレハブ化しておきましょう。

ステージを自動生成するスクリプトを作成する

新規スクリプト「AutoStage」を作成します。

ユニティちゃんが一定の距離進んだら、先ほど作ったCubeを生成してステージを繋いでいくことで、ずっと走り続ける事が可能になります。

各ステージにインデックスを指定して、ステージの管理を行うようにします。

ステージをインデックスで管理する

イメージにするとこういった感じですね。通り過ぎて不要になったステージも生成と同時に削除するようにします。これらを踏まえてスクリプトを作ります。

ゲームが始まると、この後指定するステージ数に応じてステージを生成します。

Cube1つ分のScaleZは20にしているので、StageSizeを20に設定しています。

Updateメソッド内で、ユニティちゃんがCube1個分(20)進んだらステージの更新処理を呼び出して、指定されたインデックス位置までステージの生成を行います。

生成したら、Add関数にてリストに追加して管理しているステージの上限数を超えていたら古いステージを削除します。RemoveAt関数は、指定した位置の要素を取り除いて、その後ろに並んでいる要素を詰めることが出来ます。

今はステージの種類が1種類しかないので、同じステージを繋ぎ合わせるだけですが、違うステージを作ってそれぞれプレハブ化し、ランダムでステージの種類を決めるようになります。

スクリプトを保存したら、空のオブジェクト「StageGenerator」を作ってアタッチしましょう。

ステージジェネレーターのインスペクター

Targetにユニティちゃんを設定します。

Stagenumのサイズを「1」にしてCubeプレハブをElement 0に設定します。

First Stage Indexには「1」を入力します。これは、最初に配置されているステージがインデックス0に対応しているので、その先から自動生成させるためです。

Ahead Stageは「3」にして3つ分先までステージを生成するようにします。

Stage Listはサイズを「1」にしてシーン上に配置しているCubeをElement 0に設定します。

ここまで設定出来たらゲームを実行してみましょう。

ステージが自動生成される様子

ユニティちゃんの移動に合わせて、ステージの生成と削除が同時に行われていますね。