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);