我正在尝试使用 Xamarin 构建一个应用程序,同时将 ARKit 与 Scenekit 结合使用。 ARSession 配置为跟踪水平平面,以及何时找到这样的平面。我想在这样的飞机上画一张自定义图表。物体看起来很好并且位于正确的位置,但它仍然保持旋转状态。当我在测试时绕着物体走动时,它的方向改变为面向我,这是不应该做的。这种情况发生的时间不到一秒钟,然后又变回原来的方向。

在我的委托中找到飞机时触发此方法:

public override void DidAddNode(ISCNSceneRenderer renderer, SCNNode node, ARAnchor anchor) {

    if (anchor.GetType() != typeof(ARPlaneAnchor) || ChartIsPlaced) {
        return;
    }

    var planeAnchor = (ARPlaneAnchor) anchor;
    var chart = new ARChart(createTestData());
    chart = (ARChart) chart.DrawOnPlane(node);
    renderer.PointOfView.Light = chart.AddLightSource();

    node.AddChildNode(chart);
    ChartIsPlaced = true;
}

每当 ARKit 注册足够的点以“看到”锚定平面时,将添加 3D 图表作为该平面节点的子节点。

我见过的几乎所有使用 Xcode 制作的 iOS 样本都没有这个问题,但我似乎无法将其正确地转换为 C#。

我怀疑这与 SceneKit 处理节点及其子节点的方式有关。也许 ARAnchor 节点发生了变化,我的对象(也就是锚节点的子节点)也发生了变化。

它为什么旋转?如何控制这种行为?