镜头跟随飞船快速抖动的运动



我目前正在与swift一起在scenekit开发一款游戏,我有一艘宇宙飞船在四处飞行。我使用以下代码使相机跟随宇宙飞船:

func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
updateCameraPosition()
}
func updateCameraPosition () {
let currentPosition = player.node.presentation.position
let x: Float = lerp(a: Float(prevCameraPosition.x), b: currentPosition.x, t: 0.03)
let z: Float = lerp(a: Float(prevCameraPosition.z), b: currentPosition.z, t: 0.03) + (cameraZoom/2)
let vector = SCNVector3(x: x, y: cameraZoom, z: z)
cameraNode.runAction(SCNAction.move(to: vector, duration: 0.2))
prevCameraPosition = currentPosition
}
func lerp (a: Float, b: Float, t: Float) -> Float {
return (1 - t) * a + t * b;
}

除了跟随飞船,当你为一个漂亮的流体相机改变方向时,它还增加了一些不错的偏移运动。

我面临的问题是,飞船在很大一部分时间里来回出现故障,它总是朝着正确的方向移动,但看起来飞船的位置几乎要重置几帧。你可以在这个视频中看到这一点。

如果没有摄像头跟随代码,船的移动会更加平稳,正如你在这个视频中看到的那样

有人能看到我的代码中有什么可能效率低下的错误吗?也许有一种更优化的方法可以做到这一点?任何提示/资源/建议都将不胜感激!

在应用新的SCNAction之前,您需要停止上一个SCNAction。

要使用密钥添加操作,请使用

cameraNode.runAction(SCNAction, forKey: String)

方法。

现在您可以通过该键删除特定操作

cameraNode.removeAction(forKey: String)

最新更新