问题描述
如何隐藏多边形的可视化?
我使用以下方法,但仍然失败。
// Get the first Mesh Observer available,generally we have only one registered
var observer = CoreServices.GetSpatialAwarenessSystemDataProvider<IMixedRealitySpatialAwarenessMeshObserver>();
// Set to not visible
observer.DisplayOption = SpatialAwarenessMeshDisplayOptions.None;
解决方法
我查看了一个旧项目,在其中启用和禁用了空间映射。我猜您必须在更改DisplayOption
之后恢复观察者。那就是我的做法:
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();
Debug.Log("Spatial map system was disabled.");
}
} // 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;
}
}
}
}
private IMixedRealitySpatialAwarenessSystem SpatialAwarenessSystem
{
get
{
if (_spatialAwarenessSystem == null)
{
MixedRealityServiceRegistry.TryGetService<IMixedRealitySpatialAwarenessSystem>(out _spatialAwarenessSystem);
}
return _spatialAwarenessSystem;
}
}