动态水平破碎机

时间:2018-07-04 16:16:18

标签: c# unity3d

我正在尝试创建具有动态加载级别的破砖游戏。我想在整个游戏中都停留在一个场景中,然后通过更改积木的位置动态加载不同的关卡(例如,关卡中的一个圆圈是圆形的一个关卡,关卡中的另一个关卡是一个圆形的关卡)正方形等)。

我已经将屏幕想象成一个网格,每个单元格都具有或不具有砖块,并使用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;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

是的,您可以为每个级别创建一个预制件,只需在一个GameObject下进行设计,然后从该GameObject创建一个预制件。现在,当您更改级别时,实例化正确的预制件。 我认为那是最简单的方法。

您还可以尝试许多其他方法。 在每个级别上对每个砖的位置进行硬编码,并在“动态”加载新级别时使用这些信息。 将位置值存储在其他位置(文件,数据库等)。

希望这会有所帮助。