统一物理.OverlapSphere作为触发

问题描述

我想让每次玩家通过physics.overlapsphere射击时都触发球体碰撞。但似乎只会造成make碰撞,而不会触发。那么我该如何解决呢? Collider [] cs = Physics.OverlapSphere(transform.position,redi);

    foreach (Collider c in cs)
    {
        Rigidbody r = c.gameObject.GetComponent<Rigidbody>();
        if (r != null)
        {
            r.AddExplosionForce(power,transform.position,redi);
        }
        if (c.gameObject.tag == "enemy")
        {
            Destroy(c.gameObject);
        }
        if (c.gameObject.tag == "player")
        {
            c.gameObject.GetComponent<movee>().health -= 5;
        }
    }

解决方法

物理查询依赖于Physics.queriesHitTriggers属性,该属性定义了某些调用是否击中触发器对撞机(请参见https://docs.unity3d.com/ScriptReference/QueryTriggerInteraction.html)。 您可以将QueryTriggerInteraction调用的OverlapSphere设置为方法参数。如果不这样做,它将使用全局设置,在您的情况下,可以将其设置为忽略触发器。

正确的方法调用:

Collider[] hitColliders = Physics.OverlapSphere(position,range,layerMaskSphere,QueryTriggerInteraction.Collide);