basic level generator

This commit is contained in:
MrTorex committed 2026-03-07 12:36:01 +03:00
1 parent 7af7baf7f0
commit a925c191e2
15 files changed
+927 -114

No files matched your search

@@ -0,0 +1,82 @@
using System.Collections.Generic;
using UnityEngine;
public class LevelBuilder : MonoBehaviour
{
[Header("Tile Settings")]
[SerializeField] private GameObject[] tilePrefabs;
[SerializeField] private float tileLength = 6f;
[SerializeField] private int numberOfTiles = 20;
[SerializeField] private Transform playerTransform;
[Header("Environment Settings")]
[SerializeField] private GameObject[] treePrefabs;
[SerializeField] private float sideOffset = 10f;
[SerializeField] private float treeRandomSpread = 2f;
private readonly List<GameObject> _activeTiles = new();
private readonly List<GameObject> _activeEnvironment = new();
private float _spawnZ;
private void Start()
{
for (var i = 0; i < numberOfTiles; i++)
{
SpawnTile(i < 5 ? 0 : Random.Range(0, tilePrefabs.Length));
}
}
private void Update()
{
if (playerTransform.position.z - 35 > _spawnZ - numberOfTiles * tileLength)
{
SpawnTile(Random.Range(0, tilePrefabs.Length));
DeleteTile();
}
}
private void SpawnTile(int tileIndex)
{
var tile = Instantiate(tilePrefabs[tileIndex], transform.forward * _spawnZ, transform.rotation);
_activeTiles.Add(tile);
SpawnEnvironment(_spawnZ);
_spawnZ += tileLength;
}
private void SpawnEnvironment(float zPos)
{
var envContainer = new GameObject("EnvGroup_" + zPos);
envContainer.transform.SetParent(transform);
CreateTree(-sideOffset, zPos, envContainer.transform);
CreateTree(sideOffset, zPos, envContainer.transform);
_activeEnvironment.Add(envContainer);
}
private void CreateTree(float xOffset, float zPos, Transform parent)
{
if (treePrefabs.Length == 0) return;
var finalX = xOffset + Random.Range(-treeRandomSpread, treeRandomSpread);
var finalZ = zPos + Random.Range(-treeRandomSpread, treeRandomSpread);
var spawnPos = new Vector3(finalX, 0, finalZ);
var treePrefab = treePrefabs[Random.Range(0, treePrefabs.Length)];
var tree = Instantiate(treePrefab, spawnPos, Quaternion.Euler(0, Random.Range(0, 360), 0));
tree.transform.SetParent(parent);
}
private void DeleteTile()
{
Destroy(_activeTiles[0]);
_activeTiles.RemoveAt(0);
Destroy(_activeEnvironment[0]);
_activeEnvironment.RemoveAt(0);
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: a596f6fd58984b8086c3494224d3a45e
timeCreated: 1772874458