所以我试图理解allowCameraControl是如何工作的。
我有一个场景,我设置了allowsCameraControl = true。当我平移并且场景旋转或翻译(两根手指......)时,我不明白场景套件对我来说真的有什么变化。
我期待相机节点改变位置或旋转。不是这样的。 我还记录了场景的rootNode的位置和旋转......没有变化。
所以只是要清楚,在渲染委托调用每一帧更新时,我记录了我为场景设置的摄像机节点的位置和旋转,我记录了根节点的位置和旋转,我也记录了te我添加到场景中的节点的位置和旋转。这些都没有显示位置和/或旋转的任何变化。
有人可以向我解释当场景使用标准相机控件旋转或平移时场景套件会发生什么变化吗?
答案 0 :(得分:4)
确实创建了一个新相机,原始相机保持不变。场景图也没有变化。新相机不是场景图的一部分,可以使用 scnView.pointOfView
答案 1 :(得分:3)
创建一个新相机,保持原始相机不变。
如果您使用showsStatistics
属性显示检查器,您会注意到从您拥有的相机(即使它是"无标题")到{{}的观点变化1}}。
遗憾的是,没有太多关于此行为的文档,但您可以在节点层次结构中找到它。
让我们知道您的发现!
答案 2 :(得分:1)
只是偶然发现了一种简单的方法来检测SceneKit使用KVO切换新相机的时刻。
在您的课程中声明一个观察者属性:
var povObserver: NSKeyValueObservation?
然后,设置观察者:
povObserver = defaultCameraController.observe(\.pointOfView, options: [.new]) { (cameraController, change) in
if let newPov = cameraController.pointOfView {
// Access new camera here
}
}
完成后,您可以将povObserver
设置为nil