OnCollisionEnter
вызывается только один раз в кадре при первом столкновении.
Debug.DrawLine
имеет необязательный параметр duration
, из которых по умолчанию 0
Как долго должна быть видна линия.
и
duration
- это время (в секундах), в течение которого линия будет видимой после ее первого отображения. Длительность ноль показывает строку только для одного кадра.
Так что вы могли бы передать, например, 2
как
Debug.DrawRay(contact.point, collision.relativeVelocity, Color.white, 2.0f);
, чтобы он оставался видимым в течение 2 секунд.
В качестве альтернативы я просто поместил бы код в OnCollisionStay
вместо этого, чтобы он вызывался не только один раз, но и каждый кадр во время столкновения.
Для вопроса, стоящего за этим, Unity API обычно является хорошей отправной точкой:
Таким образом, разница: impulse
учитывает все отдельные точки контакта / столкновения, где каждая из них может иметь разные силы и направления столкновения, в то время как relativeVelocity
- это только относительная скорость между центрами объектов / точками поворота (это не имеет значения ).