C# LevelGenerator不是最优的

C# LevelGenerator不是最优的,c#,unity3d,C#,Unity3d,目前,对于生成级别,我使用的是一个运行良好级别的非最佳解决方案,没有任何延迟生成问题是这是大量代码,随着级别越来越大,此代码将越来越难以管理,因此我正在寻找更好的解决方案 如何更好地创建我的级别?它们是更好的系统吗?位数组?这是一个更好的方向 #区域级生成器 私有void LevelCreator(整数级){ 如果(级别==1){ 向量3位置=新向量3(0,0,0); Vector3 pos2=新的Vector3(-1,0,0); Vector3 pos3=新Vector3(-2,0,0); V

目前,对于生成级别,我使用的是一个运行良好级别的非最佳解决方案,没有任何延迟生成问题是这是大量代码,随着级别越来越大,此代码将越来越难以管理,因此我正在寻找更好的解决方案

如何更好地创建我的级别?它们是更好的系统吗?位数组?这是一个更好的方向

#区域级生成器
私有void LevelCreator(整数级){
如果(级别==1){
向量3位置=新向量3(0,0,0);
Vector3 pos2=新的Vector3(-1,0,0);
Vector3 pos3=新Vector3(-2,0,0);
Vector3 pos4=新Vector3(-3,0,0);
Vector3 pos5=新Vector3(-4,0,0);
Vector3位置6=新Vector3(-5,0,0);
Vector3 pos7=新Vector3(-6,0,0);
Vector3 pos8=新Vector3(-7,0,0);
实例化(startCube、pos、四元数.identity);
实例化(fallCube,pos2,四元数.identity);
实例化(fallCube、pos3、四元数.identity);
实例化(fallCube、pos4、四元数.identity);
实例化(fallCube、pos5、四元数.identity);
实例化(fallCube,pos6,四元数.identity);
实例化(fallCube,pos7,四元数.identity);
实例化(endCube,pos8,四元数.identity);
player.transform.position=pos+Vector3.up;
}否则如果(级别==2){
向量3位置=新向量3(0,0,0);
Vector3 pos2=新的Vector3(0,0,1);
Vector3 pos3=新的Vector3(0,0,2);
Vector3 pos4=新Vector3(-1,0,2);
Vector3 pos5=新Vector3(-2,0,2);
向量3位置6=新向量3(-2,0,1);
Vector3 pos7=新Vector3(-2,0,0);
Vector3 pos8=新Vector3(-3,0,0);
Vector3位置9=新Vector3(-4,0,0);
Vector3 pos10=新Vector3(-4,0,1);
Vector3 pos11=新Vector3(-4,0,2);
向量3位置12=新向量3(-5,0,2);
实例化(startCube、pos、四元数.identity);
实例化(fallCube,pos2,四元数.identity);
实例化(fallCube、pos3、四元数.identity);
实例化(fallCube、pos4、四元数.identity);
实例化(fallCube、pos5、四元数.identity);
实例化(fallCube,pos6,四元数.identity);
实例化(fallCube,pos7,四元数.identity);
实例化(fallCube,pos8,四元数.identity);
实例化(fallCube,pos9,四元数.identity);
实例化(fallCube、pos10、四元数.identity);
实例化(fallCube,pos11,四元数.identity);
实例化(endCube,pos12,四元数.identity);
player.transform.position=pos+Vector3.up;
}否则如果(级别==3){
向量3位置=新向量3(0,0,0);
Vector3 pos2=新的Vector3(0,0,1);
Vector3 pos3=新的Vector3(0,0,2);
Vector3 pos4=新Vector3(-1,0,2);
Vector3位置5=新Vector3(-1,0,3);
向量3位置6=新向量3(-1,0,4);
Vector3 pos7=新的Vector3(0,0,4);
Vector3 pos8=新的Vector3(1,0,4);
Vector3 pos9=新的Vector3(1,0,5);
Vector3 pos10=新Vector3(1,0,6);
Vector3 pos11=新Vector3(1,0,7);
Vector3 pos12=新的Vector3(0,0,7);
Vector3 pos13=新Vector3(-1,0,7);
Vector3 pos14=新Vector3(-2,0,7);
Vector3 pos15=新Vector3(-3,0,7);
Vector3 pos16=新Vector3(-4,0,7);
Vector3 pos17=新Vector3(-4,0,6);
Vector3 pos18=新Vector3(-4,0,5);
Vector3 pos19=新Vector3(-4,0,4);
Vector3 pos20=新Vector3(-3,0,4);
Vector3 pos21=新Vector3(-2,0,4);
Vector3 pos22=新Vector3(-2,0,3);
Vector3 pos23=新的Vector3(-2,0,2);
Vector3 pos24=新Vector3(-2,0,1);
Vector3 pos25=新Vector3(-2,0,0);
实例化(startCube、pos、四元数.identity);
实例化(fallCube,pos2,四元数.identity);
实例化(fallCube、pos3、四元数.identity);
实例化(fallCube、pos4、四元数.identity);
实例化(fallCube、pos5、四元数.identity);
实例化(fallCube,pos6,四元数.identity);
实例化(fallCube,pos7,四元数.identity);
实例化(fallCube,pos8,四元数.identity);
实例化(fallCube,pos9,四元数.identity);
实例化(fallCube、pos10、四元数.identity);
实例化(fallCube,pos11,四元数.identity);
实例化(fallCube,pos12,四元数.identity);
实例化(fallCube,pos13,四元数.identity);
实例化(fallCube,pos14,四元数.identity);
实例化(fallCube,pos15,四元数.identity);
实例化(fallCube,pos16,四元数.identity);
实例化(fallCube,pos17,四元数.identity);
实例化(fallCube,pos18,四元数.identity);
实例化(fallCube,pos19,四元数.identity);
实例化(fallCube,pos20,四元数.identity);
实例化(fallCube,pos21,四元数.identity);
实例化(fallCube,pos22,四元数.identity);
实例化(fallCube,pos23,四元数.identity);
实例化(fallCube,pos24,四元数.identity);
实例化(endCube,pos25,四元数.identity);
player.transform.position=pos+Vector3.up;
}否则,如果(级别==4){
Vector3位置=新Vector3
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;
        }
    }
{
  "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
    }
  ]
}
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;
        }
 }
Level newlevel = new JavaScriptSerializer().Deserialize<Level>(jsonfile);
String savedleveljson = new JavaScriptSerializer().Serialize(leveltowrite);