Мой комментарий выше был о том, чтобы в первую очередь не создавать лишние сущности — принцип, выполнение которого в данном конкретном случае можно обеспечить с помощью исключений. Вы же не будете индексировать массив с аргументом -1, правильно? Потому что среда выполнения выбросит исключение, а не молчаливо с лицом okay.jpg перетерпит. Вот тут то же самое. И это не что-то неконтролируемое, как, например, кривой JSON, пришедший от сервера, тут всё в Ваших руках. И Вам же будет лучше, не мне.
И да, DontDestroyOnLoad() не имеет отношение к сборщику мусора, если, конечно, Вы его имели в виду.
Убивать невесть откуда взявшиеся дополнительные инстансы в рантайме, по-моему, весьма сомнительная идея — логичнее кинуть исключение и заставить автора фиксить логику, порождающую эти самые лишние инстансы, не?
Не верю, что ничего подобного по синглтонам на Хабре не было. Даже если не здесь, то по интернетам подобной инфы размазано в изобилии. Любимая цацка начинающих юнитистов же!
FYI, на будущее, большая часть вот этой вот простынки:
//Find T
T[] managers = GameObject.FindObjectsOfType<T>();
if (managers != null)
{
if (managers.Length == 1)
{
instance = managers[0];
DontDestroyOnLoad(instance);
return instance;
}
else
{
if (managers.Length > 1)
{
Debug.LogError($"Have more that one {typeof(T).Name} in scene. " + "But this is Singleton! Check project.");
for (int i = 0; i < managers.Length; ++i)
{
T manager = managers[i];
Destroy(manager.gameObject);
}
}
}
}
Хорошей литературы (вот чтоб прямо книги) по Unity я не видел. Искал где-то года два назад, может сейчас что-нибудь да поменялось. Что-то толковое может быть по отдельным кускам, типа Shader Graph, но я не слежу.
С другой стороны, если интересен их перспективный стек DOTS, есть отличное чтиво R.Fabian «Data-Oriented Design», но он не про конкретно технологию, а про сам подход. Даже официальная бесплатная онлайн-версия есть.
Полностью избавиться от синглтонов в Unity действительно весьма сложно и даже не всегда оправданно. Но если инъекция зависимостей поможет распутать код, то почему бы и да.
Как бы это помягче сказать, чтобы не показаться грубым… Это велосипед, причём плохой.
По факту это Service Locator, который уже давно считается антипаттерном, к тому же очень скудно реализованный (например, что мешает в качестве ключа использовать тип?). Плюс синглтоны, что тоже весьма печально.
Курите StrangeIoc/Zenject, как гораздо более вменяемую альтернативу.
А как же «Итоги 2020 года» от сайта Прекрасное.it? Широко ведь известный ресурс, в узких кругах.
И да, DontDestroyOnLoad() не имеет отношение к сборщику мусора, если, конечно, Вы его имели в виду.
FYI, на будущее, большая часть вот этой вот простынки:
Успешно заменяется на:
С другой стороны, если интересен их перспективный стек DOTS, есть отличное чтиво R.Fabian «Data-Oriented Design», но он не про конкретно технологию, а про сам подход. Даже официальная бесплатная онлайн-версия есть.
По факту это Service Locator, который уже давно считается антипаттерном, к тому же очень скудно реализованный (например, что мешает в качестве ключа использовать тип?). Плюс синглтоны, что тоже весьма печально.
Курите StrangeIoc/Zenject, как гораздо более вменяемую альтернативу.