没有标签/图层2D的Unity对象检测

时间:2018-01-26 02:02:01

标签: c# unity3d unity5

我试图找到一种方法让我的治疗船射击激光并击中目标游戏物体来治疗它,但是当它位于另一个游戏物体的顶部或后面时,它显然使用它们的对撞机并终止/治愈对象,有没有一种方法没有标签和图层(使用游戏的另一部分的标签),使激光只检测游戏对象或任何其他方式。提前致谢!

Code I目前用于构建以检测激光,带有标签。

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

1 个答案:

答案 0 :(得分:1)

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

创建一个界面:

public interface IHealerLaser { }

创建一个实现它的脚本,然后附加它到您的 HealingLaser GameObject:

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传递给最后一个参数。