Size: a a a

2020 June 13

S

SP1K3 in unity3d.ru
всем привет. я слышал, что getcomponent аллоцирует память, что вызывает в последующем лишний вызов gc collect, это правда?
источник

AD

Aidan Arcueid D'athe... in unity3d.ru
SP1K3
всем привет. я слышал, что getcomponent аллоцирует память, что вызывает в последующем лишний вызов gc collect, это правда?
да, правда. Сами юнитеки говорят, что не стоит это использовать
источник

S

SP1K3 in unity3d.ru
интересно. я видел так же в документации, что есть метод TryGetCompnent, не очень понял их различие и ничего не сказано про аллоцирование памяти
источник

S

SP1K3 in unity3d.ru
там сказано, что мол если компонента не существует то он не аллоцирует память в эдиторе
источник

S

SP1K3 in unity3d.ru
интересно, а нафига это надо собственно, если в билде по этой логике он аллоцирует, то какая разница, да и к тому же, лишний мусор в памяти эдитора погоды не создает
источник

S

SP1K3 in unity3d.ru
бляха муха. то есть нужно городить свой велосипед какой нибудь GetComponentNoAlloc, где будет использоваться лист из пула, который будет получать все компоненты из GetComponents (он же память не аллоцирует) и возвращать первый,  как то так.
источник

IL

Ilya Lataria in unity3d.ru
Aidan Arcueid D'athemon
да, правда. Сами юнитеки говорят, что не стоит это использовать
Можно пруф?
источник

🐸

🐸Гринирский🐸... in unity3d.ru
Реально баллистическая, а не упрощенная математическая? А я-то думал, что это разные вещи ))
источник

IL

Ilya Lataria in unity3d.ru
Я о юнитеках
источник

🐸

🐸Гринирский🐸... in unity3d.ru
Ну и "всего один способ" - это сильно ))
источник

VD

Vaadimir Danil4ev in unity3d.ru
Ребят кто поможет? У меня есть два префаба (золотой и красный) мне надо сделать что бы по нажатию на золотой выполнялось определенное действие с переменной из другого скрипта. Проблема в том что я не могу добавить объект с скриптом там где нужная переменная, сюда (красным выделил) это инспектор префаба. Почему я не могу сюда добавить?
источник

AD

Aidan Arcueid D'athe... in unity3d.ru
SP1K3
бляха муха. то есть нужно городить свой велосипед какой нибудь GetComponentNoAlloc, где будет использоваться лист из пула, который будет получать все компоненты из GetComponents (он же память не аллоцирует) и возвращать первый,  как то так.
Зачем? ты просто вешаешь скрипт с полем и туда записываешь нужные данные, а потом получаешь их без аллокации которую нужно очищать
источник

VD

Vaadimir Danil4ev in unity3d.ru
источник

IL

Ilya Lataria in unity3d.ru
Aidan Arcueid D'athemon
Зачем? ты просто вешаешь скрипт с полем и туда записываешь нужные данные, а потом получаешь их без аллокации которую нужно очищать
не вижу в документации касательно GetComponent никакого совета о т ом что юзать это не надо
источник

AD

Aidan Arcueid D'athe... in unity3d.ru
Ilya Lataria
Можно пруф?
https://answers.unity.com/questions/802140/getcomponent-makes-05k-gc.html там ссылка на блог юнитеков
источник

IL

Ilya Lataria in unity3d.ru
супер, спасибо
источник

AD

Aidan Arcueid D'athe... in unity3d.ru
Ilya Lataria
не вижу в документации касательно GetComponent никакого совета о т ом что юзать это не надо
я скинула, это было в блоге, хз почему в доках не написать
источник

c

cadfoot in unity3d.ru
Аллокация от использования GetComponent только в едиторе
источник

S

SP1K3 in unity3d.ru
Aidan Arcueid D'athemon
Зачем? ты просто вешаешь скрипт с полем и туда записываешь нужные данные, а потом получаешь их без аллокации которую нужно очищать
Да, так можно сделать. Но если есть ситуация, когда есть ссылка на GameObject и ты гарантированно знаешь, что там лежит нужный компонент. Его же нужно как то получать
источник

AD

Aidan Arcueid D'athe... in unity3d.ru
SP1K3
Да, так можно сделать. Но если есть ситуация, когда есть ссылка на GameObject и ты гарантированно знаешь, что там лежит нужный компонент. Его же нужно как то получать
во первых у меня как раз в одном проекте такая генерация, и есть все проверки на пустоту и подходящую запись
источник