in Assets/MRTK/Providers/Experimental/WindowsSceneUnderstanding/WindowsSceneUnderstandingObserver.cs [1123:1225]
private void UpdateInstantiatedSceneObject(SpatialAwarenessSceneObject existingSaso, SpatialAwarenessSceneObject newSaso)
{
if (newSaso == null)
{
GameObject.Destroy(existingSaso.GameObject);
return;
}
newSaso.GameObject = existingSaso.GameObject;
newSaso.GameObject.transform.localPosition = newSaso.Position;
newSaso.GameObject.transform.localRotation = newSaso.Rotation;
// Update GameObjects for Quads and Meshes
if (RequestPlaneData)
{
int i = 0;
while (i < existingSaso.Quads.Count && i < newSaso.Quads.Count)
{
var gameObject = newSaso.Quads[i].GameObject = existingSaso.Quads[i].GameObject;
gameObject.name = $"Quad {newSaso.Quads[i].Id}";
gameObject.transform.localScale = new Vector3(newSaso.Quads[i].Extents.x, newSaso.Quads[i].Extents.y, 0);
if (RequestOcclusionMask &&
((existingSaso.Quads[i].OcclusionMask == null || newSaso.Quads[i].OcclusionMask == null)
|| !existingSaso.Quads[i].OcclusionMask.SequenceEqual(newSaso.Quads[i].OcclusionMask)))
{
var meshRender = newSaso.Quads[i].GameObject.GetComponent<MeshRenderer>();
meshRender.enabled = true;
if (newSaso.Quads[i].OcclusionMask != null)
{
var occlusionTexture = OcclusionTexture(newSaso.Quads[i].OcclusionMask);
meshRender.material.mainTexture = occlusionTexture;
}
else
{
meshRender.enabled = false;
}
}
i++;
}
if (existingSaso.Quads.Count < newSaso.Quads.Count)
{
for (; i < newSaso.Quads.Count; i++)
{
InstantiateQuad(newSaso, newSaso.Quads[i]);
}
}
else
{
for (; i < existingSaso.Quads.Count; i++)
{
GameObject.Destroy(existingSaso.Quads[i].GameObject);
}
}
}
if (RequestMeshData)
{
int i = 0;
while (i < existingSaso.Meshes.Count && i < newSaso.Meshes.Count)
{
var gameObject = newSaso.Meshes[i].GameObject = existingSaso.Meshes[i].GameObject;
gameObject.name = $"Mesh {newSaso.Meshes[i].Id}";
if (DefaultWorldMeshMaterial && existingSaso.SurfaceType != newSaso.SurfaceType)
{
if (newSaso.SurfaceType == SpatialAwarenessSurfaceTypes.World)
{
newSaso.Meshes[i].GameObject.GetComponent<MeshRenderer>().sharedMaterial = DefaultWorldMeshMaterial;
}
else if (existingSaso.SurfaceType == SpatialAwarenessSurfaceTypes.World)
{
newSaso.Meshes[i].GameObject.GetComponent<MeshRenderer>().sharedMaterial = DefaultMaterial;
}
}
if (!existingSaso.Meshes[i].UVs.SequenceEqual(newSaso.Meshes[i].UVs) ||
!existingSaso.Meshes[i].Indices.SequenceEqual(newSaso.Meshes[i].Indices) ||
!existingSaso.Meshes[i].Vertices.SequenceEqual(newSaso.Meshes[i].Vertices))
{
var meshFilter = newSaso.Meshes[i].GameObject.GetComponent<MeshFilter>();
meshFilter.mesh = UnityMeshFromMeshData(newSaso.Meshes[i]);
}
i++;
}
if (existingSaso.Meshes.Count < newSaso.Meshes.Count)
{
for (; i < newSaso.Meshes.Count; i++)
{
InstantiateMesh(newSaso, newSaso.Meshes[i]);
}
}
else
{
for (; i < existingSaso.Meshes.Count; i++)
{
GameObject.Destroy(existingSaso.Meshes[i].GameObject);
}
}
}
}