Единство - объект БЫЛ уничтожен? - PullRequest
1 голос
/ 01 мая 2020

Позвольте следующее:

  • A: имеет несколько B детей;

  • B: является ребенком A.

  • Все родительское => дочернее дерево должно быть уничтожено всякий раз, когда любая часть дерева уничтожается. Т.е. удалить B, и он также должен удалить своего родителя A и его B братьев и сестер. Удалите родительский элемент A, и он также должен удалить своих B потомков;

Проблема заключается в следующем: как предотвратить рекурсию здесь?

Например, если B удаляется, после уничтожения он пытается уничтожить своего родителя A (или его B братьев и сестер), который, в свою очередь, также попытается уничтожить B, который уже БЫЛ уничтожен.

Unity имеет странную перегрузку == operator, которая позволяет проверить, уничтожен ли объект, но не позволяет узнать, уничтожен ли он.

Таким образом, я подумал о создании какой-то «расширенный» MonoBehaviour класс, который я бы использовал в качестве основы для всех своих объектов вместо MonoBehaviour.

. Этот вызов позволил бы мне получить дополнительные вещи, которые мне бы понравились иметь в стандарте MonoBehaviour, например:

  • при уничтожении события;

  • при уничтожении события;

  • Уничтожается. Это решило бы мою проблему рекурсии:

  • Уничтожено;

  • Другие функции, которые были бы достаточно универсальными, чтобы присутствовать в любом компоненте, например, описанные выше.

Проблема с этим решением заключается в странном способе, которым Unity вызывает свои "методы события" (Awake(), et c). Кажется, что Unity заботится только о методах событий, определенных в листовых классах. Таким образом, это решение потребовало бы от всех моих подклассов явного определения некоторых методов событий (Awake(), OnDestroy()) с единственной целью вызова тех же методов из базового класса (т. Е. "Extended" MonoBehaviour).

Это кажется грязным, потому что очевидно, что Unity не хочет, чтобы люди использовали их движок, а также потому, что есть большие шансы, что в некоторых компонентах, где мне не понадобятся эти методы событий, я забуду по-прежнему объявлять их чтобы позвонить из базового класса.

Что бы вы сделали? Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...