unityでミニオンラッシュのような、キャラクターが自動で走行するゲームを作っています。
このゲームはひたすら敵をよけ続けて走行距離を伸ばしていくゲームです。
走行するステージはあらかじめ作成したいくつかのプレハブをランダムで出現させています。
しかし、今の私のスクリプトでは、常にステージの難易度が一定です。
ステージの難易度を走行距離が進むにつれて難しくなるようにしたいです。
具体的には、0m~1000mの間はレベル1ステージプレハブからランダムに選んで、ステージを作成。
1001m~2000mの間はレベル2ステージプレハブからランダムに選んで、ステージを作成。
このようなスクリプトはどのようにしたらできますか?
もし少しでもヒントになるようなことを知っている方がいましたら教えてください。(_ _)
ステージをランダムに出現させるスクリプト
c#
1using UnityEngine; 2using System.Collections; 3using System.Collections.Generic; 4 5public class StageGenerator : MonoBehaviour 6{ 7 const int StageTipSize = 100; 8 9 int currentTipIndex; 10 11 public Transform character; 12 public GameObject[] stageTips; 13 public int startTipIndex; 14 public int preInstantiate; 15 public List<GameObject> generatedStageList = new List<GameObject>(); 16 17 void Start () 18 { 19 currentTipIndex = startTipIndex - 1; 20 UpdateStage(preInstantiate); 21 } 22 23 void Update () 24 { 25 // キャラクターの位置から現在のステージチップのインデックスを計算 26 int charaPositionIndex = (int)(character.position.z / StageTipSize); 27 28 // 次のステージチップに入ったらステージの更新処理をおこなう 29 if (charaPositionIndex + preInstantiate > currentTipIndex) 30 { 31 UpdateStage(charaPositionIndex + preInstantiate); 32 } 33 } 34 35 // 指定のIndexまでのステージチップを生成して、管理化に置く 36 void UpdateStage (int toTipIndex) 37 { 38 if(toTipIndex <= currentTipIndex) return; 39 40 // 指定のステージチップまでを作成 41 for (int i = currentTipIndex + 1; i <= toTipIndex; i++) 42 { 43 GameObject stageObject = GenerateStage(i); 44 45 // 生成したステージチップを管理リストに追加し 46 generatedStageList.Add(stageObject); 47 } 48 49 // ステージ保持上限内になるまで古いステージを削除 50 while (generatedStageList.Count > preInstantiate + 2) DestroyOldestStage(); 51 52 currentTipIndex = toTipIndex; 53 } 54 55 // 指定のインデックス位置にStageオブジェクトをランダムに生成 56 GameObject GenerateStage (int tipIndex) 57 { 58 int nextStageTip = Random.Range(0, stageTips.Length); 59 60 GameObject stageObject = (GameObject)Instantiate( 61 stageTips[nextStageTip], 62 new Vector3(0, 0, tipIndex * StageTipSize), 63 Quaternion.identity 64 ); 65 66 return stageObject; 67 } 68 69 // 一番古いステージを削除 70 void DestroyOldestStage () 71 { 72 GameObject oldStage = generatedStageList[0]; 73 generatedStageList.RemoveAt(0); 74 Destroy(oldStage); 75 } 76}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。