首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MRTK V2 -空间感知网格的可视化工作不正常

MRTK V2 -空间感知网格的可视化工作不正常
EN

Stack Overflow用户
提问于 2019-10-30 15:10:09
回答 2查看 995关注 0票数 0

在我的项目中,我使用了一个启用和禁用空间映射/感知的按钮。它的效果相当好,在每10次中有7次,在其他3次中可以观察到以下行为。通过禁用空间地图网格(多边形),它们将消失到90%。但10%保持在原处。重复按下我的按钮(dis/启用空间映射)没有帮助,10%只是停留。有什么建议可以解释这种行为吗?

代码观察者:

代码语言:javascript
复制
public void ToggleObservers()
{
    if (SpatialAwarenessSystem == null) return;

    // If running → stop "running"
    if (_isObserverRunning)
    {
        SetVisualizationOfSpatialMapping(SpatialAwarenessMeshDisplayOptions.None);
        SpatialAwarenessSystem.SuspendObservers();
        _isObserverRunning = false;

        // Disabling the whole system boosts performance ~+5fps
        if (ShouldSpatialSystemBeDisabled)
            SpatialAwarenessSystem.Disable();

    }// Else start spatial mapping
    else
    {
        SpatialAwarenessSystem.Enable();
        SetVisualizationOfSpatialMapping(SpatialAwarenessMeshDisplayOptions.Visible);
        SpatialAwarenessSystem.ResumeObservers();
        _isObserverRunning = true;
    }
}

代码集空间映射可视化:

代码语言:javascript
复制
public void SetVisualizationOfSpatialMapping(SpatialAwarenessMeshDisplayOptions option)
{
    if (CoreServices.SpatialAwarenessSystem is IMixedRealityDataProviderAccess provider)
    {
        foreach (var observer in provider.GetDataProviders())
        {
            if (observer is IMixedRealitySpatialAwarenessMeshObserver meshObs)
            {
                meshObs.DisplayOption = option;
            }
        }
    }
}

编辑: Bug 关于Github的报告.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-10 18:40:17

我也谈到了这个问题。在MRTK中修复之前,您可以对此进行修补。

编辑此文件:

MixedRealityToolkit.Providers\WindowsMixedReality\WindowsMixedRealitySpatialMeshObserver.cs

查找挂起函数,并在// Begin修补程序和// End修补程序之间添加代码:

代码语言:javascript
复制
public override void Suspend()
{
    #if UNITY_WSA
    if (!IsRunning)
    {
        Debug.LogWarning("The Windows Mixed Reality spatial observer is currently stopped.");
        return;
    }

    // UpdateObserver keys off of this value to stop observing.
    IsRunning = false;

    // Clear any pending work.
    meshWorkQueue.Clear();

    // Begin Patch
    if (outstandingMeshObject != null)
    {
        ReclaimMeshObject(outstandingMeshObject);
        outstandingMeshObject = null;
    }
    // End Patch
    #endif // UNITY_WSA
}
票数 1
EN

Stack Overflow用户

发布于 2019-11-05 16:26:57

这似乎是一种竞赛条件,其中网格检测到的逻辑不符合观察者的状态(暂停或恢复)。谢谢你的问题@Perazim!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58628429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档