我正在尝试使用Unity实现iOS的Azure Spatial Anchors应用程序。可悲的是,重新定位锚的精确度还远远不够,而且确实不一致。当我放置并锚定并尝试将其从与放置它的位置完全相同的位置重新放置时,它要么根本找不到锚,要么将其放置在距我最初放置的位置几米的地方。这也不是完全一致的,每次尝试从同一设备上的相同位置定位相同的锚都会给我不同的结果(或者就是找不到)。
几天来我一直在尝试解决此问题,但是我不知道该怎么办。我试图用示例项目中的代码,不同的位置,不同的照明条件替换我自己的代码。没有什么能真正给我带来一致的体验。似乎没有大量文档或背后的庞大社区,因此我找不到其他人遇到该问题。所以现在我不确定是什么问题:我的代码或只是空间锚仍然在处理。至少在主题演讲中,他们谈到了这项服务非常准确,并举例说明了这项服务运作得很好。
就像我说的那样,我使用的代码确实接近示例项目。
首先,用户扫描环境,直到其“ RecommendedForCreateProgress”为100%。然后,他可以放置对象,更改其比例并将其保存到SpatialAnchors服务中。
//...
//Placing/ Moving the anchor
if (localAnchor == null)
{
localAnchor = Instantiate(testPrefab, hitPosition, rotation);
localAnchor.AddARAnchor();
}
else
{
localAnchor.RemoveARAnchor();
localAnchor.transform.position = hitPosition;
localAnchor.transform.rotation = rotation;
localAnchor.AddARAnchor();
}
//...
//...
//Saving the anchor and its properties
Vector3 localScale = localAnchor.transform.localScale;
CloudSpatialAnchor cloudAnchor = new CloudSpatialAnchor();
cloudAnchor.AppProperties[@"scaleX"] = localScale.x.ToString();
cloudAnchor.AppProperties[@"scaleY"] = localScale.y.ToString();
cloudAnchor.LocalAnchor = localAnchor.GetNativeAnchorPointer();
await this.cloudSession.CreateAnchorAsync(cloudAnchor);
此后,将ID保存在数据库中。 我用GPS位置检查用户是否在CloudAnchor附近,然后创建观察者。当观察者找到锚点时,我便得到了位置和旋转并在那里实例化了我的对象。
private void AnchorLocated(AnchorLocatedEventArgs args){
//...
Pose anchorPose = args.Anchor.GetAnchorPose();
CreateGameObject(anchorPose.position, anchorPose.rotation, args.Anchor);
//...
}
private void CreateGameObject(){
GameObject anchorObject = Instantiate(anchorPrefab, position, rotation);
anchorObject.AddARAnchor();
//scaling object
}
缩放对象没有任何区别,即使我不使用它也仍然不准确。 我一直试图使误差仅在厘米而不是米的范围内。 将pointcloud设置为200%也没有太大的区别。在这一点上,我真的不知道该如何继续,帮助将不胜感激。