2015-08-22 3 views
0

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

Представьте, что вы имели ракеты, пытаясь попал в самолет. Ракета начинает и направляется к курсу столкновения. Однако через некоторое время у него заканчивается топливо. Теперь у него есть только инерция, чтобы поразить цель, но поскольку она замедляется, ей необходимо исправить курс. Для этого он использует свои поверхности управления.

Я хочу добиться чего-то подобного. В настоящее время я просто применяю постоянную силу к своей ракете и просто поворачиваю ее в направлении, в котором она должна идти. У него жесткое крепление, и я использую его сопротивление, чтобы замедлить его во время вращения, так что постоянная сила, которую я применяю, меняет направление. Очевидно, что это не работает, когда у него заканчивается топливо.

Так что я пытаюсь моделировать несколько реалистичное поведение крыла, чтобы он мог продолжать поворачиваться без постоянного ускорения. К сожалению, я не знаю, как это сделать, и я даже не уверен, что мне придется искать, чтобы понять это.

Я попытался отразить вектор скорости, используя линию визирования к цели как нормальную. Который, я думаю, должен хотя бы дать мне правильную вращение. Но я понятия не имею, как «вращать» скорость по отношению к ней дистанционно реалистично. Я предполагаю, что мне придется полностью игнорировать Unitys drag и запустить мою собственную версию, потому что для того, чтобы крыло работало, ваше сопротивление должно измениться в зависимости от площади поверхности, которую вы подвергаете, нет? И я уверен, что Unity не считает это.

Ну, вот и все. Если вы что-то не поняли, спросите, не все это легко объяснить, особенно на другом языке.

Любые идеи? Любые предлагаемые условия, которые я мог бы найти? На данный момент у меня много идей.

ответ

1

Если вы не хотите, чтобы ракета ускорялась, сила должна быть перпендикулярна вектору скорости. Этот вектор может быть вычислен как вектор отказ:

force = c * (direction_to_target - dot(direction_to_target, velocity)/dot(velocity, velocity) * velocity) 

Где c является фактором, который преобразует вектор направления к вектору силы. direction_to_target должен быть единичным вектором.

Добавить силу тяжести для замедления работы ракеты.

+0

Hm. Я играл с этим какое-то время, и это, безусловно, правильное направление. Похоже, он использовал крылья. Тем не менее, похоже, что энергия создается из ничего. Трудно сказать, что на самом деле происходит из визуальных эффектов, и моя векторная математика не достаточно хороша, чтобы сразу понять уравнение. Однако я могу сказать, что как только ракета теряет всю скорость, она начинает качаться, как лист на ветру. Только то, что он больше не падает, он просто качается взад и вперед на постоянной высоте. Кроме того, мне пришлось установить c в> 20, чтобы он быстро повернулся. Может, так оно и есть? – user3093708

+0

Если 'velocity' равно 0 (или очень близко к 0), деление сработает. Следовательно, вы должны включить проверку и установить 'force' в 0, если это так. –

+0

Да, это немного помогло. Однако только при несколько более высоких значениях. При скорости> 10 он, по крайней мере, снова теряет высоту. Однако это не проблема. Я все еще думаю, что это имеет какое-то отношение к этому. Из-за этого подозрения я просто увеличил c, чтобы увидеть, что-то сломается. И это действительно так. Он вводит «генерировать энергию», так как в ракете может фактически набирать высоту при более высоких значениях c. Я думаю, что решение может состоять в том, чтобы отделить «удержание энергии» от «крыла», если хотите. Другими словами, отделите скорость вращения от сохраняемой энергии. – user3093708

Смежные вопросы