Взялся изучить Wipeout Pulse на предмет возможности ее пересоздания в Unity и столкнулся с дилеммой :( Обратите внимание на следующий участок трека:
Как видите, в реальности, сразу после прохождения этого участка все глайдеры сразу бы послетали бы с трассы. Очевидно, что гравитация в этой игре не имеет строго определенного вектора и, следовательно, в физ.движке ее придется отключить и управлять каждым глайдером самостоятельно.
Собственно, вопрос: возможно ли эффективно расчитать движение 16 машин на уровне скриптов Unity без тормозов? Или лучше сразу искать другой инструмент?
отключить встроенную гравитацию, добавить приложение силы, вычисляя вектор в зависимости от позиции (или зоны) - главное - - написать то, что будет эффективно и быстро по трем координатам выдавать вектор гравитации
NIXIUS
> добавить приложение силы
Собственно, уже думал над этим, но остается неясным, как это лучше сделать. Если я установлю Rigidbody.AddForce() по нормали к поверхности на одном участке, а на следующем нормаль уже будет другая и глайдер потащит в сторону. Повторный вызов AddForce() по новой нормали ситуацию только усугубит.
Не надо использовать привязку к нормали. Используйте точечные зоны ("объемный" граф) - интерполируя вектора - тогда все гладенько будет
Ну или уж если так хотите - используйте сглаживающий фильтр вектора гравитации - тогда вычисляйте его как хотите
Кажется придумал :) На каждом обновлении можно вычитать предыдущее значение силы и выставлять новое. Теперь остается вопрос что будет быстрее: raycast или сенсоры? буду экспериментировать :)
NIXIUS
> Используйте точечные зоны ("объемный" граф) - интерполируя вектора - тогда все
> гладенько будет
А объемный граф как делать? Сенсоры по всему треку расставить? Или полностью на скриптах (подозреваю, что второе будет медленно). Что касается интерполяции, то, как мне кажется, после смены вектора силы PhysX сам все пересчитает довольно гладко.
Barabus
> после смены вектора силы PhysX сам все пересчитает довольно гладко.
Это только если включен режим адаптивных сил
Barabus
> А объемный граф как делать?
Разбить сцену на кубическую матрицу, для каждой ячейки просчитать каким либо образом (заранее!!!, т.е. на этапе дизайна) вектор гравитации. Ну а дальше все понятно
ЗЫ - как грубый вариант
NIXIUS
> Разбить сцену на кубическую матрицу, для каждой ячейки просчитать каким либо
> образом
Ясно. Надо будет тоже испытать.
Тема в архиве.