Hello there, I created an AR App that plays a video on a particular image anchor. I wanted to extend that application to deal with more than 1 image. Now when I scan 1st image it plays the video, and when I scan the 2nd image it plays another video. The Problem that occurs here is both videos are playing simultaneously.
The Code:
func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
let node = SCNNode()
if let imageAnchor = anchor as? ARImageAnchor {
//below code needs to be duplicated in order to add more news
if imageAnchor.referenceImage.name == "harrypotter" {
let videoNode = SKVideoNode(fileNamed: "harrypotter.mp4")
videoNode.play()
let videoScene = SKScene(size: CGSize(width: 480, height: 360))
videoNode.position = CGPoint(x: videoScene.size.width / 2, y: videoScene.size.height / 2)
videoNode.yScale = -1.0
videoScene.addChild(videoNode)
let plane = SCNPlane(width: imageAnchor.referenceImage.physicalSize.width, height: imageAnchor.referenceImage.physicalSize.height)
plane.firstMaterial?.diffuse.contents = videoScene
let planeNode = SCNNode(geometry: plane)
planeNode.eulerAngles.x = -.pi / 2
node.addChildNode(planeNode)
}
if imageAnchor.referenceImage.name == "deatheater" {
let videoNode = SKVideoNode(fileNamed: "deatheater.mp4")
videoNode.play()
let videoScene = SKScene(size: CGSize(width: 480, height: 360))
videoNode.position = CGPoint(x: videoScene.size.width / 2, y: videoScene.size.height / 2)
videoNode.yScale = -1.0
videoScene.addChild(videoNode)
let plane = SCNPlane(width: imageAnchor.referenceImage.physicalSize.width, height: imageAnchor.referenceImage.physicalSize.height)
plane.firstMaterial?.diffuse.contents = videoScene
let planeNode = SCNNode(geometry: plane)
planeNode.eulerAngles.x = -.pi / 2
node.addChildNode(planeNode)
}
found the solution
func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? { let node = SCNNode() if let imageAnchor = anchor as? ARImageAnchor { let videos = ["harrypotter": "harrypotter.mp4", "deatheater": "deatheater.mp4"] if let videoName = videos[imageAnchor.referenceImage.name!] { if let currentVideoNode = currentVideoNode { currentVideoNode.pause() currentVideoNode.removeFromParent() } let videoNode = SKVideoNode(fileNamed: videoName) videoNode.play() currentVideoNode = videoNode let videoScene = SKScene(size: CGSize(width: 480, height: 360)) videoNode.position = CGPoint(x: videoScene.size.width / 2, y: videoScene.size.height / 2) videoNode.yScale = -1.0 videoScene.addChild(videoNode) let plane = SCNPlane(width: imageAnchor.referenceImage.physicalSize.width, height: imageAnchor.referenceImage.physicalSize.height) plane.firstMaterial?.diffuse.contents = videoScene let planeNode = SCNNode(geometry: plane) planeNode.eulerAngles.x = -.pi / 2 node.addChildNode(planeNode) } } return node } }