unity中的collision.contacts

介绍

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即可。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忽然602

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值