如何从触发器获取联系点?

shw*_*ick 7 c# unity-game-engine unityscript

我需要一个不会碰撞但也会为碰撞提供接触点的2d传感器。

扳机不给我接触点,对撞机给我接触点,但会引起碰撞。

我已经尝试过使用碰撞器时禁用碰撞,以期使碰撞进入回调,但实际上没有发生碰撞,但是没有运气。

那么,如何从触发器获取联系点?或者如何在不引起碰撞的情况下使用刚体获得碰撞回调?

基本上,我有一个想充当雷达的圆圈,但我希望它在接触点方面也相当准确。

Max*_*ari 10

发帖是因为这是 Google 的最高结果。

我认为有一种比光线投射更简单(当然取决于你如何看待它)和更精确的方法来做到这一点。

private void OnTriggerEnter(Collider collider)
{ 
    var collisionPoint = collider.ClosestPoint(transform.position);
}
Run Code Online (Sandbox Code Playgroud)

collider是进入相关触发器的碰撞器,transform是触发器的变换。正如函数名称所示,此填充会在碰撞体上找到最接近所述触发器的点。当然,这并不是非常精确,特别是对于形状怪异的碰撞器来说,但很可能对于大多数情况来说它已经足够好了,对于射弹(或者说刀片)击中刚体角色来说绝对足够好。

作为奖励,这里有一个简单的向量数学来查找碰撞法线:

var collisionNormal = transform.position - collisionPoint;
Run Code Online (Sandbox Code Playgroud)

再次强调,不是超级精确,也不是撞击点的实际正确法线(即垂直),但与前一个一样 - 很可能已经足够好了。

玩得开心!

  • 不过,这不必始终正确......特别是如果您的枢轴点不在对撞机的中心,这可能会返回完全错误的结果;) (2认同)

Mil*_*emi 2

您应该使用OnCollisionEnter但添加一个rigidbody到它并设置isTriggerfalse并将刚体设置isKinematictrue然后它将充当触发器,您可以获得这样的接触点

 void OnCollisionEnter(Collision collision) {
        foreach (ContactPoint contact in collision.contacts) {
            Debug.DrawRay(contact.point, contact.normal, Color.white);
        }
Run Code Online (Sandbox Code Playgroud)

  • 这在一般情况下是行不通的;例如,运动刚体不会与静态碰撞器发生碰撞,例如大多数游戏中的大多数环境。 (2认同)