Hello StackOverFlow Folks,
Я работаю над игрой, которая будет использовать какую-то систему создания пулов / создания экземпляров. Моя цель - создать бесконечный трек с моими префабами на первом изображении ниже. Я хочу каждый раз выбирать случайный сборный блок и соединять его с моим текущим треком с правильным положением и вращением. Казалось бы, как на втором изображении, где я вручную отрегулировал положения и повороты своих префабов (я создал свои префабы в блендере так, чтобы они составляли 60 единиц измерения по вертикали или горизонтали, что означает, что мои позиции кратны 30).
Довольно просто создавать прямые объекты неопределенно долго, но я понятия не имею, как каждый раз использовать различные повороты и положения, которые сделают мою гоночную трассу завершенной. Вот мой простой сценарий для создания прямых префабов на неопределенный срок. Что я должен задействовать в методе SpawnTiles (), чтобы достичь того, чего я хочу. Ответ не должен быть конкретным. Я могу использовать некоторые идеи, открывающие разум.
Спасибо заранее за вашу помощь.
public GameObject[] tilePrefabs;
private Transform playerTransform;
private float spawnZ = 35.5f;
private float tileLength = 60.0f;
private float safeZone = 60;
private int lastPrefabIndex = 0;
private int amountTilesOnScreen = 3;
private List<GameObject> activeTiles;
void Start()
{
activeTiles = new List<GameObject>();
playerTransform = GameObject.FindGameObjectWithTag("Cars").transform;
for (int i = 0; i < amountTilesOnScreen; i++)
{
SpawnTiles();
}
}
void Update()
{
if (playerTransform.position.z - safeZone > (spawnZ - amountTilesOnScreen * tileLength))
{
SpawnTiles();
DeleteTile();
}
}
private void SpawnTiles(int prefabIndex = -1)
{
GameObject go = Instantiate(tilePrefabs[RandomPrefabIndex()]) as GameObject;
go.transform.SetParent(transform);
go.transform.position = Vector3.forward * spawnZ;
spawnZ += tileLength;
activeTiles.Add(go);
}
private void DeleteTile()
{
Destroy(activeTiles[0]);
activeTiles.RemoveAt(0);
}
private int RandomPrefabIndex()
{
if (tilePrefabs.Length <= 1)
{
return 0;
}
int randomIndex = lastPrefabIndex;
while (randomIndex == lastPrefabIndex)
{
randomIndex = Random.Range(0, tilePrefabs.Length);
}
lastPrefabIndex = randomIndex;
return randomIndex;
}