Сообщение от Crystal
У меня на сетактиве весь юзер интерфейс и хелсбары.
На счет выпила объектов на поле боя, это легко. Делаем глобальный статический скрипт, вешаем в него переменную отвечающую за зачистку. В каждом объекте зашиваем условие с проверкой значения этой переменной, в результат условия пишем дестрой зыс, всё. При завершении боя меняем эту переменную, и все объекты самовыпиливаются.
|
Ты имеешь в виду, каждый объект в Update проверяет каждый кадр, не пора ли ему удолиться? Это не самый производительный вариант, потому что проверка будет идти каждый кадр. Это не очень хорошо.
Вообще такое можно сделать 2 способами:
Через эвенты.
1. Создаёшь UnityEvent battleOver и вызываешь его battleOver.Invoke() в момент, когда битва завершена.
2. Каждому объекту, который имеет отношение к, в OnEnable делаешь подписку (лайк, колокольчик) на этот эвент:
battleOver.AddEventListener(() => {Debug.Log("Я отреагировал на завершение битвы!");});
Ну и соответственно в листенере можешь делать то действие, какое надо при завершении битвы (например, удалять этот объект).
Вариант с эвентами хорош тем, что можно создать эвенты на все ключевые события, а потом объекты "подписывать" на них по мере надобности.
Второй способ через списки:
Иметь список всех однотипных объектов и при надобности перебирать их все.
public static List<Monster> allMonsters = new List<Monster>(); // Глобальный список
Monster.allMonsters.Add(this); // Каждого монстра при создании (OnEnable) заносим в список
Monster.allMonsters.Remove(this); // Каждого монстра при удалении (OnDisable) убираем из списка
Соответственно при создании и удалении у тебя автоматом будут заноситься или убираться монстры в список.
Если тебе надо удалить всех монстров (или что-то с ними сделать) то перебираешь список:
Monster.allMonsters.ForEach(monster => {Debug.Log($"А мы тут монстров перебираем: {monster}!");});
Способ со списками более простой, но я бы советовал раздуплить как работают эвенты, полезная штука.