重用或复制碰撞力
Reuse or copy collision force
每当我的角色与一个物体发生碰撞时,我都会向该物体添加一个刚体;而且我还想重新应用它在同一点上碰撞时应该受到的相同力,所以它会与物理反应。
到目前为止,这是我的尝试,但是力太大了,因为所有物体都飞离了场景:
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);
}
}
我在做什么wrong/missing?
你的碰撞点可能离物体的原点太远了。
检查:
- 如果碰撞框与对象成比例。
- 碰撞点与物体的实际位置是有道理的。
- 刚体质量足够
Note that when position is far away from the center of the rigidbody
the applied torque will be unrealistically large.
from unity doc page
关于代码中的碰撞解释,我在这篇描述How to get the impact force of a collision in 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!
}
}
}
每当我的角色与一个物体发生碰撞时,我都会向该物体添加一个刚体;而且我还想重新应用它在同一点上碰撞时应该受到的相同力,所以它会与物理反应。
到目前为止,这是我的尝试,但是力太大了,因为所有物体都飞离了场景:
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);
}
}
我在做什么wrong/missing?
你的碰撞点可能离物体的原点太远了。 检查:
- 如果碰撞框与对象成比例。
- 碰撞点与物体的实际位置是有道理的。
- 刚体质量足够
Note that when position is far away from the center of the rigidbody the applied torque will be unrealistically large. from unity doc page
关于代码中的碰撞解释,我在这篇描述How to get the impact force of a collision in 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!
}
}
}