【发布时间】:2018-12-29 07:05:45
【问题描述】:
我目前正在使用 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;
}
除了只是跟随船,当你改变方向时,它会添加一些漂亮的偏移运动,以获得一个漂亮的流体相机。
我面临的问题是船在很长一段时间内来回出现故障,它总是朝着正确的方向移动,但看起来船的位置似乎正在重置几帧。您可以通过this video 看到这一点。
如果没有相机跟随代码,船的移动会更加顺畅,正如您在 this video 中看到的那样
任何人都可以看到我的代码可能效率低下的任何问题吗?也许有更优化的方法来做到这一点?非常感谢任何提示/资源/建议!
【问题讨论】: