在我的项目中,我使用了一个启用和禁用空间映射/感知的按钮。它的效果相当好,在每10次中有7次,在其他3次中可以观察到以下行为。通过禁用空间地图网格(多边形),它们将消失到90%。但10%保持在原处。重复按下我的按钮(dis/启用空间映射)没有帮助,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;
}
}
}
}编辑: Bug 关于Github的报告.
发布于 2019-12-10 18:40:17
我也谈到了这个问题。在MRTK中修复之前,您可以对此进行修补。
编辑此文件:
MixedRealityToolkit.Providers\WindowsMixedReality\WindowsMixedRealitySpatialMeshObserver.cs
查找挂起函数,并在// Begin修补程序和// End修补程序之间添加代码:
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
}发布于 2019-11-05 16:26:57
这似乎是一种竞赛条件,其中网格检测到的逻辑不符合观察者的状态(暂停或恢复)。谢谢你的问题@Perazim!
https://stackoverflow.com/questions/58628429
复制相似问题