我正在尝试创建具有动态加载级别的破砖游戏。我想在整个游戏中都停留在一个场景中,然后通过更改积木的位置动态加载不同的关卡(例如,关卡中的一个圆圈是圆形的一个关卡,关卡中的另一个关卡是一个圆形的关卡)正方形等)。
我已经将屏幕想象成一个网格,每个单元格都具有或不具有砖块,并使用for循环放置它们。我的麻烦是动态加载数据。现在,我有关于数组的网格数据。我有一半尝试上传1个json文件,但没有成功。
我不确定该如何解决。是否为每个级别制作单独的json文件? json文件甚至可以具有锯齿状数组吗?我如何将数据提取为数组?有没有办法用playerprefs做到这一点?
任何帮助将不胜感激
public class BrickGrid : MonoBehaviour {
string filename = "data.json";
string jsonString;
string path;
public Transform brickPrefab;
[System.Serializable]
public class Bricks {
public string[] rows;
}
void Start() {
LoadGridData();
InitGrid();
}
void LoadGridData() {
path = Application.streamingAssetsPath + "/" + filename;
if (File.Exists(path)) {
jsonString = File.ReadAllText(path);
BrickPattern rows = JsonUtility.FromJson<BrickPattern>(jsonString);
}
}
void InitGrid() {
int[] row1 = { 0, 0, 1, 1 };
int[] row2 = { 1, 1, 0, 1 };
int[] row3 = { 0, 0, 0, 1 };
int[][] rows = new int[][] {row1, row2, row3};
Vector2 brickPosition = new Vector3(-2.25f, 4f, 0);
for (int i = 0; i < rows.Length; i++) {
int[] individualRow = rows[i];
for (int j = 0; j < individualRow.Length; j++){
if (individualRow[j] == 1){
// instantiate
Instantiate(brickPrefab, brickPosition, Quaternion.identity);
}
else if (individualRow[j] == 0) {
continue;
}
// inrease x position
brickPosition.x = brickPosition.x + 1.5f;
}
// increase y position and reset x position
brickPosition.x = -2.25f;
brickPosition.y = brickPosition.y - 1.5f;
}
}
}
答案 0 :(得分:0)
是的,您可以为每个级别创建一个预制件,只需在一个GameObject
下进行设计,然后从该GameObject
创建一个预制件。现在,当您更改级别时,实例化正确的预制件。
我认为那是最简单的方法。
您还可以尝试许多其他方法。 在每个级别上对每个砖的位置进行硬编码,并在“动态”加载新级别时使用这些信息。 将位置值存储在其他位置(文件,数据库等)。
希望这会有所帮助。