MRTK - 在运行时更改空间感知材料

问题描述

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

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

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

    meshObject.Renderer.sharedMaterial = newMaterial;

}

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

那么我如何确保所有网格的材质都发生了变化,而不仅仅是可见的网格?

  • 我使用的是 MRTK v2.53 和 XR SDK 管道
  • 空间观察者是:WindowsMixedRealitySpatialMeshObserver

解决方法

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

    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;
    }
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...