销毁Unity ARCore中的锚点

时间:2018-07-22 16:11:34

标签: unity3d arcore

我有一个项目,将游戏对象放置在用户触摸屏幕的位置。这样制作锚点:

private Anchor anchor;

anchor = detectedPlane.CreateAnchor (new Pose (anchorPosition, Quaternion.identity));

transform.position = anchorPosition;

transform.SetParent (anchor.transform);

在用户第二次或之后多次触摸屏幕创建锚点之前,我确保使用以下代码销毁锚点。

if (anchor != null) {
    Destroy(anchor);
}

但是,当我在Instant Preview上测试代码时,在多次触摸屏幕后,所有锚点仍然保留。这是销毁锚的正确方法吗?

1 个答案:

答案 0 :(得分:0)

Android

如果要从场景中删除AnchorNode,则建议在Android ARCore中使用parent.removeChild(child)或node.setParent(null)。

要使ARCore停止跟踪锚,可以使用yourAnchor.detach()。

更多详细信息-Android ARCore

团结

统一的Trackable类具有创建锚点但不销毁锚点的方法。但是,似乎使用的方法是销毁代表锚点的Unity GameObject。

在此处查看来自Unity ARCore SDK的示例:https://github.com/google-ar/arcore-unity-sdk/blob/9448df3e371e7e04a3e99ed6745890021d8f3e32/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/TranslationManipulator.cs

相关代码的摘录:

            GameObject oldAnchor = transform.parent.gameObject;

            Pose desiredPose = m_LastHit.Pose;

            Vector3 desiredLocalPosition = transform.parent.InverseTransformPoint(desiredPose.position);

            if (desiredLocalPosition.magnitude > MaxTranslationDistance)
            {
                desiredLocalPosition = desiredLocalPosition.normalized * MaxTranslationDistance;
            }

            desiredPose.position = transform.parent.TransformPoint(desiredLocalPosition);

            Anchor newAnchor = m_LastHit.Trackable.CreateAnchor(desiredPose);
            transform.parent = newAnchor.transform;

            Destroy(oldAnchor);