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

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

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

Сообщение kodekq 03 фев 2016, 12:27

В 2D игре требуется равномерно и постоянно перемещать большое количество объектов(спрайты), которые никак с друг другом не взаимодействуют, а просто являются фоновыми иллюстрациями, подскажите, пожалуйста, каким способом в таком случае их менее затратно перемещать с точки зрения производительности?
1) напрямую присваивать координаты в transform.position
2) присваивать координаты в rigidbody.position
3) использовать значение скорости для rigidbody.velocity
kodekq
UNIт
 
Сообщения: 54
Зарегистрирован: 04 сен 2014, 07:02

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

Сообщение Cr0c 03 фев 2016, 14:10

kodekq писал(а):В 2D игре требуется равномерно и постоянно перемещать большое количество объектов(спрайты), которые никак с друг другом не взаимодействуют, а просто являются фоновыми иллюстрациями, подскажите, пожалуйста, каким способом в таком случае их менее затратно перемещать с точки зрения производительности?
1) напрямую присваивать координаты в transform.position
2) присваивать координаты в rigidbody.position
3) использовать значение скорости для rigidbody.velocity

Если не взаимодействуют - то без ригидбоди и коллайдеров - значит только transform.position
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

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

Сообщение samana 03 фев 2016, 14:17

1-2 Если эти объекты должны передвигаться физикой, тогда использовать rigidBody.MovePosition (http://docs.unity3d.com/ru/current/Scri ... ition.html). Если физика не нужна, тогда зачем вообще делать объекты физическими? Тогда можно передвигать через transform.
Не забывайте кешировать rigidBody (если у вас Unity 4-ых версий или ниже). Ещё лучше занести все объекты в массив и в цикле пробегаясь по этому массиву - влиять на положение всех объектов, чем цеплять на каждый объект скрипт.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

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

Сообщение kodekq 03 фев 2016, 19:05

Спасибо за ответы. Хочу немного пояснить почему я вообще задался таким вопросом. Почему-то иногда движение некоторых объектов какое-то дёрганное, но я не думую что это лаг, фпс стабилен, в профайлере всё гладко, воюю с этим уже 3 день. Пробовал двигать этими тремя способами + щас пробовал через MovePosition, всё одно, пробовал и в Update и в FixedUpdate перебирать массив элементов и двигать их, и на Time.deltaTime домножал, ничего не помогает...
kodekq
UNIт
 
Сообщения: 54
Зарегистрирован: 04 сен 2014, 07:02

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

Сообщение DbIMok 03 фев 2016, 20:16

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

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

Сообщение kodekq 06 фев 2016, 17:18

DbIMok писал(а):обновитесь до последней версии, если еще не сделали этого. если это не помогло, делайте небольшой воспроизводящий примерчик, записывайте видео, как это у вас выглядит и отправляйте багрепорт. через пару лет может быть пофиксят. тема старая, я тут какое-то время назад выкладывал веб билд простейший с вариантами движения спрайта. у кого-то лагало, у кого-то нет.

Спасибо, версия последняя, буду писать багрепорт.
kodekq
UNIт
 
Сообщения: 54
Зарегистрирован: 04 сен 2014, 07:02

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

Сообщение kodekq 08 фев 2016, 15:20

Подскажите, пожалуйста, ещё по одному вопросу, требуется большому количеству одинаковых объектов (200-300, просто спрайты, без коллайдеров, 1 спрайт на всех, то есть без проблем батчатся) задать равномерное движение по окружности большого радиуса, у меня есть 3 варианта как это сделать, какой из них более производительный? Если кто-то предложит свой вариант буду только рад.
1) Каждый отдельный объект двигать через transform.position рассчитывая траекторию движения из того же скрипта
2) Имеется объект, у него есть 200-300 дочерних объектов, расположенные на большом расстоянии от центра родительского объекта, то есть получается, что вращая родительский объект, дочерние объекты относительно всей сцены меняют своё местоположение как раз таки по окружности большого радиуса
3) Нарисовать большой спрайт на котором уместить все эти объекты и так же как во втором способе задать ему движение с помощью вращения родителя
kodekq
UNIт
 
Сообщения: 54
Зарегистрирован: 04 сен 2014, 07:02

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

Сообщение emel-maks-va 08 фев 2016, 15:24

kodekq писал(а):Подскажите, пожалуйста, ещё по одному вопросу, требуется большому количеству одинаковых объектов (200-300, просто спрайты, без коллайдеров, 1 спрайт на всех, то есть без проблем батчатся) задать равномерное движение по окружности большого радиуса, у меня есть 3 варианта как это сделать, какой из них более производительный? Если кто-то предложит свой вариант буду только рад.
1) Каждый отдельный объект двигать через transform.position рассчитывая траекторию движения из того же скрипта
2) Имеется объект, у него есть 200-300 дочерних объектов, расположенные на большом расстоянии от центра родительского объекта, то есть получается, что вращая родительский объект, дочерние объекты относительно всей сцены меняют своё местоположение как раз таки по окружности большого радиуса
3) Нарисовать большой спрайт на котором уместить все эти объекты и так же как во втором способе задать ему движение с помощью вращения родителя


3 вариант будет менее затратным по производительности. А вообще все зависит от ситуации. Поэтому лучше провести свои тесты.
emel-maks-va
UNITрон
 
Сообщения: 182
Зарегистрирован: 24 июн 2014, 10:39

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

Сообщение kodekq 11 фев 2016, 07:34

emel-maks-va Спасибо
kodekq
UNIт
 
Сообщения: 54
Зарегистрирован: 04 сен 2014, 07:02

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

Сообщение kodekq 12 фев 2016, 10:55

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

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

Сообщение emel-maks-va 12 фев 2016, 19:33

kodekq писал(а):А подскажите, пожалуйста, ещё по одному вопросу, правильно ли я понимаю, что только когда мы добавляем объект на сцену, к примеру через Instantiate префаба, тогда он загружается в оперативную память? То есть пока префаб лежит просто в папке и на него есть ссылка в какой-нибудь переменной GameObject, он не загружен в память, а создав его в сцене он загружается в память и занимает её до тех пор, пока для него не вызовем Destroy?

1) Да.
2) На счет дестоя, как я знаю, не все так просто. Есть специальные функции, которыми можно выгрузить ресурс (так же это происходит автоматически)
emel-maks-va
UNITрон
 
Сообщения: 182
Зарегистрирован: 24 июн 2014, 10:39

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

Сообщение Cr0c 12 фев 2016, 19:53

kodekq писал(а):То есть пока префаб лежит просто в папке и на него есть ссылка в какой-нибудь переменной GameObject, он не загружен в память, а создав его в сцене он загружается в память и занимает её до тех пор, пока для него не вызовем Destroy?

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

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

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

Cr0c писал(а):
kodekq писал(а):То есть пока префаб лежит просто в папке и на него есть ссылка в какой-нибудь переменной GameObject, он не загружен в память, а создав его в сцене он загружается в память и занимает её до тех пор, пока для него не вызовем Destroy?

Префаб лежит в памяти, иначе бы откуда в ссылке будет адрес?
После вызова Destroy объект будет в памяти до срабатывания GC, но помеченным на удаление, а все ссылки на него станут null. Насколько я помню...

То есть поулчается, если я создам public GameObject obj и в инспекторе назначу префаб объекта, то при старте сцены даже без Instantiate префаб грузиться в память? А что по поводу ресурсов данного префаба? Сам префаб то весит пару кб, не страшно что он будет в памяти, а вот ресурсы некоторых префабов весят по 10-20мб, что значительно, я могу предположить, что как раз таки ресурсы загружаются в память после Instantiate префаба?
kodekq
UNIт
 
Сообщения: 54
Зарегистрирован: 04 сен 2014, 07:02

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

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

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

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

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

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

Ну я так понимаю в том экземпляре что загружен в память?
kodekq
UNIт
 
Сообщения: 54
Зарегистрирован: 04 сен 2014, 07:02

След.

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

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

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