В единстве у меня есть ракетка, которая должна ударить по мячу, и ракетка управляется непосредственно мышью, т. Е. Летучая мышь перемещается мышью с помощью осей мыши и с помощью функции transform.translate () для переместите ракетку.
Я ожидал, что физика Unity3d не будет правильно переводить движение ракетки непосредственно мышью и соответственно воздействовать на шар, и мне придется написать что-то нестандартное, и это оказалось правдой.
Но столкновение мяча не определяется должным образом, когда ракетка движется. Когда все еще, все хорошо, и мяч ведет себя так, как мне нравится.
Теперь я дошел до того, что написал собственный физический скрипт (я использую C # для написания скриптов), в котором я прикрепил к мячу 4 лучевых трансляции длиной 0,6F, и, выполнив некоторые сложные векторные вычисления, рассчитал скорость мяча после ударяя ракетку, и примените ее непосредственно к скорости мяча, используя hardbody.velocity = calculateVelocity (). Теперь он снова работает нормально, когда ракетка не движется, но не когда я двигаю ракетку. Точная (симптомы) проблемы:
Использование встроенной физики и обнаружения столкновений: когда ракетка движется, мяч иногда проходит прямо через ракетку, а иногда замедляется (до невероятных уровней).
Использование моего скрипта для расчета скорости: проблема та же, но она позволяет мне определить, что не так, когда я печатаю нормаль коллайдера (ракетки). Иногда он дает правильную нормаль, а иногда дает отрицательный вектор нормали, что означает, что он проходит прямо через верхнюю поверхность и обнаруживает попадание с нижней стороны коллайдера (ракетки).
То, что я пробовал:
Увеличение размера коллайдера (он работает с более широким коробчатым коллайдером на ракетке, но затем, очевидно, мяч перемещается на довольно большое расстояние от ракетки, и мой собственный сценарий работает здесь, физика по умолчанию дает странные результаты, когда ракетка перемещается), короче говоря, я не понимаю, чего хочу.
Снижение фиксированной отметки времени до 0,001, что значительно улучшило ситуацию, но все еще очень и очень далеко от желаемого результата, и мяч снова довольно часто выбирает неправильную сторону мяча.
Изменение обнаружения столкновений на непрерывную динамику. Что тоже не улучшило ситуацию.
И в дополнение к неправильной стороне, выбранной при столкновении, я заметил еще одну проблему: после отскока от ракетки мяч движется, но ракетка движется быстрее, вместо того, чтобы двигаться по полной дуге или линии. появляется перед мячом, в результате чего два удара. Это гипотеза, основанная на том, что видно.
Также ясно, что аспект "движения" ракетки не читается встроенной физикой Unity3d, что приводит к странному поведению, когда ракетка движется с помощью мыши, ударяющей по мячу.
Я застрял, я понятия не имею, куда двигаться дальше. Пожалуйста, скажите мне, что я делаю не так?