我想在Scenekit中的z轴自动移动相机。我在Swift中编写了这段代码:
func renderer(_ renderer: SCNSceneRenderer,
updateAtTime time: TimeInterval) {
cameraNode.position.z = cameraNode.position.z + 2
}
此功能仅适用于3帧,之后相机不再移动。有人可以给我正确的代码,以便相机每帧自动移动吗?
答案 0 :(得分:0)
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)
如果需要停止,这也可以使您的相机更容易控制,如果没有必要,它也不会强制渲染。