前提・実現したいこと
書籍に掲載されているRunゲームのステージ生成ロジックにおいてわからない箇所があるので、
質問させていただきます。
なお、書籍に掲載されている内容ということを踏まえて(著者の方の利益を考慮して)、
ソースコードは全部載せず、わからない箇所だけ抜粋します。
ご教示お願いします。
該当のソースコード
キャラクターの走る先にステージチップを生成していくロジックのようです。
C#
1 const int StageTipSize = 30; 2 3 int currentTipIndex; 4 5 public Transform character; //ターゲットキャラクターの指定。 6 public GameObject[] stageTips; //ステージチッププレファブ配列。 7 public int startTipIndex; //自動生成開始インデックス。 8 public int preInstantiate; //生成先読み個数。 9 public List<GameObject> generatedStageList = new List<GameObject>(); //生成済みステージチップ保持リスト。 10 11 //初期化処理。 12 void Start () 13 { 14 currentTipIndex = startTipIndex - 1; 15 UpdateStage(preInstantiate); 16 } 17 18 //ステージの更新タイミングの監視。 19 void Update () 20 { 21 // キャラクターの位置から現在のステージチップのインデックスを計算 22 int charaPositionIndex = (int)(character.position.z / StageTipSize); 23 24 // 次のステージチップに入ったらステージの更新処理をおこなう 25 if (charaPositionIndex + preInstantiate > currentTipIndex) 26 { 27 UpdateStage(charaPositionIndex + preInstantiate); 28 } 29 } 30 31 // 指定のIndexまでのステージチップを生成して、管理化に置く 32 void UpdateStage (int toTipIndex) 33 { 34 if(toTipIndex <= currentTipIndex) return; 35 36 // 指定のステージチップまでを作成 37 for (int i = currentTipIndex + 1; i <= toTipIndex; i++) 38 { 39 GameObject stageObject = GenerateStage(i); 40 41 // 生成したステージチップを管理リストに追加し 42 generatedStageList.Add(stageObject); 43 } 44 45 // ステージ保持上限内になるまで古いステージを削除 46 while (generatedStageList.Count > preInstantiate + 2) DestroyOldestStage(); 47 48 currentTipIndex = toTipIndex; 49 } 50 51 // 指定のインデックス位置にStageオブジェクトをランダムに生成 52 GameObject GenerateStage (int tipIndex) 53 { 54 (省略) 55 } 56 57 // 一番古いステージを削除 58 void DestroyOldestStage () 59 { 60 (省略) 61 } 62
試したこと
だいたい解読できたのですが、2点わかりませんでした。
・1点目。
初期化処理で、
C#
1currentTipIndex = startTipIndex - 1;
なぜ、startTipIndexに-1したものをcurrentTipIndexに入れているのでしょうか?
この-1の意味とかがよくわからないです。
・2点目。
C#
1// ステージ保持上限内になるまで古いステージを削除 2while (generatedStageList.Count > preInstantiate + 2) DestroyOldestStage();
このコードがわかりません。
preInstantiate + 2
なぜ、+2なのでしょうか?
例えば、先読み個数(preInstantiate)があって、他にcharaPositionIndexにあるステージの数が1なので、
preInstantiate + 1
ならわかる気がするのですが。
DestroyOldestStage()内では、generatedStageList.RemoveAt(0)で削除している記述が見られるので、
generatedStageList.Countは常に増え続けないということはわかります。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/08/11 16:11