介绍
collision.contacts
方法
collision.contacts是Unity中的一个变量,用于获取碰撞事件中发生碰撞的两个物体之间的接触点信息。它是一个ContactPoint类型的数组,每个ContactPoint包含了接触点的位置、法线、摩擦力等信息。
在Unity中,当两个物体发生碰撞时,会触发一个碰撞事件(Collision Event)。在碰撞事件中,可以通过collision.contacts来获取碰撞的接触点信息
void OnCollisionEnter(Collision collision)
{
ContactPoint[] contacts = collision.contacts;
foreach (ContactPoint contact in contacts)
{
Debug.Log("Contact point: " + contact.point);
Debug.Log("Contact normal: " + contact.normal);
Debug.Log("Contact friction: " + contact.normal);
}
}
在上述代码中,当两个物体发生碰撞时,OnCollisionEnter函数会被调用,并且会传入一个Collision类型的参数collision。通过collision.contacts可以获取到碰撞事件中的接触点信息,并且可以将这些信息打印出来或使用它们进行其他操作。
需要注意的是,collision.contacts的长度可能会因为碰撞的情况而不同,例如当两个物体只是相碰而没有产生接触时,contacts数组的长度为0。因此在使用contacts时,需要先进行长度检查。
举例子
假设我们有两个物体A和B发生了碰撞,我们想要获取B相对于A的速度的法向量。我们可以在碰撞事件的回调函数中使用collision.contacts属性来获取碰撞点的信息,然后使用collision.relativeVelocity属性来获取相对速度。接着,我们可以通过向量的点积运算来获取速度法向量。下面是一段示例代码:
void OnCollisionEnter(Collision collision)
{
// 获取碰撞点信息
ContactPoint contact = collision.contacts[0];
// 获取相对速度
Vector3 relativeVelocity = collision.relativeVelocity;
// 获取速度法向量
Vector3 velocityNormal = Vector3.Dot(relativeVelocity, contact.normal) * contact.normal;
// 输出速度法向量
Debug.Log("Velocity normal: " + velocityNormal);
}
需要注意的是,contacts数组可能包含多个碰撞点,因此在实际使用时需要进行循环处理。此外,如果需要获取A相对于B的速度法向量,只需要将上述代码中的contact.normal替换为-contact.normal即可。