【发布时间】:2018-07-05 20:16:21
【问题描述】:
我想围绕它的 x 轴旋转一个节点(更具体地说,我想转动一个轮子)。
车轮是汽车的子节点。我在stackoverflow上发现了几个关于这个问题的线程,例如this 但没有一个解决方案对我有用:
我尝试了以下代码:
if let wheel = sceneView.scene.rootNode.childNode(withName: "WheelRearL", recursively: true) {
// also tried:
// wheel.pivot = SCNMatrix4MakeTranslation(0.5, 0.5, 0.5)
let (minVec, maxVec) = (wheel.boundingBox)
wheel.pivot = SCNMatrix4MakeTranslation(-25, (maxVec.y - minVec.y) / 2 + minVec.y, (maxVec.z - minVec.z) / 2 + minVec.z)
}
但是轮子还是绕着整车的中心转。
以下代码用于旋转本身,但应该与我认为的解决方案无关:
let spin = CABasicAnimation.init(keyPath: "rotation")
spin.fromValue = NSValue(scnVector4: SCNVector4(x: 25, y: 0, z: 0, w: 0))
spin.toValue = NSValue(scnVector4: SCNVector4(x:25, y: 0, z: 0, w: Float(CGFloat(2 * M_PI))))
spin.duration = 3
spin.repeatCount = .infinity
let wheel = sceneView.scene.rootNode.childNode(withName: "WheelRearL", recursively: true)
wheel?.addAnimation(spin, forKey: "spin around")
(顺便说一句:我需要更改代码中的枢轴,而无需在 SceneKit 界面构建器中设置额外的容器节点并将其移动到节点中心)
【问题讨论】:
-
检查这个stackoverflow.com/questions/47927620/…也许可以帮助你
-
恐怕这并没有真正的帮助,因为旋转本身是有效的,真正的问题是我相信的支点......
-
尝试使用
SCNAction.rotate(by: value around: SCNVector3Make(1,0 , 0), duration: 0.2)尝试我发布的答案并告诉我,但请试一试
标签: ios swift 3d scenekit arkit