Повторное использование или копирование силы столкновения - PullRequest
0 голосов
/ 21 апреля 2020

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

Пока это моя попытка, но сила слишком велика, как у всех объектов полет с места происшествия:

void OnCollisionEnter(Collision collision) {
    if (collision.gameObject.GetComponent<Rigidbody>() == null) {
        collision.gameObject.AddComponent<Rigidbody>().AddForceAtPosition(collision.impulse, collision.contacts[0].point);
    }
}

Я также пробовал:

void OnCollisionEnter(Collision collision) {
    if (collision.gameObject.GetComponent<Rigidbody>() == null) {
        collision.gameObject.AddComponent<Rigidbody>().AddForceAtPosition(collision.impulse / Time.fixedDeltaTime, collision.contacts[0].point);
    }
}

Что я делаю неправильно / отсутствует?

1 Ответ

1 голос
/ 21 апреля 2020

Ваша точка столкновения может находиться далеко от источника объекта. Проверьте:

  • , если поле столкновения пропорционально объекту.
  • точка столкновения имеет смысл с фактическим положением объекта.
  • масса твердого тела адекватна.

Обратите внимание, что, когда положение находится далеко от центра твердого тела, приложенный крутящий момент будет нереально большим. от единицы до c страница

Что касается интерпретации коллизий в коде, я нашел этот фрагмент кода в этой статье, описывающий Как получить силу удара столкновения в Unity

public class Character : MonoBehaviour {
private void OnCollisionEnter (Collision collision) {
    float collisionForce = collision.impulse.magnitude / Time.fixedDeltaTime;

    if (collisionForce < 100.0F) {
        // This collision has not damaged anyone...
    }
    else if (collisionForce < 200.0F) {
        // Auch! This will take some damage.
    }
    else {
        // This collision killed me!
    }
} 
}
...