1、忽略层级
在这里我们每次导出的功能模块会觉得非常麻烦。那么我在下面就不讲解功能模块的导入了,我直接将VRTK4.0 Demo中的所有功能模块都导入进来,一次性使用了。
那么这里我将所有的功能模块导入后,如果我有一个需要需要射线射中的时候忽略某一带BoxCollider的物体,那么我们这时候可以直接将该游戏物体的Layer改成IgnoreRaycast层级即可,这时候这个游戏物体就可以直接被忽略了,运行后可以看到Box直接穿过去了,当时如果这个时候我需要左手手柄进行交互而右手手柄的射线不进行交互的话这时候我们就需要重新定义一个新的层级IgnoreStraightPointer,然后我们把刚刚的Box的层级改成IgnoreStraightPointer,然后我们在创建一个左手的直线射线,这时候发射射线可以发现我们左右手柄的射线都可以发射射线交互,那么这时候我们在右手的射线Indicators.ObjectPointers.Straight上挂载脚本Physic Cast组件,可以看到Physic Cast组件上的属性可以让我们设定我们需要忽略那一层,我们将层级选择至IgnoreStraightPointer就可以了,然后我们将我们的右手的Physic Cast组价拖入到Pointer Facade的属性Raycast Rules中去就可以了然后运行测试就可以看到我们的右手手柄的射线被忽略了 左手手柄的射线还是可以选中的。
2、只和某个物体检测
首先我们打开菜单栏下Window->Zinnia->Observable List Component Generator,打开窗口后,名字我们自己可定义一个,然后Type类型我们选择List Contains Rule,然后点击生成,就会在Hierarchy面板上生成一个游戏物体.
然后选择我们刚刚生成的物体,将我们的Cube添加进来,这里的意思是LIst里包含的目标是有效的目标那如果我们想将List里的目标改成无效的目标,我们就需要取反,这里我们新建一个游戏物体命名为PointerNegationRule,在新建的物体上添加脚本NegationRule,然后将我们自动生成的物体PointerValidTargetRule指定给NegationRule脚本上的属性Rule中,最后我们再将我们的PointerNegationRule指定给我们右手射线中的Target Validity中,这时候我们右手手柄射线射中的物体就不会包含PointerValidTargetRule的List里面的游戏物体了。运行起来后发现右手手柄是可以选中Cube的 但是并不会穿透
当然我们也可以直接将PointerValidTargetRule指定给右手射线中的Target Validity中。这样的话就是除了Cube可以是有效目标其他的都不是有效目标