问题描述
我想在运行时更改所有空间网格的材质:
如果我在 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;
}
}