如何无限生成统一的网格?

问题描述

所以我有这段代码可以生成一个倒下的 7x50 网格。

public class FieldController : MonoBehavIoUr
{
    [Serializefield] private GameObject gridPrefab;
    [Serializefield] private int rows = 50;
    [Serializefield] private int columns = 7;
    [Serializefield] private float tileSize = 1;

    private GameObject tile;
    private GameObject parentObject;

    private float gridW;
    private float gridH;

    private float posX;
    private float posY;
    
    

    private void Start()
    {
        parentObject = new GameObject("Parent");
        GenerateGrid();
    }

    private void Update()
    {
        MoveGridDown();
    }

    void GenerateGrid()
    {
        for (int i = 0; i < rows; i++)
        {
            for (int j = 0; j < columns; j++)
            {
                tile = Instantiate(gridPrefab,parentObject.transform);

                posX = j * tileSize;
                posY = i * tileSize;

                tile.transform.position = new Vector2(posX,posY);
            }
        }
        SetParentToStart(parentObject);
    }

    void SetParentToStart(GameObject parent)
    {
        parent.transform.position = new Vector3(-columns / 2 + tileSize,rows / 10,0);
    }

    void MoveGridDown()
    {
        parentObject.transform.position -= new Vector3(0,FallingObjectBehavIoUr.FallingSpeed * Time.deltaTime);
    }
}

这是它的样子: https://imgur.com/a/nKtOuyV

我想要做的是能够在每次前一个到达结束时生成新网格,这样看起来网格是无限的。

我尝试为父对象使用额外的 GameObject 并在它们之间切换,但结果有问题。 有没有办法让它成为可能?

解决方法

我相信你想在它结束之前生成下一个网格,我建议你有一个系统

GameObject gridPrefab;
GameObject grid;
Queue<GameObject> grids;
Transform camera;
Vector3 newPos = Vector3.zero;
Vector3 offset = new Vector3(0,50);
Quaternion forward = Quaternion.Euler(Vector3.forward);
int i = 0;

然后在相机超出“newPos”后实例化新网格,将其添加到队列并销毁最后一个。

if(newPos.z > camera.z)
{
    newPos += offset;
    grid = Instantiate(gridPrefab,newPos,forward);
    grid.name = $"grid{++i}";
    grids.Enqueue(grid);
    Destroy(grids.Dequeue());
}

这是在没有测试的情况下完成的,如果对您有意义,请告诉我,如果有意义但不起作用,我可以稍后进行测试。