我需要将SceneKit Node对象与程序中的任意对象相关联,并且正在寻找最佳解决方案。
这是我的意思的一个例子:
假设我有一个程序,使用SceneKit渲染分子中的原子。我有用于为我的数据建模的课程Molecule
和Atom
。然后我使用SceneKit渲染分子。
当我在“场景视图”中单击球体节点时,我需要知道球体所代表的Atom
对象(Molecule
包含Atoms
的数组)
我可以创建一个将Node
映射到Atom
对象的Dictionary,但想知道是否有办法将Atom
对象引用添加到sphere节点。应该使用键值绑定吗?
我对Cocoa编程非常陌生,我正在寻找方法的正确方向。然后我可以研究实现细节。
答案 0 :(得分:2)
从几个不同的SCNNode
子类开始怎么样?第一个是你的Atom,第二个是你的Molecule。每个MoleculeNode都有一个或多个AtomNodes作为子节点。 AtomNode和MoleculeNode对它们所代表的Atom或Molecule有弱引用。
现在您可以轻松移动或旋转MoleculeNode,并且所有AtomNode都将随之移动。相对于父MoleculeNode,每个AtomNode的几何体将保持固定。
命中测试将返回AtomNodes和MoleculeNodes。您可以根据节点的类别,或通过将节点的name
设置为" Atom"来过滤该结果。或" Molecule"。如果您希望对所需点击的精确度保持宽松,SCNHitTestBoundingBoxOnlyKey
可能会有用。
答案 1 :(得分:0)
作为一个小的替代方案,您可以Map
从SCNNode
到ModelObject
。