実現したいこと
swiftでARアプリを作成中です。
画像認識を行い、その上に2D画像を配置します。その2D画像にリンクを貼り、タップをすることでwebページに飛ばしたいです。
困っていること
2D画像の配置までできました。しかし、その画像にリンクを貼ることができません。タップをしても動きません。
問題かなと想像し、試行錯誤している箇所
if node.name == "route"のroute部分に画像のNameをあてはめているのですが、ここが問題かと推測しています。
img.scnassets/routeに書き換えたりもしたのですが、反応しません。
import UIKit import SceneKit import ARKit import SafariServices class ViewController: UIViewController, ARSCNViewDelegate { @IBOutlet var sceneView: ARSCNView! let referenceImages = ARReferenceImage.referenceImages(inGroupNamed: "AR Resources", bundle: Bundle.main) override func viewDidLoad() { super.viewDidLoad() sceneView.delegate = self let scene = SCNScene() sceneView.scene = scene } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) let configuration = ARImageTrackingConfiguration() configuration.trackingImages = referenceImages! sceneView.session.run(configuration) } 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 = UIImage(named: "img.scnassets/route") let planeNode = SCNNode(geometry: plane) planeNode.eulerAngles.x = -.pi / 2 node.addChildNode(planeNode) } return node } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { guard let location = touches.first?.location(in: sceneView), let result = sceneView.hitTest(location, options: nil).first else { return } let node = result.node if node.name == "route" { let safariVC = SFSafariViewController(url: URL(string: "https://images.google.com/?gws_rd=ssl")!) self.present(safariVC, animated: true, completion: nil) } } }
以上、ご指導をよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー