首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无需标记/层2D的Unity对象检测

无需标记/层2D的Unity对象检测
EN

Stack Overflow用户
提问于 2018-01-26 10:02:01
回答 1查看 573关注 0票数 0

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

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

代码语言:javascript
复制
 else if (col.gameObject.tag == "HealingLaser") {
        heal(col.gameObject.GetComponent<Laser_Heal>().healAmount);
            Destroy(col.gameObject);
    }
EN

回答 1

Stack Overflow用户

发布于 2018-01-26 11:11:57

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

创建一个接口:

代码语言:javascript
复制
public interface IHealerLaser { }

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

代码语言:javascript
复制
public class ObjDetector : MonoBehaviour, IHealerLaser { }

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

代码语言:javascript
复制
IHealerLaser iHealer = col.gameObject.GetComponent<IHealerLaser>();
if (iHealer != null) 
{
        heal(col.gameObject.GetComponent<Laser_Heal>().healAmount);
            Destroy(col.gameObject);
}

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

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

代码语言:javascript
复制
Physics.IgnoreLayerCollision(9, 9, true);

代码语言:javascript
复制
Physics.IgnoreCollision(yourFirstCollider, yourOtherCollider, true)

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48454824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档