【问题标题】:Application Suddenly Closed After Anchor Located锚点定位后应用程序突然关闭
【发布时间】:2019-08-21 13:55:02
【问题描述】:

我最近在 Hololens 中开发 Azure Spatial Anchor。从 Microsoft 网站 here 学习本教程后,我调整了一些代码。到目前为止效果很好。直到我试图找到我创建的锚。在找到我的锚点(并实例化定位的锚点)后,我的应用程序突然关闭。它一直到达显示文本“找到!”的部分。这是我找到锚点的部分代码。

    void Update(){
        lock (dispatchQueue)
        {
            if (dispatchQueue.Count > 0)
            {
                dispatchQueue.Dequeue()();
            }
        }

    }

    protected void QueueOnUpdate(Action updateAction)
    {
        lock (dispatchQueue)
        {
            dispatchQueue.Enqueue(updateAction);
        }
    }


    private void CloudSpatialAnchorSession_AnchorLocated(object sender, AnchorLocatedEventArgs args){
        switch (args.Status){
            case LocateAnchorStatus.Located:
                QueueOnUpdate(() =>{
                    var cube = GameObject.Instantiate(cubePrefab) as GameObject;
                    cube.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
                    cube.AddComponent<WorldAnchor>();
                    cube.GetComponent<UnityEngine.XR.WSA.WorldAnchor>().SetNativeSpatialAnchorPtr(args.Anchor.LocalAnchor);
                    cubeMaterial = cube.GetComponent<Renderer>().material;
                    cubeMaterial.color = Color.red;

                    this.cubes.Add(cube);
                    cloudAnchorId = "";
                    this.msg.text = "Found!";
                    Task.Run(async () =>{
                        await Task.Delay(1000);
                    });
                });
                break;
            case LocateAnchorStatus.AlreadyTracked:
                this.msg.text = "ASA Info: Anchor already tracked. Identifier: " + args.Identifier;
                break;
            case LocateAnchorStatus.NotLocated:
                this.msg.text = "ASA Info: Anchor not located. Identifier: " + args.Identifier;
                break;
            case LocateAnchorStatus.NotLocatedAnchorDoesNotExist:
                this.msg.text = "ASA Error: Anchor not located does not exist. Identifier: " + args.Identifier;
                break;
        }
    }
    private void CloudSpatialAnchorSession_LocateAnchorsCompleted(object sender, LocateAnchorsCompletedEventArgs args){
        this.msg.text = "ASA Info: Locate anchors completed. Watcher identifier: " + args.Watcher.Identifier;
        Task.Run(async () =>{
            await Task.Delay(2500);
        });
        args.Watcher.Stop();
    }

我使用了 Azure Spatial Anchor SDK v1.1.0、Unity3D 2019.1.10f 和 Visual Studio 2017。

有人知道原因吗?

【问题讨论】:

  • 出现错误时是否有错误提示?有没有试过将代码恢复到原始状态进行测试?教程的代码中没有太多锚点。应该不会因为创建线程过多而导致游戏崩溃错误,因此无需在循环结束时添加延迟。
  • @Hernando 我是 hololens 的新手,所以我不知道查看错误日志的最佳做法。我发现向 Text GameObject 显示错误日志会导致崩溃,但我不知道为什么。现在,在我注释所有“this.msg.text =”函数中的代码后,我的应用程序运行良好,没有问题。我也曾尝试恢复教程中的原始状态代码,并且在会话开始时显示登录 Text GameObject 后应用程序突然崩溃。
  • 感谢您的意见。这个问题已经解决了。

标签: c# hololens azure-spatial-anchors


【解决方案1】:

由于大多数 Unity Engine API 只能在主线程中调用,因此 UI 更新的更新只能在主线程中进行。

更多信息请见:Thread safety in Unity

【讨论】:

    猜你喜欢
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-26
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多