c# - 如何使光线转换忽略触发碰撞器?

标签 c# raycasting unity3d

我有一个函数可以检查一个游戏对象是否可以看到另一个游戏对象而没有任何东西挡住它的视线:

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”标志的碰撞体发生碰撞;我希望光线转换忽略它们。有什么想法吗?

最佳答案

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

1。对于 3D,传递 QueryTriggerInteraction.IgnorePhysics.Raycast 函数。

int layer = 1 << LayerMask.NameToLayer("Default");
Physics.Raycast(cameraRay, out hit, distance, layer, QueryTriggerInteraction.Ignore);

2。对于 2D,设置 Physics2D.queriesHitTriggers false 如果您不希望它检测触发器。当您希望它再次检测触发器时,将其设置为 true。确保在调用 Physics2D.Raycast 之前设置它功能。

不检测触发器:

Physics2D.queriesHitTriggers = false;

检测触发器:

Physics2D.queriesHitTriggers = true;

您正在寻找 2D 版本。


注意:

我已经看到有关这在某些特定版本的 Unity 上不起作用的报告,这是一个错误,但我认为它现在已修复。如果不是,则使用 l1sten 中描述的层.

关于c# - 如何使光线转换忽略触发碰撞器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44402021/

相关文章:

three.js - 使用 THREE.Raycaster - 我总是得到 id 8?

c# - Unity3D:弹跳/反射光线转换

c# - Unity HTC VIVE 远距传送

android - Unity Gyroscope Reset Camera Position(类似oculus recenter camera)

c# - Autofac 不会自动将属性连接到自定义类

C#线程安全代码

c# - IList<T>.AsReadOnly 扩展方法不适用于引用类型集合

javascript - 更新 Three.js Raycaster 以调整窗口大小

c# - 如何从用 C++ 编写的外部 dll 中获取 const char * 到 C#

C# 单元测试 : iterating through expected results list