2016-05-23 3 views
1

Momentan verwende ich eine nicht so optimale Lösung, die feine Levels laufen lässt und keine Verzögerung hat, die das Problem erzeugt, ist eine Menge Code und mit steigendem Level wird dieser Code immer größer schwierig zu verwalten, also suche ich nach einer besseren Lösung.LevelGenerator nicht optimal

Wie kann ich meine Levels besser erstellen? Sind sie bessere Systeme? Bitarray? Was ist eine bessere Richtung, um hineinzugehen?

#region Level Generator 
    private void LevelCreator(int level){ 
     if (level == 1) { 
      Vector3 pos = new Vector3 (0, 0, 0); 
      Vector3 pos2 = new Vector3 (-1, 0, 0); 
      Vector3 pos3 = new Vector3 (-2, 0, 0); 
      Vector3 pos4 = new Vector3 (-3, 0, 0); 
      Vector3 pos5 = new Vector3 (-4, 0, 0); 
      Vector3 pos6 = new Vector3 (-5, 0, 0); 
      Vector3 pos7 = new Vector3 (-6, 0, 0); 
      Vector3 pos8 = new Vector3 (-7, 0, 0); 
      Instantiate (startCube, pos, Quaternion.identity); 
      Instantiate (fallCube, pos2, Quaternion.identity); 
      Instantiate (fallCube, pos3, Quaternion.identity); 
      Instantiate (fallCube, pos4, Quaternion.identity); 
      Instantiate (fallCube, pos5, Quaternion.identity); 
      Instantiate (fallCube, pos6, Quaternion.identity); 
      Instantiate (fallCube, pos7, Quaternion.identity); 
      Instantiate (endCube, pos8, Quaternion.identity); 
      player.transform.position = pos + Vector3.up; 
     } else if (level == 2) { 
      Vector3 pos = new Vector3 (0, 0, 0); 
      Vector3 pos2 = new Vector3 (0, 0, 1); 
      Vector3 pos3 = new Vector3 (0, 0, 2); 
      Vector3 pos4 = new Vector3 (-1, 0, 2); 
      Vector3 pos5 = new Vector3 (-2, 0, 2); 
      Vector3 pos6 = new Vector3 (-2, 0, 1); 
      Vector3 pos7 = new Vector3 (-2, 0, 0); 
      Vector3 pos8 = new Vector3 (-3, 0, 0); 
      Vector3 pos9 = new Vector3 (-4, 0, 0); 
      Vector3 pos10 = new Vector3 (-4, 0, 1); 
      Vector3 pos11 = new Vector3 (-4, 0, 2); 
      Vector3 pos12 = new Vector3 (-5, 0, 2); 
      Instantiate (startCube, pos, Quaternion.identity); 
      Instantiate (fallCube, pos2, Quaternion.identity); 
      Instantiate (fallCube, pos3, Quaternion.identity); 
      Instantiate (fallCube, pos4, Quaternion.identity); 
      Instantiate (fallCube, pos5, Quaternion.identity); 
      Instantiate (fallCube, pos6, Quaternion.identity); 
      Instantiate (fallCube, pos7, Quaternion.identity); 
      Instantiate (fallCube, pos8, Quaternion.identity); 
      Instantiate (fallCube, pos9, Quaternion.identity); 
      Instantiate (fallCube, pos10, Quaternion.identity); 
      Instantiate (fallCube, pos11, Quaternion.identity); 
      Instantiate (endCube, pos12, Quaternion.identity); 
      player.transform.position = pos + Vector3.up; 
     } else if (level == 3) { 
      Vector3 pos = new Vector3 (0, 0, 0); 
      Vector3 pos2 = new Vector3 (0, 0, 1); 
      Vector3 pos3 = new Vector3 (0, 0, 2); 
      Vector3 pos4 = new Vector3 (-1, 0, 2); 
      Vector3 pos5 = new Vector3 (-1, 0, 3); 
      Vector3 pos6 = new Vector3 (-1, 0, 4); 
      Vector3 pos7 = new Vector3 (0, 0, 4); 
      Vector3 pos8 = new Vector3 (1, 0, 4); 
      Vector3 pos9 = new Vector3 (1, 0, 5); 
      Vector3 pos10 = new Vector3 (1, 0, 6); 
      Vector3 pos11 = new Vector3 (1, 0, 7); 
      Vector3 pos12 = new Vector3 (0, 0, 7); 
      Vector3 pos13 = new Vector3 (-1, 0, 7); 
      Vector3 pos14 = new Vector3 (-2, 0, 7); 
      Vector3 pos15 = new Vector3 (-3, 0, 7); 
      Vector3 pos16 = new Vector3 (-4, 0, 7); 
      Vector3 pos17 = new Vector3 (-4, 0, 6); 
      Vector3 pos18 = new Vector3 (-4, 0, 5); 
      Vector3 pos19 = new Vector3 (-4, 0, 4); 
      Vector3 pos20 = new Vector3 (-3, 0, 4); 
      Vector3 pos21 = new Vector3 (-2, 0, 4); 
      Vector3 pos22 = new Vector3 (-2, 0, 3); 
      Vector3 pos23 = new Vector3 (-2, 0, 2); 
      Vector3 pos24 = new Vector3 (-2, 0, 1); 
      Vector3 pos25 = new Vector3 (-2, 0, 0); 
      Instantiate (startCube, pos, Quaternion.identity); 
      Instantiate (fallCube, pos2, Quaternion.identity); 
      Instantiate (fallCube, pos3, Quaternion.identity); 
      Instantiate (fallCube, pos4, Quaternion.identity); 
      Instantiate (fallCube, pos5, Quaternion.identity); 
      Instantiate (fallCube, pos6, Quaternion.identity); 
      Instantiate (fallCube, pos7, Quaternion.identity); 
      Instantiate (fallCube, pos8, Quaternion.identity); 
      Instantiate (fallCube, pos9, Quaternion.identity); 
      Instantiate (fallCube, pos10, Quaternion.identity); 
      Instantiate (fallCube, pos11, Quaternion.identity); 
      Instantiate (fallCube, pos12, Quaternion.identity); 
      Instantiate (fallCube, pos13, Quaternion.identity); 
      Instantiate (fallCube, pos14, Quaternion.identity); 
      Instantiate (fallCube, pos15, Quaternion.identity); 
      Instantiate (fallCube, pos16, Quaternion.identity); 
      Instantiate (fallCube, pos17, Quaternion.identity); 
      Instantiate (fallCube, pos18, Quaternion.identity); 
      Instantiate (fallCube, pos19, Quaternion.identity); 
      Instantiate (fallCube, pos20, Quaternion.identity); 
      Instantiate (fallCube, pos21, Quaternion.identity); 
      Instantiate (fallCube, pos22, Quaternion.identity); 
      Instantiate (fallCube, pos23, Quaternion.identity); 
      Instantiate (fallCube, pos24, Quaternion.identity); 
      Instantiate (endCube, pos25, Quaternion.identity); 
      player.transform.position = pos + Vector3.up; 
     } else if (level == 4) { 
      Vector3 pos = new Vector3 (0, 0, 0); 
      Vector3 pos2 = new Vector3 (-1, 0, 0); 
      Vector3 pos3 = new Vector3 (-2, 0, 0); 
      Vector3 pos4 = new Vector3 (-2, 0, -1); 
      Vector3 pos5 = new Vector3 (-3, 0, 0); 
      Vector3 pos6 = new Vector3 (-4, 0, 0); 
      Vector3 pos7 = new Vector3 (-4, 0, 1); 
      Vector3 pos8 = new Vector3 (-5, 0, 0); 
      Vector3 pos9 = new Vector3 (-6, 0, 0); 
      Vector3 pos10 = new Vector3 (-7, 0, 0); 
      Vector3 pos11 = new Vector3 (-6, 0, 1); 
      Vector3 pos12 = new Vector3 (-6, 0, 2); 
      Vector3 pos13 = new Vector3 (-5, 0, 2); 
      Vector3 pos14 = new Vector3 (-7, 0, 2); 
      Instantiate (startCube, pos, Quaternion.identity); 
      Instantiate (fallCube, pos2, Quaternion.identity); 
      Instantiate (permCube, pos3, Quaternion.identity); 
      Instantiate (fallCube, pos4, Quaternion.identity); 
      Instantiate (fallCube, pos5, Quaternion.identity); 
      Instantiate (permCube, pos6, Quaternion.identity); 
      Instantiate (fallCube, pos7, Quaternion.identity); 
      Instantiate (fallCube, pos8, Quaternion.identity); 
      Instantiate (permCube, pos9, Quaternion.identity); 
      Instantiate (fallCube, pos10, Quaternion.identity); 
      Instantiate (fallCube, pos11, Quaternion.identity); 
      Instantiate (permCube, pos12, Quaternion.identity); 
      Instantiate (fallCube, pos13, Quaternion.identity); 
      Instantiate (endCube, pos14, Quaternion.identity); 
      player.transform.position = pos + Vector3.up; 
     } else if (level == 5) { 
      Vector3 pos = new Vector3 (0, 0, 0); 
      Vector3 pos1 = new Vector3 (0, 0, 1); 
      Vector3 pos2 = new Vector3 (-1, 0, 1); 
      Vector3 pos3 = new Vector3 (-2, 0, 1); 
      Vector3 pos4 = new Vector3 (-3, 0, 1); 
      Vector3 pos5 = new Vector3 (-3, 0, 2); 
      Vector3 pos6 = new Vector3 (-2, 0, 2); 
      Vector3 pos7 = new Vector3 (-1, 0, 2); 
      Vector3 pos8 = new Vector3 (0, 0, 2); 
      Vector3 pos9 = new Vector3 (0, 0, 3); 
      Vector3 pos10 = new Vector3 (0, 0, 4); 
      Vector3 pos11 = new Vector3 (0, 0, 5); 
      Vector3 pos12 = new Vector3 (0, 0, 6); 
      Vector3 pos13 = new Vector3 (0, 0, 7); 
      Vector3 pos14 = new Vector3 (0, 0, 8); 
      Vector3 pos15 = new Vector3 (-1, 0, 8); 
      Vector3 pos16 = new Vector3 (-1, 0, 7); 
      Vector3 pos17 = new Vector3 (-1, 0, 6); 
      Vector3 pos18 = new Vector3 (-1, 0, 5); 
      Vector3 pos19 = new Vector3 (-1, 0, 4); 
      Vector3 pos20 = new Vector3 (-2, 0, 4); 
      Vector3 pos21 = new Vector3 (-3, 0, 4); 
      Vector3 pos22 = new Vector3 (-4, 0, 4); 
      Vector3 pos23 = new Vector3 (-4, 0, 5); 
      Vector3 pos24 = new Vector3 (-4, 0, 6); 
      Vector3 pos25 = new Vector3 (-4, 0, 7); 
      Vector3 pos26 = new Vector3 (-4, 0, 8); 
      Vector3 pos27 = new Vector3 (-3, 0, 8); 
      Vector3 pos28 = new Vector3 (-3, 0, 7); 
      Vector3 pos29 = new Vector3 (-5, 0, 8); 
      Vector3 pos30 = new Vector3 (-5, 0, 7); 
      Vector3 pos31 = new Vector3 (-5, 0, 6); 
      Vector3 pos32 = new Vector3 (-5, 0, 5); 
      Vector3 pos33 = new Vector3 (-5, 0, 4); 
      Vector3 pos34 = new Vector3 (-5, 0, 3); 
      Vector3 pos35 = new Vector3 (-5, 0, 2); 
      Vector3 pos36 = new Vector3 (-5, 0, 1); 
      Vector3 pos37 = new Vector3 (-5, 0, 0); 

      Instantiate (startCube, pos, Quaternion.identity); 
      Instantiate (fallCube, pos1, Quaternion.identity); 
      Instantiate (fallCube, pos2, Quaternion.identity); 
      Instantiate (fallCube, pos3, Quaternion.identity); 
      Instantiate (fallCube, pos4, Quaternion.identity); 
      Instantiate (fallCube, pos5, Quaternion.identity); 
      Instantiate (fallCube, pos6, Quaternion.identity); 
      Instantiate (fallCube, pos7, Quaternion.identity); 
      Instantiate (fallCube, pos8, Quaternion.identity); 
      Instantiate (fallCube, pos9, Quaternion.identity); 
      Instantiate (fallCube, pos10, Quaternion.identity); 
      Instantiate (fallCube, pos11, Quaternion.identity); 
      Instantiate (fallCube, pos12, Quaternion.identity); 
      Instantiate (fallCube, pos13, Quaternion.identity); 
      Instantiate (fallCube, pos14, Quaternion.identity); 
      Instantiate (fallCube, pos15, Quaternion.identity); 
      Instantiate (fallCube, pos16, Quaternion.identity); 
      Instantiate (fallCube, pos17, Quaternion.identity); 
      Instantiate (fallCube, pos18, Quaternion.identity); 
      Instantiate (fallCube, pos19, Quaternion.identity); 
      Instantiate (fallCube, pos20, Quaternion.identity); 
      Instantiate (fallCube, pos21, Quaternion.identity); 
      Instantiate (fallCube, pos22, Quaternion.identity); 
      Instantiate (fallCube, pos23, Quaternion.identity); 
      Instantiate (fallCube, pos24, Quaternion.identity); 
      Instantiate (fallCube, pos25, Quaternion.identity); 
      Instantiate (fallCube, pos26, Quaternion.identity); 
      Instantiate (fallCube, pos27, Quaternion.identity); 
      Instantiate (fallCube, pos28, Quaternion.identity); 
      Instantiate (fallCube, pos29, Quaternion.identity); 
      Instantiate (fallCube, pos30, Quaternion.identity); 
      Instantiate (fallCube, pos31, Quaternion.identity); 
      Instantiate (fallCube, pos32, Quaternion.identity); 
      Instantiate (fallCube, pos33, Quaternion.identity); 
      Instantiate (fallCube, pos34, Quaternion.identity); 
      Instantiate (fallCube, pos35, Quaternion.identity); 
      Instantiate (fallCube, pos36, Quaternion.identity); 
      Instantiate (endCube, pos37, Quaternion.identity); 
      player.transform.position = pos + Vector3.up; 
     } else if (level == 6) { 
      Vector3 pos = new Vector3 (0, 0, 0); 
      Vector3 pos2 = new Vector3 (1, 0, -1); 
      Vector3 pos3 = new Vector3 (1, 0, -2); 
      Vector3 pos4 = new Vector3 (0, 0, -2); 
      Vector3 pos5 = new Vector3 (0, 0, -1); 
      Vector3 pos6 = new Vector3 (0, 0, -3); 
      Vector3 pos7 = new Vector3 (0, 0, -4); 
      Vector3 pos8 = new Vector3 (0, 0, -5); 
      Vector3 pos9 = new Vector3 (0, 0, -6); 
      Vector3 pos10 = new Vector3 (1, 0, -5); 
      Vector3 pos11 = new Vector3 (1, 0, -6); 
      Vector3 pos12 = new Vector3 (-1, 0, -6); 
      Vector3 pos13 = new Vector3 (-2, 0, -6); 
      Vector3 pos14 = new Vector3 (-3, 0, -6); 
      Vector3 pos15 = new Vector3 (-4, 0, -6); 
      Vector3 pos16 = new Vector3 (-3, 0, -5); 
      Vector3 pos17 = new Vector3 (-4, 0, -5); 
      Vector3 pos18 = new Vector3 (-4, 0, -4); 
      Vector3 pos19 = new Vector3 (-4, 0, -3); 
      Vector3 pos20 = new Vector3 (-4, 0, -2); 
      Vector3 pos21 = new Vector3 (-4, 0, -1); 
      Vector3 pos22 = new Vector3 (-3, 0, -1); 
      Vector3 pos23 = new Vector3 (-3, 0, -2); 
      Vector3 pos24 = new Vector3 (-2, 0, -2); 
      Vector3 pos25 = new Vector3 (-1, 0, -2); 
      Vector3 pos26 = new Vector3 (-4, 0, 0); 
      Instantiate (startCube, pos, Quaternion.identity); 
      Instantiate (permCube, pos2, Quaternion.identity); 
      Instantiate (permCube, pos3, Quaternion.identity); 
      Instantiate (permCube, pos4, Quaternion.identity); 
      Instantiate (permCube, pos5, Quaternion.identity); 
      Instantiate (fallCube, pos6, Quaternion.identity); 
      Instantiate (fallCube, pos7, Quaternion.identity); 
      Instantiate (permCube, pos8, Quaternion.identity); 
      Instantiate (permCube, pos9, Quaternion.identity); 
      Instantiate (permCube, pos10, Quaternion.identity); 
      Instantiate (permCube, pos11, Quaternion.identity); 
      Instantiate (fallCube, pos12, Quaternion.identity); 
      Instantiate (fallCube, pos13, Quaternion.identity); 
      Instantiate (permCube, pos14, Quaternion.identity); 
      Instantiate (permCube, pos15, Quaternion.identity); 
      Instantiate (permCube, pos16, Quaternion.identity); 
      Instantiate (permCube, pos17, Quaternion.identity); 
      Instantiate (fallCube, pos18, Quaternion.identity); 
      Instantiate (fallCube, pos19, Quaternion.identity); 
      Instantiate (permCube, pos20, Quaternion.identity); 
      Instantiate (permCube, pos21, Quaternion.identity); 
      Instantiate (permCube, pos22, Quaternion.identity); 
      Instantiate (permCube, pos23, Quaternion.identity); 
      Instantiate (fallCube, pos24, Quaternion.identity); 
      Instantiate (fallCube, pos25, Quaternion.identity); 
      Instantiate (endCube, pos26, Quaternion.identity); 
      player.transform.position = pos + Vector3.up; 
     } 
    } 

    #endregion 
+0

Sie mit 'Array' oder' list' Wurden in Betracht gezogen?Auf diese Weise müssen Sie nicht für jede neu erstellte Position eine neue Codezeile generieren. Sie müssen lediglich das Element in der Array - oder Listenliste hinzufügen. – Ian

+0

nicht sicher, wie ich sie implementieren würde Liste, um durch die Ebenen zu durchlaufen, aber es zu codieren erkannte ich, dass es mehr Code als die If/Else-Anweisungen –

+0

machte Lesen Sie Ihre Ebenen durch externe Dateien wie XML-Dateien, und machen Sie Ihre eigenen Level-Designer, die die Level-Dateien lesen und schreiben können, oder Sie können es manuell selbst im Code tun :(. – Xela

Antwort

1

Learn Array zu verwenden. Ich schlage vor, Sie gehen mit array eher als List oder andere Generics aus Gründen der Leistung. Da Sie die für jeden Level benötigte Vektorgröße kennen, ist Array hier die Lösung. Ging voraus, um das selbst zu tun. Die Codezeilen gingen von Zeilen zu . Reduziert es auf mehr als halb die Originalgröße. Rufen Sie einfach intializeLevels() in der Start() Funktion (einmal), jetzt können Sie LevelCreator Funktion jederzeit verwenden. Informieren Sie sich auch über das Objektpooling, da in Ihrem Code zu viel Instanziierung stattfindet.

Vector3[] level1ArrayPos, level2ArrayPos, level3ArrayPos, level4ArrayPos, level5ArrayPos, level6ArrayPos; 

    //Initialize arrays. CALL ONLY ONCE in the start function. 
    void intializeLevels() 
    { 
     level1ArrayPos = new Vector3[8] { new Vector3(0, 0, 0), new Vector3(-1, 0, 0),new Vector3(-2, 0, 0), 
      new Vector3(-3, 0, 0),new Vector3(-4, 0, 0),new Vector3(-5, 0, 0),new Vector3(-6, 0, 0), 
      new Vector3(-7, 0, 0)}; 

     level2ArrayPos = new Vector3[12] { new Vector3(0, 0, 0), new Vector3(0, 0, 1), new Vector3(0, 0, 2), 
      new Vector3(-1, 0, 2),new Vector3(-2, 0, 2),new Vector3(-2, 0, 1),new Vector3(-2, 0, 0), 
      new Vector3(-3, 0, 0),new Vector3(-4, 0, 0),new Vector3(-4, 0, 1), 
      new Vector3(-4, 0, 2),new Vector3(-5, 0, 2)}; 

     level3ArrayPos = new Vector3[25] { new Vector3(0, 0, 0) ,new Vector3(0, 0, 1),new Vector3(0, 0, 2), 
       new Vector3(-1, 0, 2), new Vector3(-1, 0, 3),new Vector3(-1, 0, 4),new Vector3(0, 0, 4), 
       new Vector3(1, 0, 4),new Vector3(1, 0, 5),new Vector3(1, 0, 6),new Vector3(1, 0, 7), 
       new Vector3(0, 0, 7),new Vector3(-1, 0, 7),new Vector3(-2, 0, 7),new Vector3(-3, 0, 7), 
       new Vector3(-4, 0, 7),new Vector3(-4, 0, 6),new Vector3(-4, 0, 5),new Vector3(-4, 0, 4), 
       new Vector3(-3, 0, 4),new Vector3(-2, 0, 4),new Vector3(-2, 0, 3),new Vector3(-2, 0, 2), 
       new Vector3(-2, 0, 1),new Vector3(-2, 0, 0) 
      }; 

     level4ArrayPos = new Vector3[14] {new Vector3(0, 0, 0),new Vector3(-1, 0, 0),new Vector3(-2, 0, 0), 
      new Vector3(-2, 0, -1),new Vector3(-3, 0, 0),new Vector3(-4, 0, 0),new Vector3(-4, 0, 1), 
      new Vector3(-5, 0, 0),new Vector3(-6, 0, 0),new Vector3(-7, 0, 0),new Vector3(-6, 0, 1), 
      new Vector3(-6, 0, 2),new Vector3(-5, 0, 2), new Vector3(-7, 0, 2)}; 
     Instantiate(startCube, level4ArrayPos[0], Quaternion.identity); 

     level5ArrayPos = new Vector3[38] { 
      new Vector3(0, 0, 0),new Vector3(0, 0, 1),new Vector3(-1, 0, 1),new Vector3(-2, 0, 1), 
      new Vector3(-3, 0, 1),new Vector3(-3, 0, 2),new Vector3(-2, 0, 2),new Vector3(-1, 0, 2),new Vector3(0, 0, 2),new Vector3(0, 0, 3), 
      new Vector3(0, 0, 4),new Vector3(0, 0, 5),new Vector3(0, 0, 6),new Vector3(0, 0, 7),new Vector3(0, 0, 8),new Vector3(-1, 0, 8), 
      new Vector3(-1, 0, 7),new Vector3(-1, 0, 6),new Vector3(-1, 0, 5),new Vector3(-1, 0, 4),new Vector3(-2, 0, 4),new Vector3(-3, 0, 4), 
      new Vector3(-4, 0, 4),new Vector3(-4, 0, 5),new Vector3(-4, 0, 6),new Vector3(-4, 0, 7),new Vector3(-4, 0, 8),new Vector3(-3, 0, 8), 
      new Vector3(-3, 0, 7),new Vector3(-5, 0, 8),new Vector3(-5, 0, 7),new Vector3(-5, 0, 6),new Vector3(-5, 0, 5),new Vector3(-5, 0, 4), 
      new Vector3(-5, 0, 3),new Vector3(-5, 0, 2),new Vector3(-5, 0, 1),new Vector3(-5, 0, 0)}; 

     level6ArrayPos = new Vector3[26] { 
      new Vector3(0, 0, 0),new Vector3(1, 0, -1),new Vector3(1, 0, -2),new Vector3(0, 0, -2),new Vector3(0, 0, -1), 
      new Vector3(0, 0, -3),new Vector3(0, 0, -4),new Vector3(0, 0, -5),new Vector3(0, 0, -6),new Vector3(1, 0, -5), 
      new Vector3(1, 0, -6),new Vector3(-1, 0, -6),new Vector3(-2, 0, -6),new Vector3(-3, 0, -6),new Vector3(-4, 0, -6), 
      new Vector3(-3, 0, -5),new Vector3(-4, 0, -5),new Vector3(-4, 0, -4),new Vector3(-4, 0, -3),new Vector3(-4, 0, -2), 
      new Vector3(-4, 0, -1),new Vector3(-3, 0, -1),new Vector3(-3, 0, -2),new Vector3(-2, 0, -2),new Vector3(-1, 0, -2), 
      new Vector3(-4, 0, 0) }; 
    } 

    private void LevelCreator(int level) 
    { 
     if (level == 1) 
     { 
      Instantiate(startCube, level1ArrayPos[0], Quaternion.identity); 

      for (int i = 1; i < level1ArrayPos.Length - 1; i++) 
      { 
       Instantiate(fallCube, level1ArrayPos[i], Quaternion.identity); 
      } 
      Instantiate(endCube, level1ArrayPos[7], Quaternion.identity); 
      player.transform.position = level1ArrayPos[0] + Vector3.up; 
     } 
     else if (level == 2) 
     { 
      Instantiate(startCube, level2ArrayPos[0], Quaternion.identity); 

      for (int i = 1; i < level2ArrayPos.Length - 1; i++) 
      { 
       Instantiate(fallCube, level2ArrayPos[i], Quaternion.identity); 
      } 

      Instantiate(endCube, level2ArrayPos[11], Quaternion.identity); 
      player.transform.position = level2ArrayPos[0] + Vector3.up; 
     } 
     else if (level == 3) 
     { 
      Instantiate(startCube, level3ArrayPos[0], Quaternion.identity); 
      for (int i = 1; i < level3ArrayPos.Length - 1; i++) 
      { 
       Instantiate(fallCube, level3ArrayPos[i], Quaternion.identity); 
      } 
      Instantiate(endCube, level3ArrayPos[24], Quaternion.identity); 
      player.transform.position = level3ArrayPos[0] + Vector3.up; 
     } 
     else if (level == 4) 
     { 
      for (int i = 1; i < level4ArrayPos.Length - 1; i++) 
      { 
       if (i == 1 || i == 3 || i == 4 || i == 6 || i == 7 || i == 9 || i == 10 || i == 12) 
       { 
        Instantiate(fallCube, level4ArrayPos[i], Quaternion.identity); 
       } 
       else if (i == 2 || i == 5 || i == 8 || i == 11) 
       { 
        Instantiate(permCube, level4ArrayPos[i], Quaternion.identity); 
       } 
      } 
      Instantiate(endCube, level4ArrayPos[13], Quaternion.identity); 
      player.transform.position = level4ArrayPos[0] + Vector3.up; 
     } 
     else if (level == 5) 
     { 
      Instantiate(startCube, level5ArrayPos[0], Quaternion.identity); 

      for (int i = 1; i < level5ArrayPos.Length - 1; i++) 
      { 
       Instantiate(fallCube, level5ArrayPos[i], Quaternion.identity); 
      } 

      Instantiate(endCube, level5ArrayPos[37], Quaternion.identity); 
      player.transform.position = level5ArrayPos[0] + Vector3.up; 
     } 
     else if (level == 6) 
     { 
      Instantiate(startCube, level6ArrayPos[0], Quaternion.identity); 
      for (int i = 1; i < level6ArrayPos.Length - 1; i++) 
      { 
       if ((i >= 1 && i <= 4) || (i >= 7 && i <= 10) || (i >= 13 && i <= 16) || (i >= 19 && i <= 22)) 
       { 
        Instantiate(permCube, level6ArrayPos[i], Quaternion.identity); 
       } 
       else if ((i >= 5 && i <= 6) || (i >= 11 && i <= 12) || (i >= 17 && i <= 18) || (i >= 23 && i <= 24)) 
       { 
        Instantiate(fallCube, level6ArrayPos[i], Quaternion.identity); 
       } 
      } 
      Instantiate(endCube, level6ArrayPos[25], Quaternion.identity); 
      player.transform.position = level6ArrayPos[0] + Vector3.up; 
     } 
    } 
+0

sehr schön, in der Tat möchte ich dies für ein paar Tage offen lassen sehen, ob jemand andere Vorschläge hat, aber danach werde ich Ihre Antwort akzeptieren :) –

+0

@ JoséphFlames Das ist in Ordnung. Es gibt immer Raum für Verbesserungen. Ihr Code wäre kürzer gewesen, wenn Sie endCube, fallCube, startCube, permCube zu Arrays gemacht hätten. Dann können Sie For-Schleifen für diese verwenden. Wie auch immer, je mehr Sie optimieren, wird die Lesbarkeit sinken. Glückliche Kodierung! – Programmer

+0

Würde es Ihnen etwas ausmachen, die Frage zu upvotieren, damit ich Bounties einstellen kann :) –

1

Ich würde vorschlagen, dass Sie eine Klasse haben, um Level-Dateien zu übersetzen. Sie müssten eine Funktion erstellen, die alle Ebenen lesen und konfigurieren würde. Soweit ich sehe, haben sie ein Muster von Eigenschaften, so dass es einfacher wäre. Dies kann eine Weile dauern, ist aber nützlich, um mehr und größere Level in deinem Spiel einzuführen. Die anderen Vorteile dabei sind, dass Sie eine txt-, xml-, xls-, json- oder andere Datei verwenden könnten, die das Editieren und Erstellen neuer Ebenen einfacher und organisierter machen würde, und dies nicht innerhalb des Kerncodes tun würde.

Abgesehen davon, könnten Sie auch leicht das umgekehrte Verhalten dieser Lesefunktion machen, um Ebenen in Datei zu schreiben, die es ermöglichen würde, Ebenen zu speichern, um Ebenen zu exportieren, die Sie im Unity-Editor vornehmen, um sie zu speichern.

Ich habe dies in einem meiner Spiele gemacht und ich kann Ihnen versichern, dass es nicht mehr als 15 Zeilen Code für das Lesen, weitere 10 für das Schreiben und die Dateien je nach Level benötigen würde . Aber der größte Punkt ist die Möglichkeit, den Spielinhalt zu skalieren.

Beispiel unter Verwendung von Json-Datei:

{ 
    "level": 6, 
    "cubes": [ 
    { 
     "type": 0, 
     "posx": 2, 
     "posy": 1, 
     "posz": 5 
    }, 
    { 
     "type": 1, 
     "posx": 5, 
     "posy": 4, 
     "posz": 8 
    }, 
    { 
     "type": 2, 
     "posx": 8, 
     "posy": 1, 
     "posz": 2 
    }, 
    { 
     "type": 0, 
     "posx": 2, 
     "posy": 2, 
     "posz": 2 
    }, 
    { 
     "type": 3, 
     "posx": 2, 
     "posy": 3, 
     "posz": 5 
    } 
    ] 
} 

Dann mit Hilfe einer Klasse Ebene und Cube (das Feld Typ zu wissen, ob es ein fallCube ist, endCube, startCube)

public class Level 
{ 
    public int LevelIndex{ get; set; } 
    public Cube[] Cubes { get; set; } 

    public Level(int level) 
    { 
     LevelIndex = level; 
    } 
    //method to add Cube to the array of Cubes 
} 

public class Cube 
    { 
     public int Type { get; set; } 
     public int positionx { get; set; } 
     public int positiony { get; set; } 
     public int positionz { get; set; } 

     public Cube(int type,int x,int y,int z) 
     { 
      Type = type; 
      positionx = x; 
      positiony = y; 
      positionz = z; 
     } 
} 

Und für jede Ebene Datei .json Sie so etwas wie verwenden würde:

Level newlevel = new JavaScriptSerializer().Deserialize<Level>(jsonfile); 

Und schreiben:

String savedleveljson = new JavaScriptSerializer().Serialize(leveltowrite); 
+0

hmmm vielleicht einige gute Codebeispiele bereitstellen und ich glaube, das wäre eine Antwort wert das Kopfgeld –

+0

Ich lieferte gute Beispiele für den Fall von JSON-Datei. Ich habe die Fragen beantwortet und jetzt mit Codebeispielen unterstützt. Falls Sie mehr Details wünschen, kontaktieren Sie mich am besten. Ich hoffe, Sie upvote n rep. –

+0

upvoted :) muss 18 Stunden warten, um Kopfgeld zu geben –

Verwandte Themen