SceneKit:将节点与模型对象相关联

SceneKit: Associating Nodes with Model Objects

我需要将 SceneKit Node 对象与程序中的任意对象相关联,并且正在寻找最佳解决方案。

这是我的意思的一个例子: 假设我有一个程序可以使用 SceneKit 渲染分子中的原子。我有 类 MoleculeAtom 来模拟我的数据。然后我使用 SceneKit 渲染分子。 当我点击 Scene View 中的球体节点时,我需要知道球体代表哪个 Atom 对象(Molecule 包含一个 Atoms 的数组)

我可以创建一个字典,将 Node 映射到 Atom 对象,但想知道是否有办法将 Atom 对象引用添加到球体节点。应该使用键值绑定吗?

我是 Cocoa 编程的新手,正在寻找一种方法的正确方向的推动力。然后我可以研究实施细节。

从几个不同的 SCNNode 子 class 开始怎么样?第一个用于您的原子,第二个用于您的分子。每个 MoleculeNode 都有一个或多个 AtomNode 作为子节点。 AtomNode 和 MoleculeNode 对它们所代表的 Atom 或 Molecule 有弱引用。

现在您可以轻松移动或旋转 MoleculeNode,所有 AtomNode 都会随之移动。每个 AtomNode 的几何形状将保持固定,相对于父 MoleculeNode。

命中测试将 return 原子节点和分子节点。如果需要,您可以通过节点的 class 或通过将节点的 name 设置为 "Atom" 或 "Molecule" 来过滤该结果。 SCNHitTestBoundingBoxOnlyKey 如果您想对所需的点击精度不严格,那么 SCNHitTestBoundingBoxOnlyKey 可能会有用。

作为一个小的替代方案,您可以 MapSCNNodeModelObject