Я пытаюсь создать игру для игры в кирпичи с динамической загрузкой уровней. Я хотел бы остаться в одной сцене на всю игру, а затем динамически загружать разные уровни, меняя позиции кирпича (например, один уровень, где кирпичи имеют форму круга, другой уровень, где кирпичи имеют форму квадрат и т. д.).
Я представлял экран как сетку, в которой каждая ячейка либо имеет кирпичик, либо нет, и размещал их, используя циклы 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;
}
}
}