Unity - 如何让物体忽略光线投射

Unity - how to make object ignore ray cast

我有一个游戏对象(比方说 Enemy),它上面有一个 Audio Trigger 脚本和 Sphere Collider.

现在攻击系统使用 Ray Casting 来检测层,但是当您指向一个带有 Audio Trigger 且带有 Sphere Collider 的敌人时,Ray casting 不会认识它。你是怎么解决这个问题的?

首先要感谢 Ben Tristten 我从他的一门 aswome 课程中得到了答案。

在您的 Audio Trigger 脚本上(或位于您要对其进行光线投射的游戏对象之上的脚本)。将以下行添加到 Start()Awake() 方法中:

gameObject.layer = LayerMask.NameToLayer ("Ignore Raycast");

希望这对遇到此问题的任何人有所帮助:)

除了Rony_y的回答外,需要注意的是Physics.Raycast() method(以及其他类似的方法,如RaycastAll、SphereCast等)需要一个LayerMask 其重载之一中的参数。

此参数允许您指定您要对进行光线投射的层作为 bitmask(因此仅通过传递 1,在针对默认和第 8 层(您可以命名的第一层)进行投射时,将通过传递 257 来完成:例如 1<<8 + 1<<0).

通过这种方式,您可以根据需要将对象设置为具有不同的物理层(最多 32 个不同的层,其中前 8 个不可重命名),例如,您的所有音频碰撞器体积都可以拥有自己的物理层Audio 层,您可以不将其包含在光线投射中。