问题描述
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());
}
这是在没有测试的情况下完成的,如果对您有意义,请告诉我,如果有意义但不起作用,我可以稍后进行测试。