簡體   English   中英

在SceneKit中追逐相機

[英]Chase camera in SceneKit

假設我有一個節點,它是一個多維數據集,並且正在場景中移動它,那么如何在框后跟隨攝像機?

我知道這里有SCNLookAtConstraint ,但我追求的是一台追逐相機。 實際上會改變其位置的位置,以使其附着在節點后面。

我沒有找到任何示例代碼來顯示實現此目標的方法,有人有什么想法嗎?

不能將相機節點設為Box節點的子節點嗎?

這里已經有很多好主意。 :)這是第三個(和第四個?)選項:在iOS 11(和macOS 10.13等)中,有更多的SCNConstraint類型可用,因此您可以輕松地將它們鏈接在一起以實現各種樣式的“追逐相機”行為。

您可以在SceneKitWWDC17演講中看到有關此內容的更多信息和一些示例:

  • SCNLookAtConstraint + SCNReplicatorConstraint您提供類似最近的3D Mario游戲的效果,其中攝像機跟隨玩家,但其相對於世界的方向不變。

  • SCNLookAtConstraint + SCNDistanceConstraint為您提供了更多的“追逐相機”風格,其中相機會隨着播放器自動旋轉。

SCNAccelerationConstraint添加到這兩個SCNAccelerationConstraint ,可以使快速移動變得平穩,並逐漸追趕玩家,從而使其感覺更加自然。 您還可以添加諸如SCNAvoidOccluderConstraint類的SCNAvoidOccluderConstraint ,以實現許多第三人稱游戲常見的行為,其中相機不會穿過牆壁,會避免嘗試穿過一列,等等。


在iOS 11之前,您可以使用SCNTransformConstraint和一個基於移動立方體的位置重置相機節點位置的塊。 再加上一看,在約束保持相機對准了立方體,並調整了influenceFactor每個約束的平滑度/滯后你想要的。

SceneKit Vehicle示例代碼中有一個與此類SceneKit Vehicle示例。 SCNCamera跟隨汽車有些延遲。 看這里

它通過根據車輛的位置計算攝像頭的位置來工作。 然后將當前攝像機位置插值到目標位置。

我比其他建議更喜歡Rickster的方法。

使照相機節點成為盒子節點的子節點可以工作,但是如果旋轉盒子,則照相機將指向一個笨拙的角度。

更干凈的方法:

let distanceConstraint             = SCNDistanceConstraint(target: box)
distanceConstraint.minimumDistance = 55
distanceConstraint.maximumDistance = 60

let lookAtConstraint                 = SCNLookAtConstraint(target: box)
lookAtConstraint.isGimbalLockEnabled = true
cameraNode.constraints               = [lookAtConstraint,distanceConstraint]
scnView.scene?.rootNode.addChildNode(cameraNode)

暫無
暫無

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

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