介绍:
由前面学习可知:
对象指针将与任何包含碰撞体(甚至是触发器碰撞体)的游戏对象发生冲突,但有时我们希望对象指针完全忽略游戏对象,就好像它不在场景中一样。
例如,如果我们手里拿着一个可交互对象,那么我们不希望我们的传送指针与该可交互对象发生碰撞,如果对象指针光束直接穿过会更好。
我们可以通过自定义对象指针的 RayCast 来确定 RayCast 将哪些游戏对象碰撞体视为有效目标来实现此目的。
Go Go Go:
Step1:
我们在场景中新建一个Cube,简单的调整他的属性以及大小
Step2:
当我们运行unity后,按键激活对象指针并将其对准。您将看到指针光束按预期击中。
Step3:
如果我们想让指针忽略我们,简单方法就是将Cube层设置为2:Ignore Raycast
Step4:
运行场景,按键激活对象指针并将其对准。你会看到指针光束现在穿过Cube,如果它不存在的话。这是因为该图层将被所有 RayCast 忽略(除非另有说明)。
Step5:
我们已经实现了我们的目标,但是如果我们希望我们的镜头被场景中的其他 RayCast 拾取怎么办?我们刚刚告诉所有 RayCast 都会忽略它,将其放在2:Ignore Raycast上。
如果我们只是想让我们的直线指针忽略怎么办?好吧,我们可以通过使用我们自己的自定义层来实现这一点。通过新建一个新的图层。
创建一个新图层: IgnoreStraightPointer
然后回到主场景,我们将Cube的层级改为:9: IgnoreStraightPointer
Step6:
现在我们设置了一个自定义图层,我们需要告诉我们的直线指针忽略这个自定义图层。我们可以用一个组件来做到这一点。
Step7:
我们需要在组件上更改属性值以包含我们的图层。
Step8:
现在我们只需要告诉我们的直线指针在投射光束时使用我们前面设置的规则,就需要将其拖到对应的组件属性上。
Play:
运行场景,按键激活对象指针并将其对准。你会看到指针光束现在穿过Cube,如果它不存在的话。这是因为我们的自定义规则告诉我们的直线指针忽略该层。