在我的项目中,我使用一个启用和禁用空间映射/感知的按钮。在10次中的7次中,它的效果非常好。在其他3次中,可以观察到以下行为。通过禁用空间贴图网格(多边形),它们会消失到90%。但是10%会留在原地。重复按我的按钮(禁用/启用空间贴图)无济于事,仅保留10%。有什么建议导致这种行为的原因是什么?
代码观察者:
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;
}
}
空间映射的代码集可视化:
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;
}
}
}
}
编辑: 错误Report on Github。
答案 0 :(得分:1)
这似乎是一种竞争条件,其中网格检测到的逻辑不遵守观察者的状态(暂停或恢复)。感谢您的问题@Perazim!
答案 1 :(得分:1)
我也遇到了这个问题。在MRTK中修复此问题之前,您可以对其进行修补。
编辑此文件:
MixedRealityToolkit.Providers \ WindowsMixedReality \ WindowsMixedRealitySpatialMeshObserver.cs
找到暂停功能,然后在//开始补丁和//结束补丁之间添加代码:
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
}