场景套件,带摄像头的快速飞船抖动运动

时间:2018-07-20 23:27:49

标签: ios 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中所见,没有摄像机的跟踪代码,船的移动更加流畅。

有人可以看到我的代码有什么问题吗,可能效率不高?也许有更优化的方法可以做到这一点?任何技巧/资源/建议都非常有用!

1 个答案:

答案 0 :(得分:0)

您需要先停止先前的SCNAction,然后再应用新的SCNAction。

要使用键添加动作,请使用

cameraNode.runAction(SCNAction, forKey: String)

方法。

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

cameraNode.removeAction(forKey: String)