Восстановление "List<gameObject>"после их удаления"RemoveAt"

Программирование на Юнити.

Восстановление "List<gameObject>"после их удаления"RemoveAt"

Сообщение Xmerc 22 май 2021, 02:39

Доброго времени суток, такая проблема. Есть спавнер и список List<> объектов, которые должны рандомно появляться , но после появления они удаляются в инспекторе с помощью(RemoveAt), что бы не повторяться.
Как восстановить список объектов для бесконечного использования?
Вот код:

public class spawner: MonoBehaviour
{
public List<GameObject> Walls; //объекты
private float timeBtwSpawn;
public float startTimeBtwSpawn =2;
public float decreaseTime;
public float minTime;
int i=1;
int i2;

public void Update()
{
if(timeBtwSpawn <= 0)
{
for(i=1;i<2;i++) //цикл
{
int rand = Random.Range(0, Walls.Count);
Instantiate(Walls[rand], transform.position, Quaternion.identity);
Walls.RemoveAt(rand); // Удаление объекта, что бы не было повторений
i2++;
}
timeBtwSpawn = startTimeBtwSpawn;
if(startTimeBtwSpawn > minTime)
{
startTimeBtwSpawn -= decreaseTime;
}
if(i2>=5) //если больше 5, то объекты должны восстановиться
{

Debug.Log("Again");
i2 = 0;
}
}
else
{
timeBtwSpawn -= Time.deltaTime;
}
}
}
У вас нет доступа для просмотра вложений в этом сообщении.
Xmerc
UNец
 
Сообщения: 2
Зарегистрирован: 22 май 2021, 01:26

Re: Восстановление "List<gameObject>"после их удаления"RemoveAt"

Сообщение Xtir 22 май 2021, 08:01

Добавлять их в другой массив?
Xtir
UNIверсал
 
Сообщения: 498
Зарегистрирован: 21 окт 2016, 00:37

Re: Восстановление "List<gameObject>"после их удаления"RemoveAt"

Сообщение Jarico 22 май 2021, 14:28

Создай класс и список
Синтаксис:
Используется csharp
[System.Serializable]
class Wall
{
public GameObject prefab;//ссылка на префаб
[System.NonSerializable]
public bool CanSpawn;//можно ли создавать?
}

public List<Wall> Walls = new List<Wall>();
 


В инспекторе добавляй префабы, в коде при создании стены просто делай CanSpawn = false; и при следующем создании стены проверяй CanSpawn == true
Github: _https://github.com/redheadgektor
Discord: Конь! Чаю!#9382 (сижу редко)
YouTube: _https://www.youtube.com/channel/UCPQ04Xpbbw2uGc1gsZtO3HQ
Telegram: _https://t.me/redheadgektor
Аватара пользователя
Jarico
Адепт
 
Сообщения: 1084
Зарегистрирован: 06 янв 2019, 17:37
Откуда: 0xDEAD
Skype: none
  • Сайт

Re: Восстановление "List<gameObject>"после их удаления"RemoveAt"

Сообщение Xmerc 22 май 2021, 18:06

Спасибо за советы, все оказалось проще, добавил еще один list<> и просто копировал элементы от туда.
public class spawner: MonoBehaviour
{
public List<GameObject> Walls; //объекты
public List<GameObject> Walls2; //их копия
private float timeBtwSpawn;
public float startTimeBtwSpawn =2;
public float decreaseTime;
public float minTime;
int i=1;
int i2;

public void Update()
{
if(timeBtwSpawn <= 0)
{
for(i=1;i<2;i++) //цикл
{
int rand = Random.Range(0, Walls.Count);
Instantiate(Walls[rand], transform.position, Quaternion.identity);
Walls.RemoveAt(rand); // Удаление объекта, что бы не было повторений
i2++;
}
timeBtwSpawn = startTimeBtwSpawn;
if(startTimeBtwSpawn > minTime)
{
startTimeBtwSpawn -= decreaseTime;
}
if(i2>=5) //если больше 5, то объекты должны восстановиться
{
Walls.AddRange(Walls2); //копирование объектов с копии
Debug.Log("Again");
i2 = 0;
}
}
else
{
timeBtwSpawn -= Time.deltaTime;
}
}
}
Xmerc
UNец
 
Сообщения: 2
Зарегистрирован: 22 май 2021, 01:26


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 3