无标签/层 2D 的 Unity 对象检测



我正在尝试找到一种方法让我的治疗船发射激光并击中目标游戏对象以治愈它,但是当它在另一个游戏对象的顶部或后面时,它会不知不觉地使用它们的对撞机并终止/治愈该对象,有没有办法没有标签和层(使用游戏另一部分的标签(使激光仅检测该游戏对象或任何其他方式它。提前感谢!

我目前在建筑上使用的代码来检测带有标签的激光。

 else if (col.gameObject.tag == "HealingLaser") {
        heal(col.gameObject.GetComponent<Laser_Heal>().healAmount);
            Destroy(col.gameObject);
    }

是的,还有另一种不使用图层和标签的方法。使用界面。

创建接口:

public interface IHealerLaser { }

创建一个实现它的脚本,然后将其附加到您的治疗激光游戏对象:

public class ObjDetector : MonoBehaviour, IHealerLaser { }

检测哪个对象与接口发生冲突:

IHealerLaser iHealer = col.gameObject.GetComponent<IHealerLaser>();
if (iHealer != null) 
{
        heal(col.gameObject.GetComponent<Laser_Heal>().healAmount);
            Destroy(col.gameObject);
}

如果您只想防止两个对象发生碰撞,请使用Physics.IgnoreXXXCollision函数。

忽略第 9 层和第 9 层之间的冲突:

Physics.IgnoreLayerCollision(9, 9, true);

Physics.IgnoreCollision(yourFirstCollider, yourOtherCollider, true)

若要恢复识别冲突,请将false传递给最后一个参数。

最新更新