对于新的MRTK2,我希望在完成将其放置到GameObjects后禁用其空间映射。我被困在运行时在名称空间或服务中要执行的操作。
我尝试过:MixedRealityToolkit.SpatialAwarenessSystem.SuspendObservers();
这没有作用。我可以禁用整个“空间感知系统” GameObject,但这将是一个hack。
我需要的是适当的调用,该调用将完全禁用系统,以便在不再有用时释放资源?
此外,对我们如何正确访问服务系统的一些见解将有很大帮助。
答案 0 :(得分:1)
您可以使用以下代码来禁用/启用空间感知系统:
if (disable)
{
// disable
MixedRealityToolkit.SpatialAwarenessSystem.Disable();
}
else
{
// enable
MixedRealityToolkit.SpatialAwarenessSystem.Enable()
}
您可以使用以下代码仅启用/禁用可视化,但保持对撞机打开:
foreach(var observer in MixedRealityToolkit.SpatialAwarenessSystem.GetObservers())
{
var meshObserver = observer as IMixedRealitySpatialAwarenessMeshObserver;
if (meshObserver != null)
{
meshObserver.DisplayOption = SpatialAwarenessMeshDisplayOptions.None;
}
}
您可以在mrtk github.io site的Spatial Awareness System Usage guide上阅读有关MRTK中的空间感知系统的更多文档
答案 1 :(得分:0)
我希望SuspendObservers()方法不会导致显示任何新的网格。悬浮后您看到网格了吗?
根据设计,网格将保持可见,直到应用程序通过IMixedRealitySpatialAwarenessMeshObserver.DisplayOption属性将其可见性显式设置为“无”为止。
谢谢!
答案 2 :(得分:0)
请注意,由于最近对MRTK框架进行了更改,因此先前的答案无效。
SpatialAwareness数据提供者链接here
从所述链接粘贴的代码:
IMixedRealityDataProviderAccess dataProviderAccess =
CoreServices.SpatialAwarenessSystem as IMixedRealityDataProviderAccess;
if (dataProviderAccess != null)
{
IReadOnlyList<IMixedRealitySpatialAwarenessMeshObserver> observers =
dataProviderAccess.GetDataProviders<IMixedRealitySpatialAwarenessMeshObserver>();
foreach (IMixedRealitySpatialAwarenessMeshObserver observer in observers)
{
// Set the mesh to use the occlusion material
observer.DisplayOption = SpatialMeshDisplayOptions.Occlusion;
}
}
答案 3 :(得分:0)
[AddComponentMenu("Scripts/MRTK/Examples/ClearSpatialObservations")]
public class ClearSpatialObservations : MonoBehaviour
{
/// <summary>
/// Indicates whether observations are to be cleared (true) or if the observer is to be resumed (false).
/// </summary>
private bool clearObservations = true;
/// <summary>
/// Toggles the state of the observers.
/// </summary>
public void ToggleObservers()
{
var spatialAwarenessSystem = CoreServices.SpatialAwarenessSystem;
if (spatialAwarenessSystem != null)
{
if (clearObservations)
{
spatialAwarenessSystem.SuspendObservers();
spatialAwarenessSystem.ClearObservations();
clearObservations = false;
}
else
{
spatialAwarenessSystem.ResumeObservers();
clearObservations = true;
}
}
}
}