IOS ARKit Swift 当我移动时如何获得我和 SCNNode 之间的距离

IOS ARKit Swift how can I get distance between me and a SCNNode when I move

我有一个 ARkit 问题,我使用 ARWorldTrackingConfiguration,当我有一个 SCNNode 离我一米远时,当我使用 Iphone X 并移动到 SCNNode 时,我的相机 SCNNode 的 Z 位置更新我知道我离节点更近了,但是对于其他 Iphones (Iphone 8) 我没有得到 Z 位置的更新。

还有 GPS,即使有 kCLLocationAccuracyBestForNavigation,我也没有准确度。

我怎么知道我离SCNNode更近了??谢谢

在您的 ViewController 中实施 ARSCNViewDelegate,它将每帧调用一次 renderer:updateAtTime 回调。 在此函数中,您可以获得相机相对于现实世界调用 sceneView.session.currentFrame.camera.transform 的位置,即 simd_float4x4。您可以使用 transform.columns.3 访问相机的当前位置,并从中查看 x、y、z 字段。使用这些坐标,您可以计算距离,例如使用这些函数的欧几里德距离

func distanceTravelled(xDist:Float, yDist:Float, zDist:Float) -> Float{
    return sqrt((xDist*xDist)+(yDist*yDist)+(zDist*zDist))
}

func distanceTravelled(between v1:SCNVector3,and v2:SCNVector3) -> Float{

    let xDist = v1.x - v2.x
    let yDist = v1.y - v2.y
    let zDist = v1.z - v2.z

    return distanceTravelled(xDist: xDist, yDist: yDist, zDist: zDist)
}

记得将节点的坐标转换为worldCoordinates -> node.worldPosition with node an instance of SCNNode