前提・実現したいこと
お世話になっております。
今回、SwiftのARKitを利用して物体を固定位置に配置ではなく、
アプリ起動時(原点)から移動しても、画面タップ時に物体をカメラ画面の中央に配置させたいと思っています。【画面タップするとカメラの中央に物体が1個表示される】
カメラ画面の中央に、物体を配置させるところは思い通りに動きました。【アプリ起動してから2回めの画面タップ時】
しかし、アプリ起動してから最初に画面タップした時の物体が何故か固定位置に残ったままになってしまいます。【1回めに画面タップしたときに出た物体が、2回め以降画面タップした時も表示されたまま。要するに画面上に物体が2個表示される】
以下は、参考にしたサイトです。
[iOS11][ARKit] オブジェクトの位置と回転「常にこっちを向いている怪獣」
サクッとARkitでミニチュアキズナアイを現実世界に召喚させる
稚拙な文章で申し訳ないのですが、よろしくお願いします。
該当のソースコード
Swift
1 2import UIKit 3import SceneKit 4import ARKit 5 6class MelonIntroduction: UIViewController, ARSCNViewDelegate { 7 8 @IBOutlet var sceneView: ARSCNView! 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 13 sceneView.delegate = self 14 sceneView.showsStatistics = true 15 let scene = SCNScene() 16 sceneView.scene = scene 17 18 } 19 20 //タップ時,アプリが立ち上がったときに表示された場所にobjectがでる. 21 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 22 let scene = SCNScene(named: "art.scnassets/apple.dae")! 23 scene.rootNode.name = "apple" 24 25 scene.rootNode.scale = SCNVector3(0.1, 0.1, 0.1) 26 27 if let camera = sceneView.pointOfView { 28 scene.rootNode.position = SCNVector3(0, 0, -0.5) 29// let applePosition = SCNVector3(0, 0, -0.5) 30 self.sceneView.scene.rootNode.childNode(withName: "apple", recursively: false)?.position = camera.convertPosition(scene.rootNode.position, to: nil) 31// self.sceneView.scene.rootNode.childNode(withName: "apple", recursively: false)?.position = camera.convertPosition(melonPosition, to: nil) 32 } 33 34 sceneView.scene.rootNode.addChildNode(scene.rootNode) 35 } 36 37 38 override func viewWillAppear(_ animated: Bool) { 39 super.viewWillAppear(animated) 40 41 // Create a session configuration 42 let configuration = ARWorldTrackingConfiguration() 43 44 // Run the view's session 45 sceneView.session.run(configuration) 46 } 47 48 override func viewWillDisappear(_ animated: Bool) { 49 super.viewWillDisappear(animated) 50 51 // Pause the view's session 52 sceneView.session.pause() 53 } 54 55 override func didReceiveMemoryWarning() { 56 super.didReceiveMemoryWarning() 57 // Release any cached data, images, etc that aren't in use. 58 } 59 60 // MARK: - ARSCNViewDelegate 61 62/* 63 // Override to create and configure nodes for anchors added to the view's session. 64 func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? { 65 let node = SCNNode() 66 67 return node 68 } 69*/ 70 71 func session(_ session: ARSession, didFailWithError error: Error) { 72 // Present an error message to the user 73 74 } 75 76 func sessionWasInterrupted(_ session: ARSession) { 77 // Inform the user that the session has been interrupted, for example, by presenting an overlay 78 79 } 80 81 func sessionInterruptionEnded(_ session: ARSession) { 82 // Reset tracking and/or remove existing anchors if consistent tracking is required 83 84 } 85} 86
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/23 04:47
2018/08/23 06:19
2018/08/23 09:03