Swift 错误 – 试图将父节点添加为子节点
Swift Error – Attempting to add a Parent node as a Child node
我正在努力获取我拥有的 .dae
文件,并在它识别出我在照片中拥有的第一个图像文件后显示它。不幸的是,我收到一个错误,指出父节点被添加为子节点,但我不明白这是在哪里发生的。
有什么想法吗?
import UIKit
import SceneKit
import ARKit
class PlaneTrackingViewController: UIViewController, ARSCNViewDelegate {
@IBOutlet weak var ARPlaneView: ARSCNView!
override func viewDidLoad() {
super.viewDidLoad()
ARPlaneView.delegate = self
let scene = SCNScene(named: "Art.scnassets/LoadScene.scn")!
ARPlaneView.scene = scene
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let configuration = ARImageTrackingConfiguration()
guard let trackedImages = ARReferenceImage.referenceImages(inGroupNamed: "Photos", bundle: Bundle.main) else {print ("No Images Available")
return
}
configuration.trackingImages = trackedImages
configuration.maximumNumberOfTrackedImages = 1
ARPlaneView.session.run(configuration)
}
override func viewWillDisappear(_ animated: Bool) {
ARPlaneView.session.pause()
}
func renderer(_ renderer:SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
let node = SCNNode()
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, alpha: 0.6)
let planeNode = SCNNode(geometry: plane)
planeNode.eulerAngles.x = -.pi / 2
let motorScene = SCNScene(named: "Art.scnassets/ACMotor/ACMotor.dae")!
let motorNode = motorScene.rootNode.childNodes.first!
motorNode.position = SCNVector3Zero
motorNode.position.z = 0.3
motorNode.addChildNode(motorNode)
node.addChildNode(planeNode)
}
return node
}
}
这一行
motorNode.addChildNode(motorNode)
告诉我你正在尝试将 motorNode
添加到 motorNode
,这显然是这里的错误 - 你正在向自身添加一个节点。
It should be written this way: scene.rootNode.addChildNode(node)
或者您的情况:
motorScene.rootNode.addChildNode(motorNode)
我正在努力获取我拥有的 .dae
文件,并在它识别出我在照片中拥有的第一个图像文件后显示它。不幸的是,我收到一个错误,指出父节点被添加为子节点,但我不明白这是在哪里发生的。
有什么想法吗?
import UIKit
import SceneKit
import ARKit
class PlaneTrackingViewController: UIViewController, ARSCNViewDelegate {
@IBOutlet weak var ARPlaneView: ARSCNView!
override func viewDidLoad() {
super.viewDidLoad()
ARPlaneView.delegate = self
let scene = SCNScene(named: "Art.scnassets/LoadScene.scn")!
ARPlaneView.scene = scene
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let configuration = ARImageTrackingConfiguration()
guard let trackedImages = ARReferenceImage.referenceImages(inGroupNamed: "Photos", bundle: Bundle.main) else {print ("No Images Available")
return
}
configuration.trackingImages = trackedImages
configuration.maximumNumberOfTrackedImages = 1
ARPlaneView.session.run(configuration)
}
override func viewWillDisappear(_ animated: Bool) {
ARPlaneView.session.pause()
}
func renderer(_ renderer:SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
let node = SCNNode()
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, alpha: 0.6)
let planeNode = SCNNode(geometry: plane)
planeNode.eulerAngles.x = -.pi / 2
let motorScene = SCNScene(named: "Art.scnassets/ACMotor/ACMotor.dae")!
let motorNode = motorScene.rootNode.childNodes.first!
motorNode.position = SCNVector3Zero
motorNode.position.z = 0.3
motorNode.addChildNode(motorNode)
node.addChildNode(planeNode)
}
return node
}
}
这一行
motorNode.addChildNode(motorNode)
告诉我你正在尝试将 motorNode
添加到 motorNode
,这显然是这里的错误 - 你正在向自身添加一个节点。
It should be written this way:
scene.rootNode.addChildNode(node)
或者您的情况:
motorScene.rootNode.addChildNode(motorNode)