Unity ランゲームを作ろう②地面を自動生成して無限に走る 3Dゲーム作り⑥
今回はランゲーム作りにおいて、一つずつ地面を作っていると
時間とゲーム自体重くなってしまうので自動で地面を作成する方法です。
※動画での説明がいい方は下記動画をご覧ください。記事での説明がいい方はそのまま読み進めてください。
ランゲームを作ろう②地面を自動生成して無限に走ってみよう!
今回は地面の自動生成と言うことですが、
一応前回の続きからになっています。
動画での説明をするために一から作ったので前回とキャラが変わっていますがあしからず。
※気になる方は下記リンクをご参考にしてください。
www.unityprogram.info
地面はキューブでも構わないのですが、
アセットをサイトから無料で手に入れて色のついた地面を
使っていきます。
※下記リンクより、NejikoRunを右上にある黄緑の
ダウンロードからダウンロードしてください。
unitylist.com
次の回でもこのアセットを使っていこうと思います。
ダウンロードが完了したらProject内にドラッグ&ドロップして
インポートしましょう!
まずProject内にある先程インポートしたアセット、
①のNejikoRun-masterの▶︎をクリックして、②のPrefabsを選択します。
③のDefaultStageをScene画面に2個ドラッグ&ドロップして、
Hierarchyにある④の様に名前をDefaultStage0,DefaultStage1と
名前をつけてください。
DefaultStage0のInspector内にあるTransformの
Psitionをxは0、Yは0、Zは−30に変更して、
DefaultStage1は全て0にしてください。
そうするとステージが繋がるかと思います。
次に後から作成するスクリプトを入れておくオブジェクトを作ります。
Hierarchyの⑤の+をクリック⇨Create Emptyを選択して、
空のGameObjectを作成します。
名前を⑥の様にStageにしましょう。
次にステージを生成するスクリプトを作成します。
Project内の自分が分かりやすい所で、右クリック⇨Create⇨C# Scriptを選択して
名前をStageにします。
次のコードをコピー&ペーストするか、同じ記述にしてください。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Stage : MonoBehaviour { //int型を変数StageTipSizeで宣言します。 const int StageTipSize = 30; //int型を変数currentTipIndexで宣言します。 int currentTipIndex; //ターゲットキャラクターの指定が出来る様にするよ public Transform character; //ステージチップの配列 public GameObject[] stageTips; //自動生成する時に使う変数startTipIndex public int startTipIndex; //ステージ生成の先読み個数 public int preInstantiate; //作ったステージチップの保持リスト public List<GameObject> generatedStageList = new List<GameObject>(); void Start() { //初期化処理 currentTipIndex = startTipIndex - 1; UpdateStage(preInstantiate); } void Update() { //キャラクターの位置から現在のステージチップのインデックスを計算します int charaPositionIndex = (int)(character.position.z / StageTipSize); //次のステージチップに入ったらステージの更新処理を行います。 if (charaPositionIndex + preInstantiate > currentTipIndex) { UpdateStage(charaPositionIndex + preInstantiate); } } //指定のインデックスまでのステージチップを生成して、管理下におく void UpdateStage (int toTipIndex) { if (toTipIndex <= currentTipIndex) return; //指定のステージチップまで生成するよ for (int i = currentTipIndex + 1; i <= toTipIndex; i++) { GameObject stageObject = GenerateStage(i); //生成したステージチップを管理リストに追加して、 generatedStageList.Add(stageObject); } //ステージ保持上限になるまで古いステージを削除します。 while (generatedStageList.Count > preInstantiate + 2) DestroyOldestStage(); currentTipIndex = toTipIndex; } //指定のインデックス位置にstageオブジェクトをランダムに生成 GameObject GenerateStage (int tipIndex) { int nextStageTip = Random.Range(0, stageTips.Length); GameObject stageObject = (GameObject)Instantiate( stageTips[nextStageTip], new Vector3(0, 0, tipIndex * StageTipSize), Quaternion.identity); return stageObject; } //一番古いステージを削除します void DestroyOldestStage () { GameObject oldStage = generatedStageList[0]; generatedStageList.RemoveAt(0); Destroy(oldStage); } }
出来上がった①のStageスクリプトを、
Hierarchy内にある②のStageオブジェクトにドラッグ&ドロップしてアタッチしてください。
そうすると③の様に追加されます。
今度はスクリプトの設定をしていきます。
①のキャラクターをCharacterの部分にドラッグ&ドロップしてください。
次に、Stage TipsのSizeを1と入力して、Element0の所に
Project内⇨NejikoRun-master⇨Prefabs⇨DefaultStageを
ドラッグ&ドロップします。
Start Tip Indexの値を1にして、Pre Instantiateを5と入力します。
Generated Stage ListのSizeを2と入力して、③のDefaultStage0,1を順番に
ドラッグ&ドロップしてください。
ここでもう一手間加えてみましょう!
ステージの先の方が途切れて無くなっている様に見えるので
色をつけてぼかしを入れてごまかしていきます。
エディタ画面上部にある、①のWindowをクリック。
次に②のRendering⇨③のLighting Settingsを選択。
そうするとLighting設定画面が開きます。
下にスクロールしていくと、Other Settingの項目の中の
④のFogのチェックを入れてください。
⑤のColorを自分が好きな色に変更してください。
最後に⑥Densityの値を0.03と入力してください。
そうすると⑦の様にステージの先に色がついたぼかしが出来てまだ
その先にステージがあるかの様に表現することが出来ます。
それでは再生して地面がずっと続いていくか試してみましょう!
無限に走ることが出来たでしょうか??
みなさんも夢に向かって走り続けて頑張りましょう!笑笑
今度は敵キャラクターの配置なんか
やっていきたいと思います。
ご視聴ありがとうございました。
※本格的に3Dゲームを作っていきたい方は下記記事をご覧ください。
www.unityprogram.info
※オススメのアセットは下記カテゴリより。便利な無料アセットがあります。
www.unityprogram.info
※Unityを学習していきたい方は下記カテゴリを覗いてみてください。
www.unityprogram.info
※オススメの実際に使ってみた学習本は下記カテゴリを参考にしてください。
www.unityprogram.info
※初心者に向けた簡単な記事や基本的な記事は下記カテゴリを参考にしてください。
www.unityprogram.info