Как лучше работать с приватными переменными?

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

Как лучше работать с приватными переменными?

Сообщение greatPretender 16 фев 2017, 19:43

У меня такой вопрос возник.
------ Задача
Есть несложный метод, который реализован корутиной (например, обращение к юниту, отправление его navmeah-агента по координатам в путь).
------ Варианты решения
1. На юнитах делать один и тот же скрипт. В нём разместить корутину, и уже в ней создавать временные приватные переменные, (например Vector3, int, bool).
2. На юнитах делать один и тот же скрипт. Уже в НЁМ создать приватные переменные, и их использовать в этой корутине (те же Vector3, int, bool).
3. На ГО (а-ля GameManager) делать один скрипт. В нём разместить корутину, и уже в ней создавать временные приватные переменные, (те же Vector3, int, bool). И юниты будут обращаться уже к этой корутине, чтобы уйти на позицию.
3. На ГО (а-ля GameManager) делать один скрипт. Уже в НЁМ создать приватные переменные, и их использовать в этой корутине (те же Vector3, int, bool). И юниты будут обращаться уже к этой корутине, чтобы уйти на позицию.
------ Вопрос
а. Какой из вариантов правильно делать в плане правильно кода? Юнитов за бой ожидаются сотни, возможно тыща-две, но на сцене одновр-нно планируется 100-150 шт. И все половина постоянно находится в пути. )))
б. Нет ли каких либо потерь/утечек памяти на это?
в. Не будет ли конфликтов/сбоев/путаницы с переменными из-за обращения к одному и тому же скрипту и переменным (для вар-тов 3 и 4) от разных юнитов? Ну и конфликтов из-за асинхронности navmesh и корутины?
г. или это бред собачий и вообще не важно всё это? )))
------ Благодарю ))
greatPretender
Старожил
 
Сообщения: 526
Зарегистрирован: 23 сен 2015, 07:51

Re: Как лучше работать с приватными переменными?

Сообщение greatPretender 20 фев 2017, 07:38

Чё, мой вопрос на столько сложный тупой, что даже вариант Г не катит ?)))
greatPretender
Старожил
 
Сообщения: 526
Зарегистрирован: 23 сен 2015, 07:51

Re: Как лучше работать с приватными переменными?

Сообщение samana 20 фев 2017, 10:40

Если объектов сотни, то конечно сотни корутин это уж слишком. Лучше чтобы все движущиеся объекты обрабатывались в одном месте, например через массив в одной корутине.
По поводу приватных переменных не совсем понятно. Если они должны быть индивидуальны у каждого объекта, то конечно создавать их надо в каждом объекте.

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

Возможно я что-то и упустил.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Как лучше работать с приватными переменными?

Сообщение greatPretender 20 фев 2017, 11:36

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

А это интересный вариант. Спасибо, попробую на этапе оптимизации.
---
А на счёт корутин. У меня есть скрипт а-ля статик лежит на пустом ГО, по нажатию кнопки запускается в нём корутина одна и таже и условно говоря отправляет юнита (при каждом нажатии кнопки) в путь навмешом и контролирует чё?кого? у этого юнита. Т.е. у нескольких юнитов одновременно. Вот и думал , а что будет для большого кол-ва юнитов. Стоит ли ожидать глюков ...
greatPretender
Старожил
 
Сообщения: 526
Зарегистрирован: 23 сен 2015, 07:51

Re: Как лучше работать с приватными переменными?

Сообщение greatPretender 20 фев 2017, 12:26

А то, что в сцене постоянно запускается много неодновременно недолговременных корутин и закрывается ничего страшного?
Например раз в секнду 1-5 корутин создаётся , но не каждую секнду, а через 1-5 секунд.
И длятся корутины примерно 1-15 секунд. Это не какой-н накапливающийся мусор?
Просто использовать корутины это хорошо, а что на практике выходит, когда их определённое кол-во как узнать? Какая сложилась правильная практика их использования чтоб это не превращалось в дополнительный фактор нагрузки.
greatPretender
Старожил
 
Сообщения: 526
Зарегистрирован: 23 сен 2015, 07:51

Re: Как лучше работать с приватными переменными?

Сообщение samana 20 фев 2017, 13:03

Честно говоря я не знаю на счёт производительности большого кол-ва корутин, не приходилось сталкиваться. Конечно 10-20 корутин думаю особой погоды не сделают.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Как лучше работать с приватными переменными?

Сообщение llka 20 фев 2017, 14:06

Представьте корутину как простую функцию до момента yield, тоесть вы вызываете 1-15 функций за один апдейт. Все зависит от нагрузки в этих функциях.
llka
UNIверсал
 
Сообщения: 359
Зарегистрирован: 08 янв 2014, 05:00

Re: Как лучше работать с приватными переменными?

Сообщение greatPretender 20 фев 2017, 14:11

40% корутин идут 10-15 сек и это будет ведение нав-мэшом юнита до точки назначения, по маршуртам. (видимо там только изм-е расст-е грузит систему , надеюсь)
50% это поиск цели по 1-2 сек - работа с массивами списками.
10% всякие мелочи 1-2 сек - рандом ,массивы, списки, и т.п.
Нее, конечно не за 1 апдейт, я из аккуратно распределяю на 3-20 кадров.))
Ну в целом я вас понял, буду думать)
greatPretender
Старожил
 
Сообщения: 526
Зарегистрирован: 23 сен 2015, 07:51

Re: Как лучше работать с приватными переменными?

Сообщение Paul Siberdt 20 фев 2017, 18:11

По мне так если вы делаете что-то нересурсоемкое и не используете это в тиках, выбор методики по производительности проигрывает выбору по удобству/гибкости/будущей читабельности в состоянии забыл-что-это-за-хрень.
Есть лишь смысл следить, не засирается ли чем-нить, неподвластным сборщику мусора, память.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Как лучше работать с приватными переменными?

Сообщение greatPretender 20 фев 2017, 18:51

Paul Siberdt писал(а):... если вы делаете что-то нересурсоемкое ...

нууу.. ртс стратегия для мобилок, мне кажется это ресурсоёмкое, правда по графике планируется очень-очень скудное , НО - стильное. )) Т.е. я не собираюсь утопить игру в цвете, текстурах, частицах и визуальных эффектах. Напротив, дела упор на ИИ и тактическое многообразие и увлекательность процесса игры.

Paul Siberdt писал(а):... не используете это в тиках,

а что это?
Paul Siberdt писал(а):выбор методики по производительности проигрывает выбору по удобству/гибкости/будущей читабельности в состоянии забыл-что-это-за-хрень.

Пока гибкость и читабельность особо не страдает, эт кэшно на мой взгляд, кода больше 5 килострок совокупно, но в голове полный порядок. Тем более в код не будет лазить никто кроме меня ))
А какой с вашей точки зрения вариант по корутинам стоит внедрить?

Paul Siberdt писал(а):Есть лишь смысл следить, не засирается ли чем-нить, неподвластным сборщику мусора, память.

Вот для меня и вопрос, а чем может засираться память? Про не отписанные делегаты слышал, по отсутствие пула объектов тоже, про большое кол-во ненужных переменных ... может ещё варианты какие-н есть, я не знаю, не подскажите ?)
greatPretender
Старожил
 
Сообщения: 526
Зарегистрирован: 23 сен 2015, 07:51

Re: Как лучше работать с приватными переменными?

Сообщение Paul Siberdt 20 фев 2017, 19:07

а что это?

Апдейты.

Вот для меня и вопрос, а чем может засираться память?

Я лично прогядел утечку, когда работал с мешами, не помню, что уже было, переписано уже несколько раз, может быть при каждом запросе "нарисовать молнию" тупо делал new Mesh, чем и заработал +50 метров в минуту. Мусорщик (старый, от третьей Юньки) не видел никаких проблем.

А какой с вашей точки зрения вариант по корутинам стоит внедрить?

Я, в любом случае, отдаю предпочтение менеджерам, а сами корутинки уже как-то не юзаю. Или пользую апдейт на менеджере с пробежкой по динамическому списку активных объектов или делаю даже подписку на тики.

Да, делегаты - это не шаг в сторону производительности, но вот к такому я пока решению пришел. :)
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Как лучше работать с приватными переменными?

Сообщение greatPretender 20 фев 2017, 19:21

Ясно. Спасибо. Буду иметь в виду.
greatPretender
Старожил
 
Сообщения: 526
Зарегистрирован: 23 сен 2015, 07:51

Re: Как лучше работать с приватными переменными?

Сообщение Paul Siberdt 20 фев 2017, 19:28

greatPretender писал(а):Ясно. Спасибо. Буду иметь в виду.

Пожалуйста, только я не настоящий сварщик программист, могу плохого насоветовать. :)
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Как лучше работать с приватными переменными?

Сообщение greatPretender 20 фев 2017, 19:44

Ок. Я тоже. Поэтому практика покажет )
greatPretender
Старожил
 
Сообщения: 526
Зарегистрирован: 23 сен 2015, 07:51


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

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

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