无法使用类别位掩码阻止物理场与粒子系统进行交互

时间:2018-09-06 20:26:26

标签: ios swift xcode scenekit arkit

我想将具有相应场的多个粒子系统放置到一个场景中,并在它们之间切换。这些场仅应与特定的粒子系统相互作用。使用Xcode SceneKit文档构建器无法执行此操作。

根据Apple文档:

  

要确定某个字段是否影响物理物体,SceneKit对该字段的类别位掩码和该物体的categoryBitMask属性执行按位与运算。如果结果为非零值,SceneKit将计算并在主体上施加场力。为了确定某个字段是否影响由SCNParticleSystem对象生成的粒子,SceneKit使用包含粒子系统的节点的categoryBitMask属性执行相同的检查。

     

使用此属性创建仅影响场景中某些物体的字段。减少受场影响的物体数量也可以提高仿真性能。

我创建了一个简单的场景文件,其中包含:

  • 线性重力场。节点检查器中的类别位掩码设置为2。
  • 一个节点。节点检查器中的类别位掩码设置为4。
  • 上述节点内部的球形粒子系统。受“物理场影响”选项已选中。节点检查器中位于1处的类别位掩码。

我将类别位掩码设置为什么都没有关系。物理场始终与粒子系统相互作用。我还尝试过在Playground中以编程方式将位掩码设置为一个单独的文件,其中包含3个粒子系统,每个系统只有一个字段,没有运气。使用:

let effect1Mask = 0x1 << 1
let effect2Mask = 0x1 << 2
let effect3Mask = 0x1 << 3

1 个答案:

答案 0 :(得分:0)

我发现无法在场景图构建器内的物理字段上设置类别位掩码,它没有公开。必须以编程方式设置。我在物理场节点上设置了遮罩,因此为什么它不起作用。