Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不带标签的Unity对象检测/图层2D_C#_Unity3d_Unity5 - Fatal编程技术网

C# 不带标签的Unity对象检测/图层2D

C# 不带标签的Unity对象检测/图层2D,c#,unity3d,unity5,C#,Unity3d,Unity5,我试图找到一种方法让我的治疗船发射激光并击中目标游戏对象来治疗它,但是当它位于另一个游戏对象的顶部或后面时,它会自动使用碰撞器终止/治疗该对象,有没有一种没有标签和层的方法(在游戏的另一部分使用标签)使激光只检测游戏对象或任何其他方式。提前谢谢 我目前在建筑物上使用的检测激光的代码,带有标签 else if (col.gameObject.tag == "HealingLaser") { heal(col.gameObject.GetComponent<Laser_Hea

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

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

 else if (col.gameObject.tag == "HealingLaser") {
        heal(col.gameObject.GetComponent<Laser_Heal>().healAmount);
            Destroy(col.gameObject);
    }
else if(col.gameObject.tag==“HealingLaser”){
治疗(col.gameObject.GetComponent().healAmount);
销毁(游戏对象列);
}

是的,还有一种不使用图层和标签的方法。使用接口

创建一个接口:

public interface IHealerLaser { }
IHealerLaser iHealer = col.gameObject.GetComponent<IHealerLaser>();
if (iHealer != null) 
{
        heal(col.gameObject.GetComponent<Laser_Heal>().healAmount);
            Destroy(col.gameObject);
}
创建一个实现它的脚本,然后将它附加到你的HealingLaser游戏对象上:

public class ObjDetector : MonoBehaviour, IHealerLaser { }
检测与界面碰撞的对象:

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


要恢复识别碰撞,请将
false
传递到最后一个参数

好的,使用层你可以使激光层只与游戏对象碰撞来治疗层。如果我有两个不同对象的治疗者,一个可以被卡在治疗另一个。