我有一个函数可以检查一个游戏对象是否可以看到另一个游戏对象而没有任何东西挡住它的视线:
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.Ignore
到 Physics.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/