我目前正在使用以下内容来获取SCNNode
中所有子节点的总高度。是否有更高效/更好/更短/更快捷的方式来做到这一点?
CGFloat(columnNode.childNodes.reduce(CGFloat()) {
let geometry = $1.geometry! as SCNBox
return $0 + geometry.height
})
答案 0 :(得分:13)
是的,这也是一种能让你得到更正确答案的方法。求和所有子节点几何的高度......
SCNBox
你想要的是SCNBoundingVolume
协议,它适用于所有节点和几何,并描述包含所有节点(及其子节点)内容的最小矩形或球形空间。
在Swift 3中,这非常简单:
let (min, max) = columnNode.boundingBox
在此之后,min
和max
是包含columnNode
内所有内容的最小可能框的左下角和左上角的坐标,无论如何如何安排内容(以及涉及何种几何)。这些坐标在与columnNode.position
相同的系统中表示,因此如果您要查找的“高度”位于该空间的y轴方向,则只需减去这两个向量的y坐标:
let height = max.y - min.y
在Swift 2中,它的语法有点奇怪,但它运作得很好:
var min = SCNVector3Zero
var max = SCNVector3Zero
columnNode.getBoundingBoxMin(&min, max: &max)