Готовить префабы перед камерой, пока она движется - PullRequest
0 голосов
/ 05 января 2019

В 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);
         }
     }
 }
...