如何从触发器获取接触点?
How to get contact points from a trigger?
我的情况是我需要一个不会碰撞但也会给我接触点的 2d 传感器。
触发器不给我接触点,碰撞器给我接触点但会导致碰撞。
我曾尝试在使用碰撞器时禁用碰撞,希望获得碰撞输入回调但实际上并没有发生碰撞,但没有成功。
那么如何从触发器中获取接触点呢?或者如何在不引起碰撞的情况下获得与刚体的碰撞回调?
基本上我有一个圆圈我想充当雷达,但我希望它的接触点也相当准确。
你应该使用 OnCollisionEnter
但添加一个 rigidbody
并将 isTrigger
设置为 false
并将刚体 isKinematic
设置为 true
然后它就像一个触发器,你可以得到这样的接触点
void OnCollisionEnter(Collision collision) {
foreach (ContactPoint contact in collision.contacts) {
Debug.DrawRay(contact.point, contact.normal, Color.white);
}
您可以使用 OnTriggerEnter 函数获取联系点
OnTriggerEnter(Collider other)
{
RaycastHit hit;
if (Physics.Raycast(transform.position, transform.forward, out hit))
{
Debug.Log("Point of contact: "+hit.point);
}
}
发布是因为这是 Google 的最高结果。
我认为有一种比光线投射更简单(当然取决于您如何看待它)和更精确的方法。
private void OnTriggerEnter(Collider collider)
{
var collisionPoint = collider.ClosestPoint(transform.position);
}
collider
是进入问题触发器的对撞机,transform
是触发器的变换。正如函数名称所暗示的那样,此填充在对撞机上最接近所述触发器的位置找到一个点。
当然,这并不是特别精确,尤其是对于形状怪异的碰撞器,但很可能它对于大多数情况来说已经足够好了,对于射弹来说绝对足够好了,或者说,blade,击中刚体角色。
作为奖励,这里有一个简单的矢量数学来找到碰撞法线:
var collisionNormal = transform.position - collisionPoint;
同样,不是非常精确,也不会是撞击点的实际适当法线(即垂直),但与前一个一样 - 很可能会足够好。
玩得开心!
我的情况是我需要一个不会碰撞但也会给我接触点的 2d 传感器。
触发器不给我接触点,碰撞器给我接触点但会导致碰撞。
我曾尝试在使用碰撞器时禁用碰撞,希望获得碰撞输入回调但实际上并没有发生碰撞,但没有成功。
那么如何从触发器中获取接触点呢?或者如何在不引起碰撞的情况下获得与刚体的碰撞回调?
基本上我有一个圆圈我想充当雷达,但我希望它的接触点也相当准确。
你应该使用 OnCollisionEnter
但添加一个 rigidbody
并将 isTrigger
设置为 false
并将刚体 isKinematic
设置为 true
然后它就像一个触发器,你可以得到这样的接触点
void OnCollisionEnter(Collision collision) {
foreach (ContactPoint contact in collision.contacts) {
Debug.DrawRay(contact.point, contact.normal, Color.white);
}
您可以使用 OnTriggerEnter 函数获取联系点
OnTriggerEnter(Collider other)
{
RaycastHit hit;
if (Physics.Raycast(transform.position, transform.forward, out hit))
{
Debug.Log("Point of contact: "+hit.point);
}
}
发布是因为这是 Google 的最高结果。
我认为有一种比光线投射更简单(当然取决于您如何看待它)和更精确的方法。
private void OnTriggerEnter(Collider collider)
{
var collisionPoint = collider.ClosestPoint(transform.position);
}
collider
是进入问题触发器的对撞机,transform
是触发器的变换。正如函数名称所暗示的那样,此填充在对撞机上最接近所述触发器的位置找到一个点。
当然,这并不是特别精确,尤其是对于形状怪异的碰撞器,但很可能它对于大多数情况来说已经足够好了,对于射弹来说绝对足够好了,或者说,blade,击中刚体角色。
作为奖励,这里有一个简单的矢量数学来找到碰撞法线:
var collisionNormal = transform.position - collisionPoint;
同样,不是非常精确,也不会是撞击点的实际适当法线(即垂直),但与前一个一样 - 很可能会足够好。
玩得开心!