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

时间:2015-12-31 15:14:02

标签: scenekit scnnode

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

这是我的意思的一个例子: 假设我有一个程序,使用SceneKit渲染分子中的原子。我有用于为我的数据建模的课程MoleculeAtom。然后我使用SceneKit渲染分子。 当我在“场景视图”中单击球体节点时,我需要知道球体所代表的Atom对象(Molecule包含Atoms的数组)

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

我对Cocoa编程非常陌生,我正在寻找方法的正确方向。然后我可以研究实现细节。

2 个答案:

答案 0 :(得分:2)

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

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

命中测试将返回AtomNodes和MoleculeNodes。您可以根据节点的类别,或通过将节点的name设置为" Atom"来过滤该结果。或" Molecule"。如果您希望对所需点击的精确度保持宽松,SCNHitTestBoundingBoxOnlyKey可能会有用。

答案 1 :(得分:0)

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