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

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

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

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

Где вы вызываете этот код? Если это, например. OnCollisionEnter или что-то подобное, он будет вызываться только в кадре 1, и Time.timeScale=0; не сильно поможет. Может быть, уже достаточно было бы просто отладка с точкой останова?

derHugo 27.05.2019 20:14

Да, это называется в OnCollisionEnter . Цель состоит в том, чтобы увидеть и понять, что означают collision.relativeVelocity и collision.impulse и что показывают их направления. Я надеюсь, что визуализация поможет мне.

Sergei 27.05.2019 21:08
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
114
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

How long the line should be visible for.

а также

The duration is the time (in seconds) for which the line will be visible after it is first displayed. A duration of zero shows the line for just one frame.


Таким образом, вы можете пройти, например. 2 нравится

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

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


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


Для ответа на вопрос Unity API обычно является хорошей отправной точкой:

  • Collision.impulse

    The total impulse applied to this contact pair to resolve the collision.

    The total impulse is obtained by summing up impulses applied at all contact points in this collision pair. To work out the total force applied you can divide the total impulse by the last frame's fixedDeltaTime.

  • Collision.relativeVelocity

    The relative linear velocity of the two colliding objects.

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

Другие вопросы по теме