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
层,您可以不将其包含在光线投射中。
我有一个游戏对象(比方说 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
层,您可以不将其包含在光线投射中。