当 RealityKit 中碰撞框重叠时如何优先考虑特定实体

问题描述 投票:0回答:1

因此,在我的 RealityKit 场景中,我有一个在点击时打开的安全实体,以及位于保险箱内的关键实体。两个实体的碰撞形状都是通过

generateCollisionShapes(recursive: true)
生成的。

重叠实体的图像

我点击打开保险箱后,它的碰撞盒仍然覆盖了其中一把钥匙,阻止后者接收

gesture
事件。

我想知道是否有一种方法可以“优先考虑”关键实体的碰撞,以便即使其碰撞盒被另一个实体的碰撞盒阻挡,它也会响应交互?

我尝试更改加载实体和创建碰撞形状的顺序,但事情保持不变。

swift swiftui realitykit vision-pro
1个回答
0
投票

解决方案A

在适用于 iOS、visionOS 和 macOS 的 RealityKit 中,开发人员使用 CollisionGroupCollisionFilter组合来防止特定模型与不需要的对象发生碰撞。 CollisionGroups 不直接分配给实体,因此 CollisionFilters 定义实体的碰撞属性。定义每个碰撞组的值时,请使用 按位移位 (

<<
)。

let group01 = CollisionGroup(rawValue: 1 << 0)     //  2^0 = 1
let group02 = CollisionGroup(rawValue: 1 << 1)     //  2^1 = 2
let group03 = CollisionGroup(rawValue: 1 << 2)     //  2^2 = 4

Swift 的 按位运算符 应该应用于位移位,以便为每个组创建唯一的索引,其中每个后续索引都比前两个索引的总和大 1。 碰撞位掩码在SceneKit中也广泛使用。

let wizardMask = CollisionGroup.all.subtracting(group01)
let specialFilter = CollisionFilter(group: group01, mask: wizardMask)
myModel.collision?.filter = specialFilter

解决方案B

如果由于某种原因第一个解决方案不适合您,请使用第二个解决方案。为此,创建一个自定义碰撞形状,它根本不会允许发生不需要的碰撞。

© www.soinside.com 2019 - 2024. All rights reserved.