微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

所以我有这段代码可以生成一个倒下的 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());
}

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。