如何无限生成统一的网格?
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());
这是在没有测试的情况下完成的,如果对你有意义,请告诉我,如果有意义但不工作,我可以稍后测试。
【讨论】:
以上是关于如何无限生成统一的网格?的主要内容,如果未能解决你的问题,请参考以下文章