簡體   English   中英

場景套件,帶攝像頭的快速飛船抖動運動

[英]scenekit swift spaceship jittery movement with camera follow

我目前正在迅速開發場景工具包中的游戲,並且有一只飛船在飛來飛去。 我正在使用以下代碼使相機跟隨飛船:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM