{"id":1306,"date":"2017-11-24T15:16:49","date_gmt":"2017-11-24T06:16:49","guid":{"rendered":"http:\/\/blue-bear.jp\/kb\/?p=1306"},"modified":"2017-11-24T15:16:49","modified_gmt":"2017-11-24T06:16:49","slug":"arkit-how-to-keep-scnnode-on-ar-world-even-if-didremove-method-called","status":"publish","type":"post","link":"https:\/\/blue-bear.jp\/kb\/arkit-how-to-keep-scnnode-on-ar-world-even-if-didremove-method-called\/","title":{"rendered":"[ARkit] How to keep SCNNode on AR world even if &#8220;didremove&#8221; method called"},"content":{"rendered":"<p>How to put SCNNode on AR world is to add SCNNode on node from didadd method.<\/p>\n<p>but when window would be moved other ViewContoller, didremove method would be called, then remove base AR node from sceneView.<\/p>\n<p>thus all SCNNode on ARnode would be deleted.<\/p>\n<p>How to keep SCNNode on AR world even if &#8220;didremove&#8221; method called, is below<\/p>\n<p>Add SCNNode on sceneview.scene.rootNode, not ARnode.<\/p>\n<p>by that, SCNNode would be retain on scneneView even if &#8220;didremoved&#8221; method called.<\/p>\n<p>however, y axis based on anchor would be different than your image, you should set only y axis by anchor.transform.columns.3.y.<\/p>\n<p>You may use &#8220;anchor.center.x&#8221; and &#8220;anchor.center.z&#8221; as x,z<\/p>\n<pre>\r\n    func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {\r\n        guard let planeAnchor = anchor as? ARPlaneAnchor else { return }\r\n        \r\n        let planeGeometry = SCNBox(width: 1,\r\n                               height: 0.01,\r\n                               length: 1,\r\n                               chamferRadius: 0)\r\n        let planeNode = SCNNode(geometry: planeGeometry)\r\n        \r\n        planeNode.position = SCNVector3Make(anchor.center.x, anchor.transform.columns.3.y, anchor.center.z)\r\n        \r\n        planeNode.physicsBody = SCNPhysicsBody(type: .kinematic,\r\n               shape: SCNPhysicsShape(geometry: planeGeometry,                                            \r\n               options: nil))\r\n        \r\n        \/\/node.addChildNode(planeNode) \/\/You don't need to use this\r\n        sceneView.scene.rootNode.addChildNode(planeNode)\r\n        \r\n    }\r\n\r\n\r\n    func renderer(_ renderer: SCNSceneRenderer, didRemove node: SCNNode, for anchor: ARAnchor) {\r\n        \/\/Nothing to do\r\n\r\n    }\r\n\r\n<\/pre>\n<p>However, when ViewContoller transfer to AR ViewController, SCNNode position is not original one. <\/p>\n<p>You must adjust when ARkit detect floor.<\/p>\n<p>ex : func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>How to put SCNNode o<\/p>\n","protected":false},"author":1,"featured_media":88,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/blue-bear.jp\/kb\/wp-json\/wp\/v2\/posts\/1306"}],"collection":[{"href":"https:\/\/blue-bear.jp\/kb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blue-bear.jp\/kb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blue-bear.jp\/kb\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blue-bear.jp\/kb\/wp-json\/wp\/v2\/comments?post=1306"}],"version-history":[{"count":1,"href":"https:\/\/blue-bear.jp\/kb\/wp-json\/wp\/v2\/posts\/1306\/revisions"}],"predecessor-version":[{"id":1307,"href":"https:\/\/blue-bear.jp\/kb\/wp-json\/wp\/v2\/posts\/1306\/revisions\/1307"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blue-bear.jp\/kb\/wp-json\/wp\/v2\/media\/88"}],"wp:attachment":[{"href":"https:\/\/blue-bear.jp\/kb\/wp-json\/wp\/v2\/media?parent=1306"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blue-bear.jp\/kb\/wp-json\/wp\/v2\/categories?post=1306"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blue-bear.jp\/kb\/wp-json\/wp\/v2\/tags?post=1306"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}