swift 如何使用SCNTransaction制作SCNNode.scale的动画

wpx232ag  于 2022-11-28  发布在  Swift
关注(0)|答案(1)|浏览(131)
let balloon: SCNNode

SCNTransaction.begin()
SCNTransaction.animationDuration = 4
SCNTransaction.animationTimingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.linear)
balloon.scale.x = 2.28
balloon.scale.y = 2.28
balloon.scale.z = 2.28
// or balloon.scale = SCNVector3(2.28, 2.28, 2.28)
SCNTransaction.commit()

上述内容不会设置动画。Docs表示.scale是可设置动画的,但会立即应用新的比例。
我对材质的漫反射颜色也有同样的问题。
以下作品:

balloon.runAction(SCNAction.scale(to: 2.28, duration: 4), forKey: "scale")
DispatchQueue.main.asyncAfter(deadline: .now() + 1) { [self] in
    balloon.removeAction(forKey: "scale")
}

但是有时候我更喜欢SCNTransaction,因为只需设置一个新值(直接或通过另一个动画)就可以替换或停止动画,而不必像.removeAnimation那样显式地停止它,还因为它的主要功能是原子性。
我错过了什么?

1sbrub3j

1sbrub3j1#

可能是节点的物理体阻止了SCNTransaction按预期运行。我记得这是设计使然。物理体不能缩放。可以选择临时删除物理体,并在SCNTransaction完成后重新应用它。

相关问题