我试图找到一种方法让我的治疗船发射激光并击中目标游戏对象来治疗它,但当它在另一个游戏对象的顶部或后面时,它显然会使用他们的对撞机并终止/修复该对象,有没有一种方法没有标签和层(使用标签作为游戏的另一部分),使激光只检测该游戏对象或任何其他方法。提前感谢!
我目前在建筑物上使用的代码是用来检测激光的,带有标签。
else if (col.gameObject.tag == "HealingLaser") {
heal(col.gameObject.GetComponent<Laser_Heal>().healAmount);
Destroy(col.gameObject);
}发布于 2018-01-26 11:11:57
是的,还有另一种不使用层和标签的方法。使用接口。
创建一个接口:
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传递给最后一个参数。
https://stackoverflow.com/questions/48454824
复制相似问题