Unity 3D: как заморозить кадр, чтобы исследовать линии столкновения, нарисованные Debug.DrawRay? - PullRequest
0 голосов
/ 27 мая 2019

Я пробовал это:

Debug.DrawRay(contact.point, collision.relativeVelocity, Color.white);
Time.timeScale = 0.0f;

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

1 Ответ

2 голосов
/ 27 мая 2019

OnCollisionEnter вызывается только один раз в кадре при первом столкновении.

Debug.DrawLine имеет необязательный параметр duration, из которых по умолчанию 0

Как долго должна быть видна линия.

и

duration - это время (в секундах), в течение которого линия будет видимой после ее первого отображения. Длительность ноль показывает строку только для одного кадра.


Так что вы могли бы передать, например, 2 как

Debug.DrawRay(contact.point, collision.relativeVelocity, Color.white, 2.0f);

, чтобы он оставался видимым в течение 2 секунд.


В качестве альтернативы я просто поместил бы код в OnCollisionStay вместо этого, чтобы он вызывался не только один раз, но и каждый кадр во время столкновения.


Для вопроса, стоящего за этим, Unity API обычно является хорошей отправной точкой:

  • Collision.impulse

    Суммарный импульс, приложенный к этой паре контактов для разрешения столкновения.

    Полный импульс получается путем суммирования импульсов, приложенных во всех точках контакта в этой паре столкновений. Чтобы определить суммарную примененную силу, вы можете разделить суммарный импульс на фиксированный последний кадр последнего кадра.

  • Collision.relativeVelocity

    Относительная линейная скорость двух сталкивающихся объектов.

Таким образом, разница: impulse учитывает все отдельные точки контакта / столкновения, где каждая из них может иметь разные силы и направления столкновения, в то время как relativeVelocity - это только относительная скорость между центрами объектов / точками поворота (это не имеет значения ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...