Показать сообщение отдельно
Старый 13.10.2020, 23:38   #11
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Очередные вопросы от меня по игровой логике и скриптингу

Сообщение от 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}!");}); 

Способ со списками более простой, но я бы советовал раздуплить как работают эвенты, полезная штука.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Crystal (14.10.2020)