Идея по поводу баллистики

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

Идея по поводу баллистики

Сообщение beatlecore 09 янв 2014, 00:29

В общем суть в чем, посетила меня "гениальная" идея по поводу расчета более-менее реалистичной баллистики, хотелось бы услышать конструктивную критику и мнения опытных коллег по цеху.

Итак задача: рассчитать баллистику полета снаряда на большом расстоянии, получив в результате более менее точную позицию попадания (ошибка должна быть в пределах дисперсии стрельбы), все это, разумеется, средствами юнити.

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

Сама мысль: т.к. прямой луч нам не подходит (упрется в забор все таки), то для расчета мы будем использовать много лучей.
1.При выстреле пускаем луч длинны l * s (константы длинны умноженной на скорость, для начала пусть будет 1), в сторону выстрела (условно начальный вектор выстрела будет параллельно направлению ствола)
2. в конце интервала l * s, если луч ни во что не уперся, или если уперся в простреливаемый объект, например кортон (в данном случае можно добавить необходимые значения уменьшающие значения выстрела (увеличить разброс или уменьшить скорость например)), пускаем новый луч длинны l, опустив его на угол a (масса пули на гравитацию, плюс значения разброса, ) и так далее пока не упремся в нужный нам объект

Для наглядности картинка
Скрытый текст:
Изображение


за точность расчетов будет отвечать коэфицент "l", чем меньше, тем точнее расчет, собственно благодаря чему можно будет калибровать количество расчетов (в данном случае количество лучей), относительно необходимой точности расчета самого выстрела для каждого конкретного вида оружия\патрона.
Перед тем как приступить к реализации, хотелось бы услышать мнение по поводу производительности, например, на мобильных, по поводу точности такого подхода, и конечно же корректности моих суждений.

Реализованая система будет в открытом доступе в этой теме.

Неадекватных прошу не беспокоить. Гугл смотрел, хочу велосипед.
Аватара пользователя
beatlecore
Старожил
 
Сообщения: 964
Зарегистрирован: 05 фев 2013, 21:26
Откуда: Sun Crimea

Re: Идея по поводу баллистики

Сообщение newArray 09 янв 2014, 00:43

А я молчал.
Скрытый текст:
И когда они пришли за мной — никто также не заступился за меня.
Последний раз редактировалось newArray 09 янв 2014, 03:27, всего редактировалось 1 раз.
newArray
Адепт
 
Сообщения: 1226
Зарегистрирован: 14 фев 2013, 07:03
Откуда: оттуда

Re: Идея по поводу баллистики

Сообщение beatlecore 09 янв 2014, 00:59

newArray писал(а):А я молчал.

конструктивно, ничего не скажешь.
Аватара пользователя
beatlecore
Старожил
 
Сообщения: 964
Зарегистрирован: 05 фев 2013, 21:26
Откуда: Sun Crimea

Re: Идея по поводу баллистики

Сообщение SLAYER 09 янв 2014, 04:06

чуть-чуть другое - дисперсия при вылете снаряда

ТУТ
Синтаксис:
Используется javascript
private var disp : float;
var bulletSpeed : float;
private var dispForce : float;
private var bulSpeedX : float;
private var bulSpeedY : float;
private var bulSpeedZ : float;
var bulletPrefab : GameObject;
var bulSpPoint : Transform;

function Update()
{
disp = Random.Range(1,8);
dispForce = Random Range(1,5);
bulSpeedZ = bulletSpeed;
}

function Fire() // ЭТА ФУНКЦИЯ ВЫЗЫВАЕТСЯ ПРИ Input.GetMouseButtonDown(0)
{
if(disp == 1)
{
 bulSpeedX = dispForce;
}else if(disp == 2)
{
bulSpeedX = dispForce/2;
bulSpeedY = dispForce/2; // и так далее!!! для всех восьми направлений
}
 
var bul = Instantiate(bulletPrefab, bulSpPoint.position, buSpPoint.rotation); // спавн пули
bul.velocity = transform.TransformDirection(bulSpeedX,bulSpeedY,bulSpeedZ);
 


добавь строчки в соответствуюие функции
SLAYER
UNец
 
Сообщения: 14
Зарегистрирован: 05 янв 2014, 07:04

Re: Идея по поводу баллистики

Сообщение beatlecore 09 янв 2014, 04:19

SLAYER писал(а):чуть-чуть другое - дисперсия при вылете снаряда


боюсь вы меня не поняли, скрипт я и сам написать могу, и для дисперсии, и для влияния давления воздуха на поведение твердого объекта в полете.
я спрашивал о целесообразности моего подхода и оценке производительности оного.
Тем не менее спасибо.

Да и плюс у вас физика, на скорости в 800м\с го размерами 0.01 х 0.01 х 0.07 проскочит любой коллайдер =)
Аватара пользователя
beatlecore
Старожил
 
Сообщения: 964
Зарегистрирован: 05 фев 2013, 21:26
Откуда: Sun Crimea

Re: Идея по поводу баллистики

Сообщение seaman 09 янв 2014, 10:53

оценке производительности оного

Зависит, например от количества снарядов.
о целесообразности моего подхода

Я делал так в арканоиде. Имхо это быстрее, чем уменьшать FixedTime для того же. На мобилах я не работал, На PC и в редакторе совершенно не заметно. Профайлером не проверял.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Идея по поводу баллистики

Сообщение marggob 09 янв 2014, 13:07

beatlecore писал(а):
SLAYER писал(а):чуть-чуть другое - дисперсия при вылете снаряда


боюсь вы меня не поняли, скрипт я и сам написать могу, и для дисперсии, и для влияния давления воздуха на поведение твердого объекта в полете.
я спрашивал о целесообразности моего подхода и оценке производительности оного.
Тем не менее спасибо.

Да и плюс у вас физика, на скорости в 800м\с го размерами 0.01 х 0.01 х 0.07 проскочит любой коллайдер =)


Можно двумя лучами обойтись теоретически. Первый считает расстояние до объекта, в который стреляем, второй уже направляется с учётом поправки и является "выстрелом". НИ так точно, зато экономично. Но на больших расстояниях конечно не вариант. :)
marggob
UNIт
 
Сообщения: 105
Зарегистрирован: 21 ноя 2011, 10:19

Re: Идея по поводу баллистики

Сообщение beatlecore 09 янв 2014, 16:05

marggob писал(а):
beatlecore писал(а):
SLAYER писал(а):чуть-чуть другое - дисперсия при вылете снаряда


боюсь вы меня не поняли, скрипт я и сам написать могу, и для дисперсии, и для влияния давления воздуха на поведение твердого объекта в полете.
я спрашивал о целесообразности моего подхода и оценке производительности оного.
Тем не менее спасибо.

Да и плюс у вас физика, на скорости в 800м\с го размерами 0.0,1 х 0.01 х 0.07 проскочит любой коллайдер =)


Можно двумя лучами обойтись теоретически. Первый считает расстояние до объекта, в который стреляем, второй уже направляется с учётом поправки и является "выстрелом". НИ так точно, зато экономично. Но на больших расстояниях конечно не вариант. :)

Ну два луча может хватить для стрельбы на близкой дистанции для класса штурмовых винтовок например, да и количество лучей автоматически будет варьироваться, в зависимости от расстояния, за совет спасибо.
Аватара пользователя
beatlecore
Старожил
 
Сообщения: 964
Зарегистрирован: 05 фев 2013, 21:26
Откуда: Sun Crimea

Re: Идея по поводу баллистики

Сообщение IDoNotExist 10 янв 2014, 20:29

beatlecore писал(а):1.При выстреле пускаем луч длинны l * s (константы длинны умноженной на скорость, для начала пусть будет 1), в сторону выстрела (условно начальный вектор выстрела будет параллельно направлению ствола)
2. в конце интервала l * s, если луч ни во что не уперся, или если уперся в простреливаемый объект, например кортон (в данном случае можно добавить необходимые значения уменьшающие значения выстрела (увеличить разброс или уменьшить скорость например)), пускаем новый луч длинны l, опустив его на угол a (масса пули на гравитацию, плюс значения разброса, ) и так далее пока не упремся в нужный нам объект

за точность расчетов будет отвечать коэфицент "l", чем меньше, тем точнее расчет, собственно благодаря чему можно будет калибровать количество расчетов (в данном случае количество лучей), относительно необходимой точности расчета самого выстрела для каждого конкретного вида оружия\патрона.
Перед тем как приступить к реализации, хотелось бы услышать мнение по поводу производительности, например, на мобильных, по поводу точности такого подхода, и конечно же корректности моих суждений.


Ход мыслей у вас правильный, но вот реализация хромает, во первых, зачем лучу длина, и зачем еще к тому же эту длину умножать на скорость?
Все можно сделать гораздо проще.
Для того чтобы описать объект пули достаточно двух Vector3, первый это текущая позиция в пространстве (pos), второй - текущая скорость пули (velo), далее обычная векторная алгребра, запоминаем предыдущую позицию пули и сдвигаем текущую позицию по вектору скорости:

Vector3 prevPos = pos;
pos += velo*Time.deltaTime;

далее меняем, ускорение, умножаем на вектор гравитации (добавляем сопротивление воздуха если желаете и т.д.):
velo += (-Vector3.up*(9.81f*Time.deltaTime));

Все! Движение снаряда под действием гравитации готово, далее пускаете рейкаст от предыдущей позиции к текущей. Повторяете это N-ное количество раз, в зависимости от времени жизни снаряда. И не нужны все эти ваши коэффициенты точности, точность будет почти сто процентной. Меняя ускорение в зависимости от поверхности в которую ударяется снаряд, можно делать рикошеты, и любое другое физическое поведение.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: Идея по поводу баллистики

Сообщение beatlecore 10 янв 2014, 22:35

вооот, спасибо милчеловек, симулятору снайперской стрельбы быть)
Аватара пользователя
beatlecore
Старожил
 
Сообщения: 964
Зарегистрирован: 05 фев 2013, 21:26
Откуда: Sun Crimea

Re: Идея по поводу баллистики

Сообщение beatlecore 13 янв 2014, 02:52

подскажите как правильно вычислить нормализованую велосити исходя из вращения камеры, а то я что-то подзабыл уже эти все вектора, 2д казуалки убили мой мозг)
Аватара пользователя
beatlecore
Старожил
 
Сообщения: 964
Зарегистрирован: 05 фев 2013, 21:26
Откуда: Sun Crimea

Re: Идея по поводу баллистики

Сообщение beatlecore 26 янв 2014, 18:26

вот что получилось, более менее свойски я считаю, осталось откалибровать для работы с реальными значениями свойств патронов и оружия, добавить сопротивления воздуха, влияние ветра\дождя\высоты, добавить эффекты пулям (в принципе партикл эмиттер на префаб) чтобы как в матрице, организовать передачу типа патрона через какой-нибудь метод аля "зарядить".
Хотелось бы услышать конструктивную критику и советы как по реализации, так и по оптимизации.
Когда версия будет удовлетворять мои минимальные потребности, выложу в шапку и переоформлю.
У вас нет доступа для просмотра вложений в этом сообщении.
Аватара пользователя
beatlecore
Старожил
 
Сообщения: 964
Зарегистрирован: 05 фев 2013, 21:26
Откуда: Sun Crimea

Re: Идея по поводу баллистики

Сообщение newArray 26 янв 2014, 20:24

Спасибо , интересно. Какая версия юнити?

Кстати довольно перспективная область с моей точки зрения заниматься на игровых движках таким направлением как мат моделирование обычных процесов с которыми мы имеем дело в жизни. Но у тебя опять же решение стандартной игровой задачи это связано с оружием, а в жизни же куча других процессов. То есть решать с такой же детализацией например работу на токарном станке и другие вещи связанные с производственной деятельностью. И эти вещи совершенно нигде в игрострое не реализованы. А если добавить все это множество совершенно ненужных фич, которые можно представить в игру, думаю народ будет от этого тащится.
Вот к примеру берем обычную бытовуху - наполнение ванной воды например и закрытие открытие ее пробкой и скажем слив унитаза. Где на юнити это детально реализовано в виде платного пака или вообще где либо.
Последний раз редактировалось newArray 26 янв 2014, 20:42, всего редактировалось 2 раз(а).
newArray
Адепт
 
Сообщения: 1226
Зарегистрирован: 14 фев 2013, 07:03
Откуда: оттуда

Re: Идея по поводу баллистики

Сообщение beatlecore 26 янв 2014, 20:34

newArray писал(а):Спасибо , интересно. Какая версия юнити?

последняя
по сути там только 1 скрипт, вешается на камеру, все что необходимо создать\занести в скрипт в паблик переменных, пока что беспощадно плодит сущности префабов пули, все расчеты в 1 скрипте, как для 1-2 выстрелов, так и для 100500. при большом количестве летящих (т.е. ни разу не столкнувшихся) пуль немного просаживает фпс
Аватара пользователя
beatlecore
Старожил
 
Сообщения: 964
Зарегистрирован: 05 фев 2013, 21:26
Откуда: Sun Crimea

Re: Идея по поводу баллистики

Сообщение beatlecore 26 янв 2014, 21:50

есть тут кто может описать вкратце силы влияющие на поведение пули, а лучше накидать пару формул, например зависимости от баллистического коэфицента и тому подобного всякого добра

[upd]
и кто может обьяснить например как перенести реальные скорости, значения сил и тому подобное в юнити, хотя бы на пальцах
Аватара пользователя
beatlecore
Старожил
 
Сообщения: 964
Зарегистрирован: 05 фев 2013, 21:26
Откуда: Sun Crimea

След.

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

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

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