MRTK - 在运行时改变空间意识 material

MRTK - Changing Spatial Awareness material at runtime

我想在运行时更改所有空间网格的material:

如果我在 Room1 中启动应用程序,然后走到 Room2 并将 material 更改为“newMaterial”,我可以使用以下代码执行此操作:

foreach (SpatialAwarenessMeshObject meshObject in observer.Meshes.Values)
{
    if (meshObject?.GameObject == null)
        continue;

    meshObject.Renderer.sharedMaterial = newMaterial;

}

但是上面的代码只改变了可见的网格(所以房间 2 中的网格)。因为如果我走回 Room1,我还有旧的 material。

那么我如何确保 material 随所有网格一起更改,而不仅仅是可见的?

要设置显示Meshes时使用的Material,建议更改Spatial Awareness Mesh Observer的配置,而不是更改每个mesh对象。请参考以下代码:

    IMixedRealityDataProviderAccess dataProviderAccess = 
    CoreServices.SpatialAwarenessSystem as IMixedRealityDataProviderAccess;
if (dataProviderAccess != null)
{
    IReadOnlyList<IMixedRealitySpatialAwarenessMeshObserver> observers =
    dataProviderAccess.GetDataProviders<IMixedRealitySpatialAwarenessMeshObserver>();
    foreach (IMixedRealitySpatialAwarenessMeshObserver observer in observers)
    {
        // Update the visible material
        observer.VisibleMaterial = myMaterial;
    }
}