Менее затратное перемещение

Раздел, посвящённый самому важному - скорости.

Re: Менее затратное перемещение

Сообщение Cr0c 13 фев 2016, 12:29

kodekq писал(а):
Cr0c писал(а):А если до инстанцирования в префабе что-то поменять - это где будут данные меняться?

Ну я так понимаю в том экземпляре что загружен в память?

Какой экземпляр до инстанцирования? А при изменении префаба все его экземпляры тоже ведь изменяются ведь. А значит префаб должен загружаться вместе со сценой. Не может же он загружаться при первом чтении/записи его значений.
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: Менее затратное перемещение

Сообщение kodekq 13 фев 2016, 13:28

Cr0c писал(а):
kodekq писал(а):
Cr0c писал(а):А если до инстанцирования в префабе что-то поменять - это где будут данные меняться?

Ну я так понимаю в том экземпляре что загружен в память?

Какой экземпляр до инстанцирования? А при изменении префаба все его экземпляры тоже ведь изменяются ведь. А значит префаб должен загружаться вместе со сценой. Не может же он загружаться при первом чтении/записи его значений.

Давайте разберёмся по пунктам
1) В скрипте: public Gameobject obj; в инспекторе назначаем префаб нужного объекта.
Что происходит при старте сцены? Префаб загрузится в память? Очень важно что происходит с ресурсами префаба (спрайты, звуки)?
2) Instantiate префаба.
Что изменится?
3) Destroy объекта из нашего префаба.
Ну тут я понял, что ссылка помечается как null, сам объект в памяти (в куче так понимаю) пока его не почистит GC. В офф гайде вообще пишут что для игр с долгой сессией лучше всего как можно чаще вызывать System.GC.Collect();
Будьте добры ответить по пунктам, как оно есть, без наводящих вопросов, а то я пока только больше запутался
kodekq
UNIт
 
Сообщения: 54
Зарегистрирован: 04 сен 2014, 07:02

Re: Менее затратное перемещение

Сообщение Cr0c 13 фев 2016, 13:48

Всё, что назначено в инспекторе - будет в памяти после загрузки этой сцены.
Инстанцирование создаёт клон объекта (GameObject или компонент) на сцене.
Префаб - это контейнер, но на сцене он не существует. Все его клоны связаны с ним. Изменение префаба изменит всех его клонов, но не наоборот.
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: Менее затратное перемещение

Сообщение kodekq 13 фев 2016, 14:44

Тогда как можно оптимизировать процесс расхода памяти, если имеется большое количество объектов, которые в определённый промежуток времени сменяют друг друга, то есть 2/3 всех объектов чаще всего не используются?
kodekq
UNIт
 
Сообщения: 54
Зарегистрирован: 04 сен 2014, 07:02

Re: Менее затратное перемещение

Сообщение DbIMok 13 фев 2016, 14:54

"объекты" память обычно не жрут. это делают текстуры и звуки. когда хотят оптимизировать, смотрят в профайлер что именно жрет и исходя из конкретной ситуации как-то решают проблему
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Менее затратное перемещение

Сообщение kodekq 14 фев 2016, 05:37

Ну я же писал уже об этом, что да объекты/префабы весят пару кб, а вот ресурсы спрайты/звуки весят много. Когда подошло дело к оптимизации памяти, профайлер показывал около 500мб, пожав спрайты до приемлемого качества удалось немного выиграть, но почитав гайды, пришёл к выводу, что только для постоянно используемых буду использовать пул, всё остальное надо как то выгружать, вот я и не могу понять как выгрузить то, да я вижу в профайлере, что при старте сцены, все мои ресурсы уже в памяти, хотя объектов в сцене нет, то есть если есть ссылка на префаб он грузится в память сразу со всеми ресурсами. Тогда не понятно вообще, почему в офф гайде использование Instantiate/Destroy приводится как один из инструментов оптимизации расхода памяти.
Кстати даже провёл эксперимент по поводу Destroy и последующего вызова GC.Collect(), в профайлере вижу что сборщик отработал, но память занятая текстурами не уменьшилась, хотя объектов использующих такие же ресурсы в сцене больше нет.
kodekq
UNIт
 
Сообщения: 54
Зарегистрирован: 04 сен 2014, 07:02

Re: Менее затратное перемещение

Сообщение DbIMok 14 фев 2016, 06:05

Есть несколько сценариев использования (загрузки) ресурсов в рантайме http://docs.unity3d.com/ru/current/Manu ... ntime.html
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Менее затратное перемещение

Сообщение kodekq 14 фев 2016, 13:55

DbIMok писал(а):Есть несколько сценариев использования (загрузки) ресурсов в рантайме http://docs.unity3d.com/ru/current/Manu ... ntime.html

О спасибо, я как раз не мог найти этот раздел
kodekq
UNIт
 
Сообщения: 54
Зарегистрирован: 04 сен 2014, 07:02

Пред.

Вернуться в Оптимизация

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

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