前提・実現したいこと
ARアプリの開発をしております。
やりたいことは、タップした画面に文字を表示するといういうものです。
コードを記述したのですが、文字が表示されません。
色々なWebサイトを調べ、その通りに記述しているのですが
うまくいかず困っています。(エラーも出ません)
どなたかアドバイスいただければと思います。
よろしくお願い致します。
該当のソースコード
import Foundation import UIKit import ARKit import SceneKit class ViewController: UIViewController{ @IBOutlet weak var sceneView: ARSCNView! override func viewDidLoad() { super.viewDidLoad() sceneView.delegate = self sceneView.showsStatistics = true } //アプリが表示される直前に呼ばれる override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) //設定のインスタンスを作成 let configuration = ARWorldTrackingConfiguration() //以下よく使用する設定内容 configuration.planeDetection = [.horizontal,.vertical] //-> 水平面、垂直面どちらも認識する // ARKitの起動 sceneView.session.run(configuration) } //隠れる直前に呼ばれる override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) // ARKitの停止 sceneView.session.pause() } //タッチしたら呼ばれる override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { print("touch start") let txt = SCNText(string:"文字を設置", extrusionDepth: 1) let textNode = SCNNode(geometry: txt) textNode.scale = SCNVector3(0.2, 0.2, 0.2) //カメラの座標系で30㎝前 let infrontCamera = SCNVector3Make(0, 0, -0.3) //カメラのノード guard let cameraNode = sceneView.pointOfView else { return } //ワールド座標系に変換 let pointInWorld = cameraNode.convertPosition(infrontCamera, to: nil) //スクリーン座標系へ変換 var screenPosition = sceneView.projectPoint(pointInWorld) //スクリーン座標系 //タップした位置の座標を取得する (guardを使用することで、万が一取得できなくてもクラッシュしない) guard let location : CGPoint = touches.first?.location(in: sceneView) else{ return } screenPosition.x = Float(location.x) screenPosition.y = Float(location.y) //スクリーン座標系からワールド座標系へ let finalPostion = sceneView.unprojectPoint(screenPosition) //カメラアングルをオイラーアングルと一致させる textNode.eulerAngles = cameraNode.eulerAngles textNode.position = finalPostion sceneView.scene.rootNode.addChildNode(textNode) } func session(_ session: ARSession, didFailWithError error: Error) { // Present an error message to the user } func sessionWasInterrupted(_ session: ARSession) { // Inform the user that the session has been interrupted, for example, by presenting an overlay } func sessionInterruptionEnded(_ session: ARSession) { // Reset tracking and/or remove existing anchors if consistent tracking is required } } //ARSCNViewDelegate extension ViewController : ARSCNViewDelegate{ func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) { print("anchor add") if anchor is ARPlaneAnchor{ print("!!plane anchor!!") } } }
補足情報(FW/ツールのバージョンなど)
Swift 5.0.1
Xcode 10.2.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。