在SceneKit中追逐相机

假设我有一个节点是一个立方体,我正在将它移动到场景中,我怎么能在盒子后面有一个相机?

我知道有SCNLookAtConstraint ,但我所追求的是追逐相机。 一个实际上改变它的位置,以便它附在节点后面。

我还没有find任何示例代码,显示了实现这个方法,有没有人有任何想法?

你不能让你的相机节点的盒子节点的子节点?

在SceneKitVehicle示例代码中有一个与此类似的示例。 相机“拖延”了一下车子。

https://developer.apple.com/library/prerelease/ios/samplecode/SceneKitVehicle/Listings/SceneKitVehicle_AAPLGameViewController_m.html#//apple_ref/doc/uid/TP40014549-SceneKitVehicle_AAPLGameViewController_m-DontLinkElementID_7

它通过计算相机应该基于车辆位置的位置来工作。 然后将当前相机位置插入到目标位置。

这里已经有很多好点子了。 :)下面是第三个(和第四个)选项:在iOS 11(和macOS 10.13等)中,有更多的SCNConstrainttypes可供使用,因此您可以轻松地将它们链接在一起以实现各种样式的“追逐相机”行为。

你可以看到更多关于这个和WWDC17在SceneKit上的几个例子:

  • SCNLookAtConstraint + SCNReplicatorConstraint得到你最近的3D马里奥游戏,其中相机跟随玩家,但其相对于世界的方向不会改变。

  • SCNLookAtConstraint + SCNDistanceConstraint给你更多的“追逐相机”的风格,相机自动转动与播放器。

SCNAccelerationConstraint添加到其中任何一个,都可以通过平滑快速运动并逐渐追赶玩家感觉更加自然。 您还可以添加SCNAvoidOccluderConstraint许多第三方游戏中常见的行为,例如摄像机不会穿墙,避免尝试查看列等。


在iOS 11之前,您可以使用SCNTransformConstraint和一个根据移动立方体的位置来重置相机节点位置的模块。 把它和观察约束结合起来,让相机指向立方体,然后调整每个约束的influenceFactor因子,以获得所需的平滑/滞后程度。