unsafe public void CreateAttachmentPointFromHead(Vector3 frozenPosition, out AnchorId anchorId, out Vector3 locationFromAnchor)
        {
            FrozenWorld_AttachmentPoint att;
            FrozenWorld_Vector          v = UtoF(frozenPosition);

            FrozenWorld_Tracking_CreateFromHead(&v, &att);
            checkError();
            anchorId           = (AnchorId)att.anchorId;
            locationFromAnchor = FtoU(att.locationFromAnchor);
        }
        unsafe public Vector3 MoveAttachmentPoint(Vector3 newFrozenLocation, AnchorId anchorId, Vector3 locationFromAnchor)
        {
            FrozenWorld_Vector          targetLocation  = UtoF(newFrozenLocation);
            FrozenWorld_AttachmentPoint attachmentPoint = new FrozenWorld_AttachmentPoint
            {
                anchorId           = (FrozenWorld_AnchorId)anchorId,
                locationFromAnchor = UtoF(locationFromAnchor)
            };

            FrozenWorld_Tracking_Move(&targetLocation, &attachmentPoint);
            checkError();
            return(FtoU(attachmentPoint.locationFromAnchor));
        }
        unsafe public void CreateAttachmentPointFromSpawner(AnchorId contextAnchorId, Vector3 contextLocationFromAnchor, Vector3 frozenPosition,
                                                            out AnchorId anchorId, out Vector3 locationFromAnchor)
        {
            FrozenWorld_AttachmentPoint context = new FrozenWorld_AttachmentPoint
            {
                anchorId           = (FrozenWorld_AnchorId)contextAnchorId,
                locationFromAnchor = UtoF(contextLocationFromAnchor)
            };
            FrozenWorld_AttachmentPoint att;
            FrozenWorld_Vector          v = UtoF(frozenPosition);

            FrozenWorld_Tracking_CreateFromSpawner(&context, &v, &att);
            checkError();
            anchorId           = (AnchorId)att.anchorId;
            locationFromAnchor = FtoU(att.locationFromAnchor);
        }
 private Vector3 FtoU(FrozenWorld_Vector v) => new Vector3(v.x, v.y, v.z);