Синтаксис:
Используется csharp
public class RoadSpawner : MonoBehaviour //СЛУЧАЙНАЯ ГЕНЕРАЦИЯ БЛОКОВ ДОРОГИ
{
//ПЕРЕМЕННЫЕ:
public GameObject[] RoadBlockPrefabs; //массив где хранятся префабы дороги
public GameObject StartBlock; //первый/стартовый блок
public int BlocksCount = 4; //количество одновременно отображаемых блоков в игре
public float BlockLength = 0f; //длинна 1го блока
public int SafeZone = 45; //фора по позиции, чтобы блоки не удалялись слишком рано
float blockZPos = 0f; //позиция по оси Z стартового блока
public Transform PlayerTransf; //перемещение Игрока
List<GameObject> CurrentBlocks = new List<GameObject>(); //список в который добавляем блоки
//____________________________________________________________________________________________________
void Start()
{
blockZPos = StartBlock.transform.position.z; //присваеваем позицию по Z стартовому блоку
CurrentBlocks.Add(StartBlock); //стартовый блок удаляется после его прохождение
//Цикл спавна блоков:
for (int i = 0; i < BlocksCount; i++)
{
SpawnBlock();
}
}
void Update()
{
CheckForSpawn(); //ПОСТОЯННАЯ ГЕНЕРАЦИЯ БЛОКОВ
}
void CheckForSpawn() //ПОСТОЯННАЯ ГЕНЕРАЦИЯ БЛОКОВ
{
if(PlayerTransf.position.z - SafeZone > (blockZPos - BlocksCount * BlockLength))
{
SpawnBlock();
DestroyBlock();
}
}
void SpawnBlock() //СЛУЧАЙНЫМ ОБРАЗОМ ГЕНЕРИРУЕМ БЛОКИ ДОРОГИ ИЗ СПИСКА ПРЕФАБОВ
{
GameObject block = Instantiate(RoadBlockPrefabs[Random.Range(0, RoadBlockPrefabs.Length)], transform);
blockZPos += BlockLength;
block.transform.position = new Vector3(0, 0, blockZPos);
CurrentBlocks.Add(block);
}
void DestroyBlock() //УДАЛЕНИЕ БЛОКОВ
{
Destroy(CurrentBlocks[0]);
CurrentBlocks.RemoveAt(0);
}
}
{
//ПЕРЕМЕННЫЕ:
public GameObject[] RoadBlockPrefabs; //массив где хранятся префабы дороги
public GameObject StartBlock; //первый/стартовый блок
public int BlocksCount = 4; //количество одновременно отображаемых блоков в игре
public float BlockLength = 0f; //длинна 1го блока
public int SafeZone = 45; //фора по позиции, чтобы блоки не удалялись слишком рано
float blockZPos = 0f; //позиция по оси Z стартового блока
public Transform PlayerTransf; //перемещение Игрока
List<GameObject> CurrentBlocks = new List<GameObject>(); //список в который добавляем блоки
//____________________________________________________________________________________________________
void Start()
{
blockZPos = StartBlock.transform.position.z; //присваеваем позицию по Z стартовому блоку
CurrentBlocks.Add(StartBlock); //стартовый блок удаляется после его прохождение
//Цикл спавна блоков:
for (int i = 0; i < BlocksCount; i++)
{
SpawnBlock();
}
}
void Update()
{
CheckForSpawn(); //ПОСТОЯННАЯ ГЕНЕРАЦИЯ БЛОКОВ
}
void CheckForSpawn() //ПОСТОЯННАЯ ГЕНЕРАЦИЯ БЛОКОВ
{
if(PlayerTransf.position.z - SafeZone > (blockZPos - BlocksCount * BlockLength))
{
SpawnBlock();
DestroyBlock();
}
}
void SpawnBlock() //СЛУЧАЙНЫМ ОБРАЗОМ ГЕНЕРИРУЕМ БЛОКИ ДОРОГИ ИЗ СПИСКА ПРЕФАБОВ
{
GameObject block = Instantiate(RoadBlockPrefabs[Random.Range(0, RoadBlockPrefabs.Length)], transform);
blockZPos += BlockLength;
block.transform.position = new Vector3(0, 0, blockZPos);
CurrentBlocks.Add(block);
}
void DestroyBlock() //УДАЛЕНИЕ БЛОКОВ
{
Destroy(CurrentBlocks[0]);
CurrentBlocks.RemoveAt(0);
}
}