Готовить префабы перед камерой, пока она движется
В Unity я пытаюсь создать основу, которая является формой матрицы, процедурно генерируемой, когда мой игрок и камера перемещаются по сцене. Представьте себе матрицу, добавляющую новую строку каждый раз, когда игрок подходит достаточно близко к ее концу.
У меня есть эта площадка, на которой работает игрок. Основание сделано из разных квадратных сборных, равных по размеру. Я использую этот код, чтобы случайным образом выбрать префаб из массива GameObject и построить из них матрицу, которая представляет мою основу. Прямо сейчас я генерирую всю землю во время выполнения, но я хочу сделать так, чтобы она бесконечно генерировала новые линии в матрице по мере продвижения игрока. Я попытался умножить переменную расстояния на мою позицию преобразования Instantiate, чтобы она выглядела так:
GameObject theTile = Instantiate (thePrefab, transform + transform.forward * distanceAhead);
Я также попытался настроить пустой GameObject, называемый SpawnPoint, как дочерний элемент Camera, который перемещается вместе с камерой и моим LevelInstancing, немного перемещаясь каждый раз, и если он пересекает SpawnPoint, он должен порождать еще одну строку префабов в этой матрице, код выглядел бы так:
void CreateMap()
{
for (int row = 1; row <= myGrid.y; row++)
{
for (int col = 1; col <= myGrid.x; col++)
{
if(transform.position.z < spawnPoint.transform.position.z)
{
transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z + distance);
int n = Random.Range(0, prefabTiles.Length);
GameObject thePrefab = prefabTiles[n];
GameObject theTile = Instantiate(thePrefab, transform);
theTile.name = "Tile_" + col + "_" + row;
theTile.transform.localPosition = new Vector3((col - 1) * tileDimensions.x, 0, (row - 1) * tileDimensions.z);
mapList.Add(theTile);
}
}
}
}
Но это не работает должным образом.
Это мой рабочий код, который я сейчас использую.
void Start()
{
CreateMap();
}
void CreateMap()
{
for (int row = 1; row <= myGrid.y; row++)
{
for (int col = 1; col <= myGrid.x; col++)
{
int n = Random.Range(0, prefabTiles.Length);
GameObject thePrefab = prefabTiles[n];
GameObject theTile = Instantiate(thePrefab, transform);
theTile.name = "Tile_" + col + "_" + row;
theTile.transform.localPosition = new Vector3((col - 1) * tileDimensions.x, 0, (row - 1) * tileDimensions.z);
mapList.Add(theTile);
}
}
}