Почти готовый скрипт генерации карты - готова генерация при запуске сцены, создаётся заданное число тайлов. Начал писать удаление и создание новых тайлов по тому, пока идёт игрок.
105 lines
2.9 KiB
C#
105 lines
2.9 KiB
C#
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using Unity.VisualScripting;
|
||
using UnityEngine;
|
||
|
||
/// <summary>
|
||
/// менеджер тайлов
|
||
/// инициализация, создание новых, удаление, отслеживание кол-ва тайлов
|
||
/// </summary>
|
||
public class TileManagerScript : MonoBehaviour
|
||
{
|
||
/// <summary>
|
||
/// число тайлов, которые будут созданы
|
||
/// </summary>
|
||
[SerializeField]
|
||
private int _NumTile;
|
||
|
||
/// <summary>
|
||
/// номер текущего тайла
|
||
/// </summary>
|
||
public int CurrentTile;
|
||
|
||
//
|
||
[SerializeField]
|
||
private float _DistanceTiles;
|
||
|
||
[SerializeField]
|
||
private List<GameObject> _TilesPref = new List<GameObject>();
|
||
|
||
/// <summary>
|
||
/// поле массива тайлов
|
||
/// </summary>
|
||
private List<GameObject> _Tiles;
|
||
|
||
// при запуске сцены, создание новых тайлов
|
||
private void Awake()
|
||
{
|
||
Debug.Log($"NumTile = {_NumTile}");
|
||
// создание массива
|
||
_Tiles = new List<GameObject>(_NumTile);
|
||
Debug.Log($"_Tiles = {_Tiles.Count}");
|
||
// запихивание в массив тайлов null, чтобы понимать, что там пусто
|
||
for (int i = 0; i < _Tiles.Count; i++)
|
||
{
|
||
_Tiles[i] = null;
|
||
}
|
||
Debug.Log($"_Tiles = {_Tiles.Count}");
|
||
float z = (_NumTile/2) * _DistanceTiles;
|
||
Debug.Log($"z = {z}");
|
||
|
||
// создание тайлов назад от игрока, где i номер тайла, а z координата transfrom.position.z
|
||
for (int i = 0; i < _NumTile; i++)
|
||
{
|
||
|
||
GenerateTile(new Vector3(0, 0, z), new Quaternion(0, 0, 0, 0));
|
||
z -= _DistanceTiles;
|
||
}
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// Генератор тайлов с собственным положением
|
||
/// </summary>
|
||
/// <param name="tile"></param>
|
||
/// <param name="pos"></param>
|
||
/// <param name="rot"></param>
|
||
public void GenerateTile(Vector3 pos, Quaternion rot)
|
||
{
|
||
Instantiate(_TilesPref[0], pos, rot);
|
||
}
|
||
/// <summary>
|
||
/// Генератор тайлов за последним
|
||
/// </summary>
|
||
public void GenerateTile()
|
||
{
|
||
Vector3 pos = _Tiles.Last().transform.position;
|
||
Quaternion rot = _Tiles.Last().transform.rotation;
|
||
Vector3 newVector = new Vector3(pos.x, pos.y, pos.z + _DistanceTiles);
|
||
Instantiate(_TilesPref[0], new Vector3(), rot);
|
||
DeleteTile();
|
||
}
|
||
|
||
/// <summary>
|
||
/// Удалитель тайлов
|
||
/// </summary>
|
||
/// <param name="tile"></param>
|
||
public void DeleteTile()
|
||
{
|
||
Destroy(_Tiles[0]);
|
||
_Tiles.RemoveAt(0);
|
||
//GenerateTile();
|
||
}
|
||
|
||
void Start()
|
||
{
|
||
|
||
}
|
||
|
||
// Update is called once per frame
|
||
void Update()
|
||
{
|
||
|
||
}
|
||
}
|