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