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

Posted

技术标签:

【中文标题】如何无限生成统一的网格?【英文标题】:How to infinitely generate a grid in unity? 【发布时间】:2021-09-24 02:40:05 【问题描述】:

所以我有这段代码可以生成一个 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 并在它们之间切换,但结果有问题。 有没有办法让它成为可能?

【问题讨论】:

我建议你观看这个视频(视差)并根据你的情况调整它:youtube.com/watch?v=zit45k6CUMk 我认为原则是你使用两个网格,每次第一个从屏幕上消失时你将它移到第二个的顶部。 【参考方案1】:

我相信你想在它到达终点之前生成下一个网格,我建议你有一个系统

GameObject gridPrefab;
GameObject grid;
Queue<GameObject> grids;
Transform camera;
Vector3 newPos = Vector3.zero;
Vector3 offset = new Vector3(0,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());

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

【讨论】:

以上是关于如何无限生成统一的网格?的主要内容,如果未能解决你的问题,请参考以下文章

如果启用了无限滚动,如何防止剑道网格两次加载数据?

如何在 GLSL 中渲染无限的 2D 网格?

动态加载无限网格的数据

react ag网格中的行删除后如何刷新网格

如何将彩色网格从 meshlab 导入统一!(可能到 3ds max)

无限网格滚动和局部过滤