Проблема с обнаружением столкновения быстро движущегося шарика с ракеткой, управляемой мышью

В единстве у меня есть ракетка, которая должна ударить по мячу, и ракетка управляется непосредственно мышью, т.е. летучая мышь перемещает мышь, используя оси мыши и функцию transform.translate() для перемещения ракетки.

Я ожидал, что физика Unity3d не будет правильно переводить движение ракетки непосредственно мышью и соответственно ударять по мячу, и мне пришлось бы написать что-нибудь пользовательское, и это оказалось правдой.

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

Теперь я дошёл до написания пользовательского сценария по физике (я использую C# для написания сценария), в котором я прикрепил к шару 4 луча длиной 0.6F, и после выполнения некоторых сложных векторных вычислений вычислил скорость шара после удара о ракетку, и применил её непосредственно к скорости шара с помощью функции hardbody.velocity = calculateVelocity(). Теперь она снова работает нормально, когда ракетка не движется, но не тогда, когда я двигаю ракетку. Точная (симптоматическая) проблема:

Использование встроенной Физики и обнаружения столкновений: Когда ракетка движется, мяч иногда проходит прямо через ракетку, а иногда замедляется (до невероятных уровней).

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

Вещи, которые я пробовал:

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

  2. Уменьшение фиксированной метки времени до 0.001, что значительно улучшило вещи, но все еще очень далеко от результата я хочу, и мяч снова довольно часто выбирает неправильную сторону мяча.

  3. Изменение определения столкновения на непрерывное динамическое. Что тоже не улучшило ситуацию.

И в дополнение к неправильной стороне, выбранной при столкновении, другая проблема, которую я заметил, заключается в том, что после отскока от ракетки мяч перемещается, но ракетка перемещается быстрее, она вместо того, чтобы двигаться по полной дуге или линии, каким-то образом появляется перед мячом, что приводит к двум попаданиям. Это догадка, основанная на том, что видно.

Также очевидно, что аспект "движения" ракетки не читается встроенными в физику Unity3d, что приводит к странному поведению, когда ракетка движется с помощью ударов мыши по мячу.

Я застрял, я понятия не имею, куда двигаться отсюда. Пожалуйста, скажите мне, что я делаю не так.

9
задан SpeedBirdNine 9 September 2011 в 16:58
поделиться