C# 如何使光线投射忽略触发碰撞器?

C# 如何使光线投射忽略触发碰撞器?,c#,unity3d,raycasting,unity2d,C#,Unity3d,Raycasting,Unity2d,我有一个功能,检查一个游戏对象是否可以看到另一个游戏对象,而不会有任何东西阻挡它的视图: public bool CheckVision(GameObject target) { RaycastHit2D ray = (Physics2D.Raycast(transform.position, target.transform.position - transform.position, m_VisionRange)); if(ray.collider.name == targe

我有一个功能,检查一个游戏对象是否可以看到另一个游戏对象,而不会有任何东西阻挡它的视图:

public bool CheckVision(GameObject target)
{
    RaycastHit2D ray = (Physics2D.Raycast(transform.position, target.transform.position - transform.position, m_VisionRange));
    if(ray.collider.name == target.name)
    {
        Debug.DrawRay(transform.position, target.transform.position - transform.position);
        return true;               
    }
    else
    {
        return false;
    }
}

唯一的问题是,我不希望它与带有“isTrigger”标志集的碰撞器发生碰撞;我希望光线投射忽略它们。有什么想法吗?

在忽略光线投射或使用LayerMask上更改触发的游戏对象层


int targetLayer=1此操作不需要层掩码操作。如果只是为了忽略标记为触发器的碰撞器,则不必使用层。此操作现在内置于Unity 5.2及更高版本中

1。对于3D,传递到
Physics.Raycast
函数

int layer = 1 << LayerMask.NameToLayer("Default");
Physics.Raycast(cameraRay, out hit, distance, layer, QueryTriggerInteraction.Ignore);
检测触发器:

Physics2D.queriesHitTriggers = false;
Physics2D.queriesHitTriggers = true;
您正在寻找2D版本


注:


我曾经看到过关于Unity的某些版本不起作用的报道,这是一个bug,但我认为它现在已经修复了。如果没有,请使用。

中描述的层,使光线投射忽略5.2中的所有触发碰撞器,请转到:

编辑>项目设置>物理>取消选中“查询命中触发器”

(如果您使用的是较旧版本的Unity,则该复选框称为“光线投射命中触发器”)


实际上,在版本5.2.0f3中,不再显示光线投射。。。现在显示为:“Queries Hit Triggers”(查询命中触发器)如果希望光线投射通过触发器碰撞器,请取消选中该选项。

您是否考虑过将触发器碰撞器放置在不同的层上,并使用层遮罩确保光线投射不会命中该层上的任何内容?谢谢,有些人说我应该在unity设置中更改此选项。在代码中更改它更好还是重要?这真的不重要。通过从代码中执行此操作,您可以在运行时和独立构建中启用和禁用它(如果游戏需要这样做)。你不能从编辑那里这么做。这是唯一的区别。
Physics2D.queriesHitTriggers = true;