Swift 通过将底部保持在同一y轴上来设置SCNBox高度的动画
我有一个通过SCNNode添加到SCNScene的SCNBox对象Swift 通过将底部保持在同一y轴上来设置SCNBox高度的动画,swift,scenekit,Swift,Scenekit,我有一个通过SCNNode添加到SCNScene的SCNBox对象 let box:SCNBox = SCNBox(width: 4, height: 4, length: 4, chamferRadius: 0.1) box.firstMaterial?.diffuse.contents = UIColor.greenColor() let boxNode:SCNNode = SCNNode(geometry: box) boxNode.position = SCNVector3(x: 2,
let box:SCNBox = SCNBox(width: 4, height: 4, length: 4, chamferRadius: 0.1)
box.firstMaterial?.diffuse.contents = UIColor.greenColor()
let boxNode:SCNNode = SCNNode(geometry: box)
boxNode.position = SCNVector3(x: 2, y: 2, z: 2)
scene.rootNode.addChildNode(boxNode)
我的问题是,如何设置高度的动画(假设为40),同时使长方体不会向下生长
我想我需要改变轴心点到盒子底部
如果这是一个解决方案,我不知道如何做到这一点
如何才能正确执行此操作?是的,您的回答是正确的,即您需要更改的内容。轴是一个变换-这意味着它可以包含用于设置节点“基本”方向的缩放和旋转-但您只需要一个平移。要将长方体固定在底部,请将轴平移到长方体高度的一半:
boxNode.pivot = SCNMatrix4MakeTranslation(0, -(box.height/2), 0)
但是,如果更改高度,这还不足以使其保持锚定状态-轴将保持旧高度的一半,因此长方体仍将在两个方向上增长。因此,在设置动画时,您需要更改轴和高度:
SCNTransaction.begin()
SCNTransaction.setAnimationDuration(5)
box.height = 20
boxNode.pivot = SCNMatrix4MakeTranslation(0, -(box.height/2), 0) // new height
SCNTransaction.commit()
由于同时设置了box.height
和boxNode.pivot
的动画,因此在整个动画过程中,它将固定在底部