我有一个项目,将游戏对象放置在用户触摸屏幕的位置。这样制作锚点:
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上测试代码时,在多次触摸屏幕后,所有锚点仍然保留。这是销毁锚的正确方法吗?
答案 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);