Нажмите местоположение на SCNNode в Arkit IOS SWIFT - PullRequest
0 голосов
/ 25 сентября 2019

Я поместил узел 1 в представление сцены. Я также добавил узел 2 в качестве дочернего узла к узлу 1 при касании на узле 1. Но я не могу правильно разместить узел 2 в месте касания на узле 1. Как я могу разместить его точно в месте касания узла scn вarkit.

Обновлено

Окончательный код

let sceneView = sender.view as! ARSCNView
let tapLocation = sender.location(in: sceneView)
let hitTest = sceneView.hitTest(tapLocation, options: [:])
guard let node = hitTest.first?.node.parent
if let hitTest = hitTest.first
{
    guard let scene = SCNScene(named: "furnitures.scnassets/(furnitureName).scn") else{return}
    let childnode = (scene.rootNode.childNode(withName: furnitureName + " " + "parentnode", recursively: false))!
     node.addChildNode(childnode)
     childnode.position = hitTest.localCoordinates
     childnode.scale = SCNVector3(0.5,0.5,0.5)
 }

Ответы [ 3 ]

0 голосов
/ 25 сентября 2019

Это мой код. Я не знал, как упомянуть в комментариях, поэтому я написал так

let sceneView = sender.view as! ARSCNView
let tapLocation = sender.location(in: sceneView)
let hitTest = sceneView.hitTest(tapLocation, options: [:])
guard let node = hitTest.first?.node
if let hitTest = hitTest.first
{
    guard let scene = SCNScene(named: "furnitures.scnassets/(furnitureName).scn") else{return}
    let childnode = (scene.rootNode.childNode(withName: furnitureName + " " + "parentnode", recursively: false))!
     node.addChildNode(childnode)
     childnode.position = hitTest.localCoordinates
     childnode.scale = SCNVector3(0.5,0.5,0.5)
 }
0 голосов
/ 25 сентября 2019

снимок экрана

Вы можете видеть разницу в размере узла 2, когда его кладете на стул и стол.

0 голосов
/ 25 сентября 2019

Вам нужно использовать SCNHitTestResult localCoordinates или worldCoordinates это зависит от того, какой из них лучше для вашей проблемы, тогда вы можете добавить узел на этой позиции

это примеркод

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    let scnView = self.view as! SCNView
    let touch = touches.first
    if let point = touch?.location(in: scnView) {
        let hitResults = scnView.hitTest(point, options: nil)
        if let result: SCNHitTestResult = hitResults.first {
            let position  = result.localCoordinates
            let position2  = result.worldCoordinates
        }
    }
}
...