Войти
ПрограммированиеФорумОбщее

[Unity] Как лучше получить доступ из одного класса в другой?

Страницы: 1 2 Следующая »
#0
(Правка: 23 мая 2019, 10:11) 21:16, 22 мая 2019

Есть класс PlayersManager (НЕ MonoBehaviour), есть класс Level1(MonoBehaviour) в котором он инициализируется. Есть множество объектов на сцене, на которые навешаны различные скрипты MonoBehaviour и из которых вызывается функция GetPlayerInfo() класса PlayersManager.

1 - Сейчас я сделал PlayersManager синглтоном, но при перезапуске сцены, переменные не очищаются, т.е. нужно самому поддерживать их очищение.

2 - Есть еще идея сделать без синглтона. В классе Level1 пробежать по всем объектам и кинуть им ссылку на PlayersManager - на сколько это хорошая идея? - а еще есть и обычные классы, которым тоже нужно обращаться к PlayersManager.

3 - Еще можно через сообщения, типа PlayersManagerObserver.

Может есть еще способы? Как лучше построить взаимодействие?


#1
22:05, 22 мая 2019

Берете Zenject. В нем есть Signals. Т.е. элементарно реализовать сообщения. Можно заинджектить куда надо и напрямую вызывать нужный метод.

#2
22:25, 22 мая 2019

какие переменные не очищаются то?

#3
10:15, 23 мая 2019

seaman
> Берете Zenject. В нем есть Signals. Т.е. элементарно реализовать сообщения.
> Можно заинджектить куда надо и напрямую вызывать нужный метод.
Я правильно понял - это 2 и 3 способы, о которых я писал?

cNoNim
> какие переменные не очищаются то?
Так вроде все или я чего-то не догоняю?

#4
17:25, 23 мая 2019

Действительно не очень понятно какие переменные не очищаются. Вы оператор new применили?

#5
17:33, 23 мая 2019

А publish, observer плохое решение?

#6
18:16, 23 мая 2019

И использовать композицию, к примеру в конструкторе дать ссылку на класс, и использовать интерфейс, к доступу нужному  методу

#7
19:25, 23 мая 2019
Сейчас я сделал PlayersManager синглтоном, ......Берете Zenject. В нем есть Signals.  ....publish, observer

а вас вообще не смущает что все эти свистелки-сопелки тормозят?

#8
21:19, 23 мая 2019
все эти свистелки-сопелки тормозят

Пруфы, плиз.
Видел кучу проектов с Zenject - ничего не тормозило. В том числе стрелялки...
Я правильно понял - это 2 и 3 способы, о которых я писал?

Третий - да, это сигналы. Второй не то что инджект.
#9
21:46, 23 мая 2019

newman55
> Действительно не очень понятно какие переменные не очищаются. Вы оператор new
> применили?
Вот часть кода:

+ Показать

может это поможет понять. При перезапуске сцены (выйти в главное меню игры (не редактора) и нажать продолжить) переменная players задваивается, затраивается и т.д. ну, смотря сколько раз буду перезаходить.
Так, создал переменную iii заинкрементил ее, перезапустил уровень, тоже задвоилось, нет - я не пойму ваш вопрос.

Quony
> А publish, observer плохое решение?
События плохо отлаживать, особенно, когда через какое-то время забываешь свою же архитектуру или тем более, если нужно кому-то разобраться в твоей.

Quony
> И использовать композицию, к примеру в конструкторе дать ссылку на класс, и
> использовать интерфейс, к доступу нужному  методу
Там часть классов MonoBehaviour, ну я понял - внедрение зависимости через метод, второй способ, который я предложил.

Polyflow3d
> а вас вообще не смущает что все эти свистелки-сопелки тормозят?
Пока что меня смущает, что это выглядит, как велосипеды, которые нелогичны и сложно отлаживаемы.

#10
(Правка: 21:53) 21:53, 23 мая 2019

smartxp
с какого перепуга у тебя там что то задваивается затраивается блин?

с инкрементом понятно, для этого и заводят синглтон

#11
21:55, 23 мая 2019

или ты не можешь написать метод clear в котором почистить players когда нужно?

#12
22:28, 23 мая 2019

cNoNim
> или ты не можешь написать метод clear в котором почистить players когда нужно?
т.е. вариант номер 1, который я предложил.

Я смотрю кроме тех вариантов, что я предложил, других нет - печально, придется на каком-то из них остановится.

#13
22:30, 23 мая 2019

А еще такой вопрос, можно ли экземпляр синглтона удалить, хоть как-нибудь?

#14
23:19, 23 мая 2019

smartxp
instance = null?

Страницы: 1 2 Следующая »
ПрограммированиеФорумОбщее