SceneKit 是否有一种本地方法可以在 SCNView 内的给定位置(例如(0,0,0))查找节点?
假设一个 SCNView 包含一个 SCNNode,它充当其他 SCNNode 的层。是否有一种本地方法可以找到层内特定位置的所有节点?
阅读类文档,似乎唯一的选择是创建和维护自定义数据结构映射位置到节点。
但希望有一些原生的东西,因为这似乎是一个常见的问题。
如果需要自定义数据结构,字典是在 Swift 中维护 10K 节点上的选项卡的最有效方法吗?
SceneKit 是否有一种本地方法可以在 SCNView 内的给定位置(例如(0,0,0))查找节点?
假设一个 SCNView 包含一个 SCNNode,它充当其他 SCNNode 的层。是否有一种本地方法可以找到层内特定位置的所有节点?
阅读类文档,似乎唯一的选择是创建和维护自定义数据结构映射位置到节点。
但希望有一些原生的东西,因为这似乎是一个常见的问题。
如果需要自定义数据结构,字典是在 Swift 中维护 10K 节点上的选项卡的最有效方法吗?
节点符合SCNBoundingVolume
,因此您可以大致了解节点是否“包含”原点。您还可以使用-[SCNNode
- hitTestWithSegmentFromPoint:toPoint:options:]
不同的选项来优化您的搜索。
虽然我从未尝试过,但看起来 SCNPhysicsWorld 可以帮助您做到这一点。您需要在要跟踪或查询的每个节点上都有一个物理体。
您可以在目标点放置一个不可见的主体,然后等待碰撞委托回调。
还有convexSweepTestWithShape(_ shape: SCNPhysicsShape,
fromTransform from: SCNMatrix4,
toTransform to: SCNMatrix4,
options options: [String : AnyObject]?) -> [SCNPhysicsContact]
。
另一种方法是使用 SCNSceneRenderer 的nodesInsideFrustumWithPointOfView
函数和正交 SCNCamera,这样您就可以获得矩形或立方体截头体。
一般来说,使用 SceneKit,顺便说一句,检查所有适用的协议参考。许多常见的调用是基于协议而不是类。