Метод Start, Awake для неактивного объекта

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

Метод Start, Awake для неактивного объекта

Сообщение Alkos26Rus 27 дек 2022, 16:26

Я так понимаю в MonoBehaviour отсутствуют аналоги методов Start, Awake которые бы вызывались на отключенном объекте(скрипт включен)? Есть какие нибудь вменяемые костыли, без того что типо создай другой активный объект и из него вызывай? Конструкторы не катят.
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1640
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Метод Start, Awake для неактивного объекта

Сообщение waruiyume 27 дек 2022, 16:54

FindObjectsOfType
Я так понимаю, что это для объектов которые грузятся вместе со сценой?
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Метод Start, Awake для неактивного объекта

Сообщение Alkos26Rus 27 дек 2022, 17:24

waruiyume писал(а):FindObjectsOfType
Я так понимаю, что это для объектов которые грузятся вместе со сценой?

Я так понял ты предлагаешь использовать FindObjectsOfType именно из какого то другого скрипта и вызывать нужные методы у отключенных объектов? Ну такое, костыль какой то, да и есть сомнения в скорости данного метода. Тем более это не удобно когда мне нужно создать неактивный\активный объект во время выполнения. Думал есть что то более правильное.
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1640
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Метод Start, Awake для неактивного объекта

Сообщение waruiyume 27 дек 2022, 18:00

Для чего конкретно это нежно?
Я не могу представить себе ситуацию когда нужно инициализировать неактивные объекты, кроме случая когда нужно получить на них ссылки. После загрузки сцены FindObjectsOfType должен для этого подойти, насчёт скорости хз, а создаваемый во время выполнения, итак будет создаваться из активного скрипта и из негоже инициализироваться.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Метод Start, Awake для неактивного объекта

Сообщение Alkos26Rus 27 дек 2022, 18:46

waruiyume писал(а):Для чего конкретно это нежно?
Я не могу представить себе ситуацию когда нужно инициализировать неактивные объекты, кроме случая когда нужно получить на них ссылки. После загрузки сцены FindObjectsOfType должен для этого подойти, насчёт скорости хз, а создаваемый во время выполнения, итак будет создаваться из активного скрипта и из негоже инициализироваться.

Да, нужна инициализация объектов. Банально даже instance не инициализируется у неактивного объекта, не говоря уже про разные поля. Вызывая внутренние методы такого неактивного объекта естественно будет выдавать ошибки. Притом нужно что бы инициализация работала как у активного так и у неактивного объекта, как при наличии на сцене так и при создании в реалтайме. Универсального метода для этого я не знаю, как всегда чтоли придется лепить костыли. Awake например работает в отключенном скрипте, почему не работает при отключенном объекте в иерархии, непонятно. Просто банально неактивный объект сам себя может добавить в массив, как вариант.

PS: Знаю что можно прописать инициализацию в Get поля instance, но хотелось бы при старте, так как есть прямые ссылки на объект и в этом случае нет запроса на instance
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1640
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Метод Start, Awake для неактивного объекта

Сообщение Alkos26Rus 27 дек 2022, 19:33

Alkos26Rus писал(а):Знаю что можно прописать инициализацию в Get поля instance, но хотелось бы при старте, так как есть прямые ссылки на объект и в этом случае нет запроса на instance

Хотя нет, в статичном поле я получается не могу прописать таким образом
Синтаксис:
Используется csharp
[HideInInspector]public static sc_body_screen instance{
get {
if(!_instance)_instance = this;
return _instance;
}
set {_instance = value;}
}
 


Получается только в Start или в Awake, что опять же не работает в отключенном объекте
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1640
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Метод Start, Awake для неактивного объекта

Сообщение KBEP 27 дек 2022, 23:17

Только грязным костылём извне, создать какой-нибудь Init или Setup метод, и его вызывать:
Синтаксис:
Используется csharp
bool isSetUp;//флаг чтобы нельзя было несколько раз настройку сделать

public void Setup ()
{
        if (isSetUp) return;

        //детаем грязь тут

        isSetUp = true;
}
Аватара пользователя
KBEP
Старожил
 
Сообщения: 598
Зарегистрирован: 24 сен 2012, 23:23
Откуда: Калининград, СПб, Северодвинск

Re: Метод Start, Awake для неактивного объекта

Сообщение Alkos26Rus 28 дек 2022, 00:06

KBEP писал(а):Только грязным костылём извне, создать какой-нибудь Init или Setup метод, и его вызывать:
Синтаксис:
Используется csharp
bool isSetUp;//флаг чтобы нельзя было несколько раз настройку сделать

public void Setup ()
{
        if (isSetUp) return;

        //детаем грязь тут

        isSetUp = true;
}

Да не, в том то и дело что нужно чтобы неактивный объект делал это сам, автономно. Без всяких дополнительных объектов которые вызывают метод по ссылке или перебирают все объекты на сцене.
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1640
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Метод Start, Awake для неактивного объекта

Сообщение 1max1 28 дек 2022, 01:39

Как бы суть неактивных объектов в том что они не вызывают свои методы. Ты можешь их скрыть отключив рендеры, но при этом оставить сам объект активным, а уже потом выключить после того как пройдет инициализация. Или использовать конструктор иначе никак.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Метод Start, Awake для неактивного объекта

Сообщение kapibara47 06 апр 2023, 18:02

Просто вместо деактивирования объекта декативируй все его элементы. Тогда он как-бы будет не неактивен, но никак не будет реагировать на мир, даж не будет виден, и тогда сможешь с ним по человечески работать.
kapibara47
UNец
 
Сообщения: 7
Зарегистрирован: 02 апр 2023, 11:32


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6