问题描述
我想让每次玩家通过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);