[英]Chase camera in SceneKit
假設我有一個節點,它是一個多維數據集,並且正在場景中移動它,那么如何在框后跟隨攝像機?
我知道這里有SCNLookAtConstraint
,但我追求的是一台追逐相機。 實際上會改變其位置的位置,以使其附着在節點后面。
我沒有找到任何示例代碼來顯示實現此目標的方法,有人有什么想法嗎?
不能將相機節點設為Box節點的子節點嗎?
這里已經有很多好主意。 :)這是第三個(和第四個?)選項:在iOS 11(和macOS 10.13等)中,有更多的SCNConstraint
類型可用,因此您可以輕松地將它們鏈接在一起以實現各種樣式的“追逐相機”行為。
您可以在SceneKit的WWDC17演講中看到有關此內容的更多信息和一些示例:
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.