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 はデータベースに保存されます。ユーザーが CloudAnchor の近くにいるかどうかを GPS 位置で確認し、ウォッチャーを作成します。ウォッチャーがアンカーを見つけると、位置と回転を取得し、そこでオブジェクトをインスタンス化します。
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
}
オブジェクトをスケーリングしても違いはありません。使用しなくても、まだ不正確です。私は不正確さを取得しようとしてきましたが、メートルではなくセンチメートルの範囲にすぎません。ポイントクラウドを 200% にしても、大きな違いはありません。