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 随所有网格一起更改,而不仅仅是可见的?
- 我正在使用 MRTK v2.53 和 XR SDK 管道
- 空间观察者是:WindowsMixedRealitySpatialMeshObserver
要设置显示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;
}
}
我想在运行时更改所有空间网格的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 随所有网格一起更改,而不仅仅是可见的?
- 我正在使用 MRTK v2.53 和 XR SDK 管道
- 空间观察者是:WindowsMixedRealitySpatialMeshObserver
要设置显示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;
}
}