通过将基数保持在相同的y来为SCNBox高度设置动画

zum*_*zum 3 scenekit swift

我有一个SCNBox对象通过SCNNode添加到SCNScene ...

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)
Run Code Online (Sandbox Code Playgroud)

我的问题是我如何设置高度的动画(假设为40),同时盒子也不会向下生长?

我想我需要更改枢轴点以进入框的底部?

如果这是一个解决方案,我不知道如何做到这一点.

我该怎么做才能正确?

ric*_*ter 6

是的,你是正确的,pivot你需要改变.枢轴是一个变换 - 意味着它可以包含缩放和旋转以设置节点的"基本"方向 - 但您只需要一个翻译.要将框固定在底部,请将枢轴转换为框高度的一半:

boxNode.pivot = SCNMatrix4MakeTranslation(0, -(box.height/2), 0)
Run Code Online (Sandbox Code Playgroud)

但是,如果你改变高度,这还不足以保持锚定 - 枢轴将保持在高度的一半,所以你的盒子仍将在两个方向上增长.所以你需要在动画时更改枢轴和高度:

SCNTransaction.begin()
SCNTransaction.setAnimationDuration(5)
box.height = 20
boxNode.pivot = SCNMatrix4MakeTranslation(0, -(box.height/2), 0) // new height
SCNTransaction.commit()
Run Code Online (Sandbox Code Playgroud)

既然你都动画box.heightboxNode.pivot在一起,它会留在通过动画底部锚定.