Код закрытых тайлов
Дописал код в менеджер тайлов, который закрывает пройденные зоны от игрока
This commit is contained in:
@ -1,5 +1,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering.Universal;
|
||||
|
||||
/// <summary>
|
||||
/// менеджер тайлов
|
||||
@ -31,6 +33,11 @@ public class TileManagerScript : MonoBehaviour
|
||||
[SerializeField]
|
||||
private List<GameObject> _Tiles = new List<GameObject>();
|
||||
|
||||
/// <summary>
|
||||
/// счётчик кол-ва созданных тайлов
|
||||
/// </summary>
|
||||
private int _CountTile = 0;
|
||||
|
||||
/// <summary>
|
||||
/// при запуске сцены, создание новых тайлов
|
||||
/// </summary>
|
||||
@ -43,7 +50,12 @@ public class TileManagerScript : MonoBehaviour
|
||||
for (int i = 0; i < _NumTile; i++)
|
||||
{
|
||||
// генерация нового тайла, с собственным z
|
||||
GenerateTile(new Vector3(0, 0, z), new Quaternion(0, 0, 0, 0));
|
||||
GameObject tile = GenerateTile(new Vector3(0, 0, z), new Quaternion(0, 0, 0, 0));
|
||||
|
||||
if (z <= 0)
|
||||
{
|
||||
SetCloseZone(tile);
|
||||
}
|
||||
|
||||
// увелечение позиции тайла по transform.position.z
|
||||
z += _DistanceTiles;
|
||||
@ -51,6 +63,53 @@ public class TileManagerScript : MonoBehaviour
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Активация зон закрытия
|
||||
/// </summary>
|
||||
/// <param name="tile"></param>
|
||||
private void SetCloseZone(GameObject tile)
|
||||
{
|
||||
// цикл нахождения скрипта тригера по тегу
|
||||
foreach (Transform child in tile.transform)
|
||||
{
|
||||
// если найден тег, то передать и закрыть
|
||||
if (child.CompareTag("Trigger Zone"))
|
||||
{
|
||||
// получение адреса объекта
|
||||
child.GetComponent<TriggerZoneScript>().WasTrigged = true;
|
||||
|
||||
// выход из цикла
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (Transform child in tile.transform)
|
||||
{
|
||||
// если найден тег, то передать и закрыть
|
||||
if (child.CompareTag("Close Zone"))
|
||||
{
|
||||
// передача адреса объекта
|
||||
child.gameObject.SetActive(true);
|
||||
|
||||
// выход из цикла
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// присваивание тайлу его номера в имя
|
||||
/// </summary>
|
||||
/// <param name="tile">передаваемый тайл</param>
|
||||
private void NewNameTile(GameObject tile)
|
||||
{
|
||||
// увеличение счётчика тайлов
|
||||
_CountTile++;
|
||||
|
||||
// Прибавить к имени тайла его номер
|
||||
tile.name += _CountTile;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// генератор тайлов по заданному transform
|
||||
/// </summary>
|
||||
@ -62,11 +121,18 @@ public class TileManagerScript : MonoBehaviour
|
||||
// создание нового тайла
|
||||
GameObject newTile = Instantiate(GetRandomObject(_TilePrefs), pos, rot);
|
||||
|
||||
// присваивание номера
|
||||
NewNameTile(newTile);
|
||||
|
||||
GameObject prevTile = _Tiles.LastOrDefault();
|
||||
|
||||
TransCloseZoneSub(newTile, prevTile);
|
||||
|
||||
// добавление массива в отслеживание
|
||||
_Tiles.Add(newTile);
|
||||
|
||||
// подпись нового тайла на эвент
|
||||
SubTrigEvent(newTile);
|
||||
SubTileTrigEvent(newTile);
|
||||
|
||||
// перемещение нового тайла в менеджер как child
|
||||
newTile.transform.SetParent(gameObject.transform);
|
||||
@ -95,6 +161,13 @@ public class TileManagerScript : MonoBehaviour
|
||||
// создание нового тайла и получение его адреса
|
||||
GameObject newTile = Instantiate(GetRandomObject(_TilePrefs), newVector, rot);
|
||||
|
||||
// присваивание номера
|
||||
NewNameTile(newTile);
|
||||
|
||||
GameObject prevTile = _Tiles.LastOrDefault();
|
||||
|
||||
TransCloseZoneSub(newTile, prevTile);
|
||||
|
||||
// добавление массива в отслеживание
|
||||
_Tiles.Add(newTile);
|
||||
|
||||
@ -102,7 +175,7 @@ public class TileManagerScript : MonoBehaviour
|
||||
newTile.transform.SetParent(gameObject.transform);
|
||||
|
||||
// подпись нового тайла на эвент тригера зоны
|
||||
SubTrigEvent(newTile);
|
||||
SubTileTrigEvent(newTile);
|
||||
|
||||
// удаление первого в списке тайла
|
||||
DeleteTile();
|
||||
@ -133,7 +206,7 @@ public class TileManagerScript : MonoBehaviour
|
||||
/// Подпись на триггер эвент в тайле
|
||||
/// </summary>
|
||||
/// <param name="tile">передаваемый тайл на подпись</param>
|
||||
private void SubTrigEvent(GameObject tile)
|
||||
private void SubTileTrigEvent(GameObject tile)
|
||||
{
|
||||
// прохождение по всем child в tile
|
||||
foreach (Transform child in tile.transform)
|
||||
@ -150,10 +223,61 @@ public class TileManagerScript : MonoBehaviour
|
||||
}
|
||||
}
|
||||
|
||||
public void test()
|
||||
/// <summary>
|
||||
/// Передача в ново созданный тайл, зоны закртытия предыдущего
|
||||
/// </summary>
|
||||
/// <param name="newTile">Новый тайл</param>
|
||||
/// <param name="pervTile">Предыдущий тайл</param>
|
||||
public void TransCloseZoneSub(GameObject newTile, GameObject pervTile)
|
||||
{
|
||||
GenerateTile();
|
||||
// Получение зоны закрытия
|
||||
GameObject closeZone = null;
|
||||
|
||||
// скрипт с эвентом тригера
|
||||
TriggerZoneScript triggerZoneScript = null;
|
||||
|
||||
// проверка наличия нового тайла
|
||||
if (newTile != null)
|
||||
{
|
||||
// цикл нахождения скрипта тригера по тегу
|
||||
foreach (Transform child in newTile.transform)
|
||||
{
|
||||
// если найден тег, то передать и закрыть
|
||||
if (child.CompareTag("Trigger Zone"))
|
||||
{
|
||||
// получение адреса объекта
|
||||
triggerZoneScript = child.GetComponent<TriggerZoneScript>();
|
||||
|
||||
// выход из цикла
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// проверка на наличие предыдущего тайла
|
||||
if (pervTile != null)
|
||||
{
|
||||
// поиск зоны закрытия по тегу
|
||||
foreach (Transform child in pervTile.transform)
|
||||
{
|
||||
// если найден тег, то передать и закрыть
|
||||
if (child.CompareTag("Close Zone"))
|
||||
{
|
||||
// передача адреса объекта
|
||||
closeZone = child.gameObject;
|
||||
|
||||
// выход из цикла
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// проверка на первосозданный тайл, у него нет предыдущего тайла, поэтому нечего закрывать
|
||||
if (closeZone != null)
|
||||
{
|
||||
// передача анонимной функции активации зоны закрытия
|
||||
triggerZoneScript.GetComponent<TriggerZoneScript>().TriggerZoneEvent.AddListener(() => closeZone.SetActive(true));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Генератор случайно взятого объекта
|
||||
/// </summary>
|
||||
|
Reference in New Issue
Block a user