как фоново обрабатывать физику

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

как фоново обрабатывать физику

Сообщение Zimaell 29 июл 2023, 19:33

Задача у меня стоит следующая - поиск пути по неизвестной 3D местности, сам код я уже сделал и проверил, всё работает, коротко принцип такой
Синтаксис:
Используется csharp
public List<Vector3> GetRoute(Vector3 start, Vector3 target){
List<Vector3> Route = new List<Vector3>();
....
while(true){
    // логика поиска следующего шага
    // проверка с помощью Physics.CheckBox и Physics.BoxCast возможности ступить на следующую клетку
    // если да то записываем шаг и пробуем дальше пройти, или записываем что нельзя и подбираем другое направление
    }
// логика вычисления "кратчайшего пути" с помощью AStar
return Route;
}

проблема в том что он может обрабатываться как 0.01 сек так и 0.3 сек, последнее конечно далеко не влазит в кадр и вызовет фриз.

Вопрос - как сие чудо распараллелить, запустить фоново, в несколько потоков, в общем как выполнить эту задачу не заморозив основной поток?

Как я понял использовать Job не получится так как Physics работают только в основном потоке (как я понял), корутины тоже нет смысла использовать, всё равно обработки физики только в основном потоке и с таким же успехом можно прерывать цикл на какой-то итерации и продолжать в следующем кадре, переход на ECS конечно не обсуждается так как это всё вообще нужно переделывать полностью...

в общем - какие есть варианты, в какую сторону копать, что лучше использовать, как этим бороться?
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: как фоново обрабатывать физику

Сообщение 1max1 29 июл 2023, 19:38

корутины тоже нет смысла использовать

Сказал, конечно, как х** отрезал, но если в коде есть циклы, то как раз корутины и могут размазать нагрузку по нескольким кадрам.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: как фоново обрабатывать физику

Сообщение Zimaell 29 июл 2023, 19:47

1max1 писал(а):
корутины тоже нет смысла использовать

Сказал, конечно, как х** отрезал, но если в коде есть циклы, то как раз корутины и могут размазать нагрузку по нескольким кадрам.

да я с корутинами не сильно еще в ладах, вот с чатом трещал и он типа несколько раз повторил что корутину нужно вовремя остановить с помощью yield return null;, то есть самому вычислить сколько нужно шагов пройти в итерации на кадр чтобы прервать доследующего кадра, а я хз сколько, у меня точки могут кешироваться а могут искаться, из-за этого очень может большая разница быть...
я не совсем пойму - или я неправильно понимаю принцип корутины, либо чат мне неправильно рассказывает...

P.s. - кстати чат меня уже пару раз затролил конкретно, вот тебе код вот еще а потом "ой я это придумал и такого не существует", вот я и уже не совсем пойму 8-}
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: как фоново обрабатывать физику

Сообщение 1max1 29 июл 2023, 19:54

Полный код покажи.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: как фоново обрабатывать физику

Сообщение Zimaell 29 июл 2023, 20:06

1max1 писал(а):Полный код покажи.

да ну там около 500 строк всего....
основная нагрузка идет именно во время поиска пути особенно когда по местности еще не проходил, визуально это выглядит как крыса в лабиринте ищет выход, двинулся к цели, если нет препятствия то двинулся дальше, уперся, разделился на 2 потока (налево, направо) используется тот что ближе к цели, сами возможности прощупываются путем Physics.BoxCast если конечно уже не проверялись, а если уже прощупывались то достаются из хеша готовые результаты, ну когда уже этот метод прощупывания достиг цели то двигается в обратном направлении, в итоге копится словарь из отрезков проходимости, далее AStar вычисляет наиболее короткий путь из этих отрезков, ну и потом уже метод для объединения коротких отрезков в одном направлении в цельные, вот как-то так...
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: как фоново обрабатывать физику

Сообщение Zimaell 29 июл 2023, 20:19

в общем понял, корутины так корутины, вроде оно, будем тестить...
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: как фоново обрабатывать физику

Сообщение Saltant 29 июл 2023, 23:44

Zimaell писал(а):P.s. - кстати чат меня уже пару раз затролил конкретно, вот тебе код вот еще а потом "ой я это придумал и такого не существует", вот я и уже не совсем пойму 8-}

Ну а че, он мне даже "подключался" к моей sql базе данных, создавал таблицы и наполнял данными :)) Так что, он еще тот фантазер =))
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2236
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: как фоново обрабатывать физику

Сообщение 1max1 30 июл 2023, 03:09

Zimaell писал(а):
1max1 писал(а):Полный код покажи.

да ну там около 500 строк всего....
основная нагрузка идет именно во время поиска пути особенно когда по местности еще не проходил, визуально это выглядит как крыса в лабиринте ищет выход, двинулся к цели, если нет препятствия то двинулся дальше, уперся, разделился на 2 потока (налево, направо) используется тот что ближе к цели, сами возможности прощупываются путем Physics.BoxCast если конечно уже не проверялись, а если уже прощупывались то достаются из хеша готовые результаты, ну когда уже этот метод прощупывания достиг цели то двигается в обратном направлении, в итоге копится словарь из отрезков проходимости, далее AStar вычисляет наиболее короткий путь из этих отрезков, ну и потом уже метод для объединения коротких отрезков в одном направлении в цельные, вот как-то так...

А ты часом велик не изобретаешь? Может тебе обычный нав меш подойдет?
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: как фоново обрабатывать физику

Сообщение Saltant 30 июл 2023, 08:47

1max1 писал(а):А ты часом велик не изобретаешь? Может тебе обычный нав меш подойдет?

Я например везде для поиска пути использую этот ассет https://assetstore.unity.com/packages/t ... -pro-87744 он тупо топовый, больше ничо не нада, даже на ECS работает, можешь хоть тыщи агентов двигать для поиска пути, ноу лаг. Всем советую в общем.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2236
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: как фоново обрабатывать физику

Сообщение Zimaell 30 июл 2023, 18:37

1max1 писал(а):
Zimaell писал(а):
1max1 писал(а):Полный код покажи.

да ну там около 500 строк всего....
основная нагрузка идет именно во время поиска пути особенно когда по местности еще не проходил, визуально это выглядит как крыса в лабиринте ищет выход, двинулся к цели, если нет препятствия то двинулся дальше, уперся, разделился на 2 потока (налево, направо) используется тот что ближе к цели, сами возможности прощупываются путем Physics.BoxCast если конечно уже не проверялись, а если уже прощупывались то достаются из хеша готовые результаты, ну когда уже этот метод прощупывания достиг цели то двигается в обратном направлении, в итоге копится словарь из отрезков проходимости, далее AStar вычисляет наиболее короткий путь из этих отрезков, ну и потом уже метод для объединения коротких отрезков в одном направлении в цельные, вот как-то так...

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

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

теперь что касается тестов - как-то я не пробовал набивать большие словари а работал над самим поиском пути, но вот попробовал заранее закешировать данные о 1кк позициях, то есть можно ли там пройти и какая там высота, к моему удивлению с учетом метода в котором на одну точку уходит 3 проверки физики (Physics.CheckBox и 2 раза Physics.BoxCast (так надо)) на обработку 1кк ушло всего 7 секунд, то есть 7 сек в начале и уже есть подготовленный словарь на всю игру со всеми точками которые при нужде можно отдельно перезаписать, в общем тестирую.

P.s. - к слову пытался эту обрабоку (которая за 7 сек собирает 1кк точек) запустить через корутину, и 10 мин не хватило для обработки, так что лучше вначале 7 сек подождать чем потом черт знает сколько оно будет собирать...
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: как фоново обрабатывать физику

Сообщение Zimaell 30 июл 2023, 18:40

Saltant писал(а):
1max1 писал(а):А ты часом велик не изобретаешь? Может тебе обычный нав меш подойдет?

Я например везде для поиска пути использую этот ассет https://assetstore.unity.com/packages/t ... -pro-87744 он тупо топовый, больше ничо не нада, даже на ECS работает, можешь хоть тыщи агентов двигать для поиска пути, ноу лаг. Всем советую в общем.

да принцип там на самом деле прост, самое главное чтобы сама сетка путей была изначально, а там уже A* стандартный или продвинутый можно и у бота спросить он распишет, поиск уже по нодам он мне четко рабочий дал...
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: как фоново обрабатывать физику

Сообщение Alkos26Rus 30 июл 2023, 19:00

Zimaell писал(а):да нет, я о нём думал, но в моей ситуации он не подойдёт (я думаю), сейчас объясню почему я так думаю -terrain у меня динамический

Суть в чем игры? Боты бегают из одного конца карты в другой и им нужно прям весь путь рассчитать? Или ходят у себя под носом? Там же можно навмеш генерировать в определенном радиусе вокруг агента, вроде не должно быть накладно.
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: как фоново обрабатывать физику

Сообщение Zimaell 30 июл 2023, 19:08

Alkos26Rus писал(а):
Zimaell писал(а):да нет, я о нём думал, но в моей ситуации он не подойдёт (я думаю), сейчас объясню почему я так думаю -terrain у меня динамический

Суть в чем игры? Боты бегают из одного конца карты в другой и им нужно прям весь путь рассчитать? Или ходят у себя под носом? Там же можно навмеш генерировать в определенном радиусе вокруг агента, вроде не должно быть накладно.

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

а весь навмеш на терреин к примеру 1000х1000 генерить очень накладно, там только по кускам делить, но это уже другая проблема...
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: как фоново обрабатывать физику

Сообщение waruiyume 30 июл 2023, 19:10

можно частями но тоже "не очень удобно"

В чём неудобство заключается?
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: как фоново обрабатывать физику

Сообщение 1max1 30 июл 2023, 19:32

Ну фигачить миллион бокскастов и оверлепов енивей сомнительная затея, думаю ты обожжешься рано или поздно и все равно перейдешь на навмеш, хотя от игры зависит...
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

След.

Вернуться в Почемучка

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

Сейчас этот форум просматривают: Google [Bot] и гости: 25