“在另一个场景的渲染回调中修改了场景。”如何解决这个错误?

时间:2018-08-01 01:54:58

标签: swift scenekit arkit

我正在使用ARKit图像跟踪配置,一旦检测到图像,就会在图像上弹出3D场景。

但是当我设置两个不同的图像来触发两个不同的场景文件时,一个图像始终在同一图像上弹出两个不同的场景文件。我很确定图像是不同的,名称是不同的,场景文件是不同的,场景的内容也是不同的。

一旦检测到图像,控制台中还将弹出以下错误消息: [SceneKit]错误:在另一个场景()的渲染回调中修改了场景。这是不允许的,并且可能导致崩溃

此错误的任何原因和解决方案?

非常感谢。

3 个答案:

答案 0 :(得分:1)

在图像跟踪中,ARKit 2出现了相同的错误。经过数小时的尝试,我找到了解决方案。显然,您需要在后台线程中创建节点才能播放场景。这是我的代码:

DispatchQueue.main.async {
        if let imageAnchor = anchor as? ARImageAnchor {

            let plane = SCNPlane(width: imageAnchor.referenceImage.physicalSize.width, height: imageAnchor.referenceImage.physicalSize.height)
            plane.firstMaterial?.diffuse.contents = UIColor(white: 1.0, alpha: 0.5)

            let planeNode = SCNNode(geometry: plane)
            planeNode.eulerAngles.x = -.pi
            node.addChildNode(planeNode)

            ...
        }
    }

答案 1 :(得分:0)

我收到此错误的原因是我正在调用scene.isPaused = false,并且删除该行摆脱了控制台错误。 您是否要对SCNScene进行任何修改?那将是一个开始隔离错误源的好地方。

答案 2 :(得分:0)

如果您按如下所示进行编码,则会弹出错误。

func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
    guard let imageAnchor = anchor as? ARImageAnchor else {
        return nil
    let buttonNode = SCNScene(named: "art.scnassets/social_buttons.scn")!.rootNode.childNode(withName: "card", recursively: false)
}

这是因为您在渲染器方法中调用了新的SCNScene(初始化新的SCNScene)。

viewDidLoad或其他位置初始化SCNScene。 如果是这样,错误可能会消失。