5 using System.Collections.Generic;
6 using System.Collections.ObjectModel;
17 [RequireComponent(typeof(SpatialMappingObserver))]
20 [Tooltip(
"The physics layer for spatial mapping objects to be set to.")]
21 public int PhysicsLayer = 31;
23 [Tooltip(
"The material to use for rendering spatial mapping data.")]
25 private Material surfaceMaterial;
27 [Tooltip(
"Determines if the surface observer should be automatically started.")]
29 private bool autoStartObserver =
true;
31 [Tooltip(
"Determines if spatial mapping data will be rendered.")]
33 private bool drawVisualMeshes =
false;
35 [Tooltip(
"Determines if spatial mapping data will cast shadows.")]
37 private bool castShadows =
false;
47 public float StartTime {
get;
private set; }
59 get {
return source; }
65 UpdateRendering(
false);
67 var oldSource = source;
70 UpdateRendering(DrawVisualMeshes);
72 var handlers = SourceChanged;
85 public event EventHandler<PropertyChangedEventArgsEx<SpatialMappingSource>>
SourceChanged;
93 Source = surfaceObserver;
99 if (autoStartObserver)
110 get {
return (1 << PhysicsLayer); }
116 public Material SurfaceMaterial
120 return surfaceMaterial;
124 if (value != surfaceMaterial)
126 surfaceMaterial = value;
127 SetSurfaceMaterial(surfaceMaterial);
135 public bool DrawVisualMeshes
139 return drawVisualMeshes;
143 if (value != drawVisualMeshes)
145 drawVisualMeshes = value;
146 UpdateRendering(drawVisualMeshes);
154 public bool CastShadows
162 if (value != castShadows)
165 SetShadowCasting(castShadows);
176 Source = (mappingSource ?? surfaceObserver);
185 SurfaceMaterial = setSurfaceMaterial;
186 if (DrawVisualMeshes)
188 foreach (MeshRenderer sourceRenderer
in Source.GetMeshRenderers())
190 if (sourceRenderer != null)
192 sourceRenderer.sharedMaterial = setSurfaceMaterial;
214 #if UNITY_2017_2_OR_NEWER 215 if (!
UnityEngine.XR.XRDevice.isPresent) {
return; }
217 if (!
UnityEngine.VR.VRDevice.isPresent) {
return; }
220 if (!IsObserverRunning())
223 StartTime = Time.unscaledTime;
234 #if UNITY_2017_2_OR_NEWER 235 if (!
UnityEngine.XR.XRDevice.isPresent) {
return; }
237 if (!
UnityEngine.VR.VRDevice.isPresent) {
return; }
240 if (IsObserverRunning())
262 List<Mesh> meshes =
new List<Mesh>();
263 List<MeshFilter> meshFilters = GetMeshFilters();
266 for (
int i = 0; i < meshFilters.Count; i++)
269 meshes.Add(meshFilters[i].sharedMesh);
281 return Source.SurfaceObjects;
290 return Source.GetMeshFilters();
296 private void SetShadowCasting(
bool canCastShadows)
298 CastShadows = canCastShadows;
299 foreach (MeshRenderer sourceRenderer
in Source.GetMeshRenderers())
301 if (sourceRenderer != null)
305 sourceRenderer.shadowCastingMode =
UnityEngine.Rendering.ShadowCastingMode.On;
309 sourceRenderer.shadowCastingMode =
UnityEngine.Rendering.ShadowCastingMode.Off;
320 private void UpdateRendering(
bool enable)
324 List<MeshRenderer> renderers = Source.GetMeshRenderers();
325 for (
int index = 0; index < renderers.Count; index++)
327 if (renderers[index] != null)
329 renderers[index].enabled = enable;
332 renderers[index].sharedMaterial = SurfaceMaterial;