【ARKit】'hitTest(_:types:)' was deprecated in iOS 14.0 対処法


iOS 14.0からhitTest(_:types:)は非推奨になっており、Xcodeから注意された時の対処法

動作環境 バージョン
Xcode 12.1
iOS 14.1
Swift 5


iOS 14.0でhitTest(_:types:)を使用すると、このように注意されます。

・日本語訳
'hitTest(_:types:)' は iOS 14.0では非推奨です。
ARSCVView.raycastQuery(from point: CGPoint, allowing target: ARRaycastQuery.Target, alignment: ARRaycastQuery.TargetAlignment)
こちらを使ってね。

ということです。

hitTest(_:types:)の代わりにraycastQueryを使用

touchesBeganでtouchした座標を取得するコードを例として挙げさせていただきました。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        // タッチした最初の座標を取り出す
        guard let touch = touches.first else { return }

        // タッチで取得した座標をスクリーン座標系に変換
        let touchPosition = touch.location(in: sceneView)

        //これより下がhitTest(_:types:)の代わりのコード
        guard let query = sceneView.raycastQuery(from: touchPosition, allowing: .existingPlaneGeometry, alignment: .any) else { return }
        let results = sceneView.session.raycast(query)
        guard let hitTestResult = results.first else {
            print("no surface found")
            return
        }
        let anchor = ARAnchor(transform: hitTestResult.worldTransform)
        sceneView.session.add(anchor: anchor)
    }



これで意図した動作が出来ました。
間違いやより良い方法がありましたら、優しく指摘していただけると幸いです。

参考

stackoverflow: 'hitTest()' was Depecrated in iOS 14.0