使用Swift在Scenekit中移动相机

时间:2018-03-11 18:31:16

标签: swift camera scenekit

我想在Scenekit中的z轴自动移动相机。我在Swift中编写了这段代码:

func renderer(_ renderer: SCNSceneRenderer,
              updateAtTime time: TimeInterval) {
cameraNode.position.z = cameraNode.position.z + 2            
}

此功能仅适用于3帧,之后相机不再移动。有人可以给我正确的代码,以便相机每帧自动移动吗?

1 个答案:

答案 0 :(得分:0)

根据SceneKit documentation

  

SceneKit每帧只调用一次此方法,只要显示场景的SCNView对象(或其他SCNSceneRenderer对象)没有暂停。

如果您的视图中没有其他内容正在移动,则场景将“暂停”并且不会渲染。根据{{​​3}},为了强制每帧渲染,解决方法应该是:

sceneView.loops = true

但是,每帧更新位置不是最佳做法,因为FPS可能会改变,这会影响相机速度。但是,您可以使用SCNAction保持一致的相机速度,而无需使用渲染功能:

let move = SCNAction.moveBy(x: 0, y: 0, z: 120, duration: 1.0)
let moveForever = SCNAction.repeatActionForever(move)
cameraNode.runAction(moveForever)

如果需要停止,这也可以使您的相机更容易控制,如果没有必要,它也不会强制渲染。