コード例 #1
0
 public void OnObservationAdded(MixedRealitySpatialAwarenessEventData <SpatialAwarenessMeshObject> eventData)
 {
     AddPointerHandlerToSpatialMesh();
     // A new mesh has been added.
     Debug.Log($"Tracking mesh {eventData.Id}");
     meshUpdateData.Add(eventData.Id, 0);
 }
コード例 #2
0
        /// <inheritdoc />
        public override void Initialize()
        {
            base.Initialize();
            sceneEventData = new MixedRealitySpatialAwarenessEventData <SpatialAwarenessSceneObject>(EventSystem.current);
            CreateQuadFromExtents(normalizedQuadMesh, 1, 1);

            var accessStatus = SceneObserver.RequestAccessAsync().GetAwaiter().GetResult();

            if (accessStatus == SceneObserverAccessStatus.Allowed)
            {
                IsRunning     = true;
                observerState = ObserverState.Idle;
                StartUpdateTimers();
            }
            else
            {
                Debug.LogError("Something went terribly wrong getting scene observer access!");
            }

            if (UpdateOnceOnLoad)
            {
                observerState = ObserverState.GetScene;
                //doUpdateOnceOnLoad = true;
            }
        }
コード例 #3
0
        /// <summary>
        /// Performs initialization tasks for the spatial awareness system.
        /// </summary>
        private void InitializeInternal()
        {
            meshEventData           = new MixedRealitySpatialAwarenessEventData(EventSystem.current);
            surfaceFindingEventData = new MixedRealitySpatialAwarenessEventData(EventSystem.current);

            // General settings
            StartupBehavior      = MixedRealityToolkit.Instance.ActiveProfile.SpatialAwarenessProfile.StartupBehavior;
            ObservationExtents   = MixedRealityToolkit.Instance.ActiveProfile.SpatialAwarenessProfile.ObservationExtents;
            IsStationaryObserver = MixedRealityToolkit.Instance.ActiveProfile.SpatialAwarenessProfile.IsStationaryObserver;
            UpdateInterval       = MixedRealityToolkit.Instance.ActiveProfile.SpatialAwarenessProfile.UpdateInterval;

            // Mesh settings
            UseMeshSystem              = MixedRealityToolkit.Instance.ActiveProfile.SpatialAwarenessProfile.UseMeshSystem;
            MeshPhysicsLayer           = MixedRealityToolkit.Instance.ActiveProfile.SpatialAwarenessProfile.MeshPhysicsLayer;
            MeshLevelOfDetail          = MixedRealityToolkit.Instance.ActiveProfile.SpatialAwarenessProfile.MeshLevelOfDetail;
            MeshTrianglesPerCubicMeter = MixedRealityToolkit.Instance.ActiveProfile.SpatialAwarenessProfile.MeshTrianglesPerCubicMeter;
            MeshRecalculateNormals     = MixedRealityToolkit.Instance.ActiveProfile.SpatialAwarenessProfile.MeshRecalculateNormals;
            MeshDisplayOption          = MixedRealityToolkit.Instance.ActiveProfile.SpatialAwarenessProfile.MeshDisplayOption;
            MeshVisibleMaterial        = MixedRealityToolkit.Instance.ActiveProfile.SpatialAwarenessProfile.MeshVisibleMaterial;
            MeshOcclusionMaterial      = MixedRealityToolkit.Instance.ActiveProfile.SpatialAwarenessProfile.MeshOcclusionMaterial;

            // Surface finding settings
            UseSurfaceFindingSystem   = MixedRealityToolkit.Instance.ActiveProfile.SpatialAwarenessProfile.UseSurfaceFindingSystem;
            SurfacePhysicsLayer       = MixedRealityToolkit.Instance.ActiveProfile.SpatialAwarenessProfile.SurfaceFindingPhysicsLayer;
            SurfaceFindingMinimumArea = MixedRealityToolkit.Instance.ActiveProfile.SpatialAwarenessProfile.SurfaceFindingMinimumArea;
            DisplayFloorSurfaces      = MixedRealityToolkit.Instance.ActiveProfile.SpatialAwarenessProfile.DisplayFloorSurfaces;
            FloorSurfaceMaterial      = MixedRealityToolkit.Instance.ActiveProfile.SpatialAwarenessProfile.FloorSurfaceMaterial;
            DisplayCeilingSurfaces    = MixedRealityToolkit.Instance.ActiveProfile.SpatialAwarenessProfile.DisplayCeilingSurface;
            CeilingSurfaceMaterial    = MixedRealityToolkit.Instance.ActiveProfile.SpatialAwarenessProfile.CeilingSurfaceMaterial;
            DisplayWallSurfaces       = MixedRealityToolkit.Instance.ActiveProfile.SpatialAwarenessProfile.DisplayWallSurface;
            WallSurfaceMaterial       = MixedRealityToolkit.Instance.ActiveProfile.SpatialAwarenessProfile.WallSurfaceMaterial;
            DisplayPlatformSurfaces   = MixedRealityToolkit.Instance.ActiveProfile.SpatialAwarenessProfile.DisplayPlatformSurfaces;
            PlatformSurfaceMaterial   = MixedRealityToolkit.Instance.ActiveProfile.SpatialAwarenessProfile.PlatformSurfaceMaterial;
        }
コード例 #4
0
        /// <inheritdoc />
        public void OnObservationAdded(MixedRealitySpatialAwarenessEventData <SpatialAwarenessSceneObject> eventData)
        {
            // This method called everytime a SceneObject created by the SU observer
            // The eventData contains everything you need do something useful

            AddToData(eventData.Id);

            if (InstantiatePrefabs && eventData.SpatialObject.Quads.Count > 0)
            {
                var prefab = Instantiate(InstantiatedPrefab);
                prefab.transform.SetPositionAndRotation(eventData.SpatialObject.Position, eventData.SpatialObject.Rotation);
                float sx = eventData.SpatialObject.Quads[0].Extents.x;
                float sy = eventData.SpatialObject.Quads[0].Extents.y;
                prefab.transform.localScale = new Vector3(sx, sy, .1f);
                if (InstantiatedParent)
                {
                    prefab.transform.SetParent(InstantiatedParent);
                }
                instantiatedPrefabs.Add(prefab);
            }
            else
            {
                foreach (var quad in eventData.SpatialObject.Quads)
                {
                    quad.GameObject.GetComponent <Renderer>().material.color = ColorForSurfaceType(eventData.SpatialObject.SurfaceType);
                }
            }
        }
コード例 #5
0
    public void OnObservationAdded(MixedRealitySpatialAwarenessEventData <SpatialAwarenessMeshObject> eventData)
    {
        if (!meshDataUpdates.ContainsKey(eventData.Id))
        {
            meshDataUpdates.Add(eventData.Id, 0);
        }


        /*
         * if(!meshUpdateData.ContainsKey(eventData.Id))
         * {
         *  Debug.Log($"Added mesh {eventData.Id} to observation");
         *  meshUpdateData.Add(eventData.Id, 0);
         *
         *  var newVertices = eventData.SpatialObject.Filter.mesh.vertices;
         *  var newUVs = eventData.SpatialObject.Filter.mesh.uv;
         *  var newTriangles = eventData.SpatialObject.Filter.mesh.triangles;
         *  var meshPosition = eventData.SpatialObject.Filter.transform.position;
         *  var meshId = eventData.Id;
         *
         *
         *  //RPCPhotonView.RPC("RecieveMeshData", RpcTarget.Others, newVertices, newUVs, newTriangles, meshPosition, meshId);
         *
         * }*/
    }
        public void OnObservationAdded(MixedRealitySpatialAwarenessEventData <SpatialAwarenessSceneObject> eventData)
        {
            // This method called everytime a SceneObject created by the SU observer
            // The eventData contains everything you need do something useful

            if (eventData.SpatialObject.SurfaceType == surfaceTypeToPlaceOn)
            {
                observedSceneObjects.Add(eventData.SpatialObject);
            }

            if (InstantiatePrefabs)
            {
                var prefab = Instantiate(InstantiatedPrefab);
                prefab.transform.SetPositionAndRotation(eventData.SpatialObject.Position, eventData.SpatialObject.Rotation);

                if (InstantiatedParent)
                {
                    prefab.transform.SetParent(InstantiatedParent);
                }

                // A prefab can implement the ISpatialAwarenessSceneObjectConsumer contract
                // this will let the prefab author decide how it wants to "react" to the new sceneObject
                // In the demo scene, the prefab will scale itself to fit quad extents

                foreach (var x in prefab.GetComponents <ISceneUnderstandingSceneObjectConsumer>())
                {
                    x.OnSpatialAwarenessSceneObjectCreated(eventData.SpatialObject);
                }
            }
        }
コード例 #7
0
 public void OnObservationRemoved(MixedRealitySpatialAwarenessEventData <SpatialAwarenessMeshObject> eventData)
 {
     if (meshDataUpdates.ContainsKey(eventData.Id))
     {
         RPCPhotonView.RPC("RemoveMesh", RpcTarget.Others, eventData.Id);
         meshDataUpdates.Remove(eventData.Id);
     }
 }
コード例 #8
0
 public void OnObservationAdded(MixedRealitySpatialAwarenessEventData <SpatialAwarenessMeshObject> eventData)
 {
     if (!meshDataUpdates.ContainsKey(eventData.Id))
     {
         //add mesh id to Dictionary, so we can count updates
         meshDataUpdates.Add(eventData.Id, 0);
     }
 }
コード例 #9
0
        /// <inheritdoc />
        public void OnObservationRemoved(MixedRealitySpatialAwarenessEventData <SpatialAwarenessSceneObject> eventData)
        {
            RemoveFromData(eventData.Id);

            foreach (var sceneObjectDict in observedSceneObjects.Values)
            {
                sceneObjectDict?.Remove(eventData.Id);
            }
        }
コード例 #10
0
 /// <inheritdoc />
 public virtual void OnObservationRemoved(MixedRealitySpatialAwarenessEventData <SpatialAwarenessMeshObject> eventData)
 {
     // A mesh has been removed. We no longer need to track the count of updates.
     if (meshUpdateData.ContainsKey(eventData.Id))
     {
         Debug.Log($"No longer tracking mesh {eventData.Id}.");
         meshUpdateData.Remove(eventData.Id);
     }
 }
コード例 #11
0
 /// <inheritdoc />
 public virtual void OnObservationAdded(MixedRealitySpatialAwarenessEventData <SpatialAwarenessMeshObject> eventData)
 {
     // A new mesh has been added.
     if (!meshUpdateData.ContainsKey(eventData.Id))
     {
         Debug.Log($"Tracking mesh {eventData.Id}");
         meshUpdateData.Add(eventData.Id, 0);
     }
 }
コード例 #12
0
        /// <inheritdoc />
        public override void Initialize()
        {
            meshEventData = new MixedRealitySpatialAwarenessEventData <SpatialAwarenessMeshObject>(EventSystem.current);

            CreateObserver();

            // Apply the initial observer volume settings.
            ConfigureObserverVolume();
        }
コード例 #13
0
        /// <inheritdoc/>
        public override void Initialize()
        {
            base.Initialize();

            if (Application.isPlaying)
            {
                meshEventData           = new MixedRealitySpatialAwarenessEventData <SpatialMeshObject>(EventSystem.current);
                surfaceFindingEventData = new MixedRealitySpatialAwarenessEventData <GameObject>(EventSystem.current);
            }
        }
コード例 #14
0
    public void OnObservationUpdated(MixedRealitySpatialAwarenessEventData <SpatialAwarenessMeshObject> eventData)
    {
        var checkNavMeshSourceTag = eventData.SpatialObject.GameObject.GetComponent <NavMeshSourceTag>();

        if (checkNavMeshSourceTag == null)
        {
            eventData.SpatialObject.GameObject.AddComponent <NavMeshSourceTag>();
            Debug.Log(eventData.SpatialObject.GameObject.name + "UPDATED MF");
        }
    }
コード例 #15
0
        /// <inheritdoc />
        public virtual void OnMeshUpdated(MixedRealitySpatialAwarenessEventData <SpatialMeshObject> eventData)
        {
            // A mesh has been updated. Find it and increment the update count.
            if (meshUpdateData.TryGetValue(eventData.Id, out uint updateCount))
            {
                // Set the new update count.
                meshUpdateData[eventData.Id] = ++updateCount;

                Debug.Log($"[DemoSpatialMeshHandler.OnMeshUpdated] Mesh {eventData.Id} has been updated {updateCount} times.");
            }
        }
コード例 #16
0
        /// <inheritdoc />
        public virtual void OnMeshRemoved(MixedRealitySpatialAwarenessEventData eventData)
        {
            Debug.Log("DemoSpatialMeshHandler.OnMeshRemoved");

            // A mesh has been removed. We no longer need to track the count of updates.
            if (meshUpdateData.ContainsKey(eventData.Id))
            {
                Debug.Log($"No longer tracking mesh {eventData.Id}.");
                meshUpdateData.Remove(eventData.Id);
            }
        }
コード例 #17
0
        /// <inheritdoc />
        public override void Initialize()
        {
            meshEventData = new MixedRealitySpatialAwarenessEventData <SpatialAwarenessMeshObject>(EventSystem.current);

            ReadProfile();

            if (StartupBehavior == AutoStartBehavior.AutoStart)
            {
                Resume();
            }
        }
コード例 #18
0
        /// <inheritdoc />
        public virtual void OnMeshRemoved(MixedRealitySpatialAwarenessEventData <SpatialMeshObject> eventData)
        {
            Debug.Log($"[DemoSpatialMeshHandler.OnMeshRemoved] {eventData.EventSource.SourceName}.{eventData.SpatialObject.GameObject.name}");

            // A mesh has been removed. We no longer need to track the count of updates.
            if (meshUpdateData.ContainsKey(eventData.Id))
            {
                Debug.Log($"[DemoSpatialMeshHandler] No longer tracking mesh {eventData.Id}.");
                meshUpdateData.Remove(eventData.Id);
            }
        }
コード例 #19
0
        /// <inheritdoc />
        public virtual void OnMeshAdded(MixedRealitySpatialAwarenessEventData eventData)
        {
            Debug.Log("DemoSpatialMeshHandler.OnMeshAdded");

            // A new mesh has been added.
            if (!meshUpdateData.ContainsKey(eventData.Id))
            {
                Debug.Log($"Tracking mesh {eventData.Id}");
                meshUpdateData.Add(eventData.Id, 0);
            }
        }
コード例 #20
0
 public void OnObservationUpdated(MixedRealitySpatialAwarenessEventData <SpatialAwarenessMeshObject> eventData)
 {
     //AddPointerHandlerToSpatialMesh();
     // A mesh has been updated. Find it and increment the update count.
     if (meshUpdateData.TryGetValue(eventData.Id, out uint updateCount))
     {
         // Set the new update count.
         meshUpdateData[eventData.Id] = ++updateCount;
         Debug.Log($"Mesh {eventData.Id} has been updated {updateCount} times.");
     }
 }
コード例 #21
0
        /// <inheritdoc />
        public virtual void OnMeshAdded(MixedRealitySpatialAwarenessEventData <SpatialMeshObject> eventData)
        {
            Debug.Log($"[DemoSpatialMeshHandler.OnMeshAdded] {eventData.EventSource.SourceName}.{eventData.SpatialObject.GameObject.name}");

            // A new mesh has been added.
            if (!meshUpdateData.ContainsKey(eventData.Id))
            {
                Debug.Log($"[DemoSpatialMeshHandler] Started Tracking mesh {eventData.Id}.");
                meshUpdateData.Add(eventData.Id, 0);
            }
        }
        /// <inheritdoc />
        public override void Initialize()
        {
            meshEventData = new MixedRealitySpatialAwarenessEventData <SpatialAwarenessMeshObject>(EventSystem.current);

            CreateObserver();

            // Apply the initial observer volume settings.
            ConfigureObserverVolume();

#if UNITY_EDITOR && UNITY_WSA
            Toolkit.Utilities.Editor.UWPCapabilityUtility.RequireCapability(
                UnityEditor.PlayerSettings.WSACapability.SpatialPerception,
                this.GetType());
#endif
        }
コード例 #23
0
        /// <inheritdoc />
        public void OnObservationUpdated(MixedRealitySpatialAwarenessEventData <SpatialAwarenessSceneObject> eventData)
        {
            UpdateData(eventData.Id);

            if (observedSceneObjects.TryGetValue(eventData.SpatialObject.SurfaceType, out Dictionary <int, SpatialAwarenessSceneObject> sceneObjectDict))
            {
                observedSceneObjects[eventData.SpatialObject.SurfaceType][eventData.Id] = eventData.SpatialObject;
            }
            else
            {
                observedSceneObjects.Add(eventData.SpatialObject.SurfaceType, new Dictionary <int, SpatialAwarenessSceneObject> {
                    { eventData.Id, eventData.SpatialObject }
                });
            }
        }
コード例 #24
0
    public void OnObservationUpdated(MixedRealitySpatialAwarenessEventData <SpatialAwarenessMeshObject> eventData)
    {
        int updateCount = 0;

        //if mesh was added to observation...
        if (meshDataUpdates.TryGetValue(eventData.Id, out updateCount))
        {
            //...update the count
            meshDataUpdates[eventData.Id] = ++updateCount;

            //for every third update...
            if ((updateCount % 3) == 0)
            {
                //...send vertices, triangles and uvs to reciever app via RPC
                RPCPhotonView.RPC("RecieveMeshData", RpcTarget.Others, eventData.SpatialObject.Filter.mesh.vertices, eventData.SpatialObject.Filter.mesh.triangles,
                                  eventData.SpatialObject.Filter.mesh.uv, eventData.SpatialObject.Id);
            }
        }
    }
コード例 #25
0
    public void OnObservationUpdated(MixedRealitySpatialAwarenessEventData <SpatialAwarenessMeshObject> eventData)
    {
        int updateCount = 0;

        if (meshDataUpdates.TryGetValue(eventData.Id, out updateCount))
        {
            meshDataUpdates[eventData.Id] = ++updateCount;

            if ((updateCount % 6) == 0)
            {
                RPCPhotonView.RPC("RecieveMeshData", RpcTarget.Others, eventData.SpatialObject.Filter.mesh.vertices, eventData.SpatialObject.Filter.mesh.triangles,
                                  eventData.SpatialObject.Filter.mesh.uv, eventData.SpatialObject.Id);
            }
        }

        /* var newVertices = eventData.SpatialObject.Filter.mesh.vertices;
         * var newUVs = eventData.SpatialObject.Filter.mesh.uv;
         * var newTriangles = eventData.SpatialObject.Filter.mesh.triangles;
         * var meshId = eventData.SpatialObject.Id;
         *
         * RPCPhotonView.RPC("UpdateMesh", RpcTarget.Others, newVertices, newUVs, newTriangles, meshId); */
    }
コード例 #26
0
 /// <inheritdoc />
 public void OnObservationUpdated(MixedRealitySpatialAwarenessEventData <SpatialAwarenessSceneObject> eventData)
 {
     UpdateData(eventData.Id);
 }
 public void OnObservationRemoved(MixedRealitySpatialAwarenessEventData <SpatialAwarenessSceneObject> eventData)
 {
     // This is never called by the SU observer by design
     throw new System.NotImplementedException();
 }
コード例 #28
0
 /// <inheritdoc />
 public virtual void OnObservationAdded(MixedRealitySpatialAwarenessEventData <SpatialAwarenessMeshObject> eventData)
 {
     AddToData(eventData.Id);
 }
コード例 #29
0
 /// <inheritdoc />
 public void OnObservationRemoved(MixedRealitySpatialAwarenessEventData <SpatialAwarenessSceneObject> eventData)
 {
     RemoveFromData(eventData.Id);
 }
コード例 #30
0
 /// <summary>
 /// Performs initialization tasks for the spatial awareness system.
 /// </summary>
 private void InitializeInternal()
 {
     meshEventData = new MixedRealitySpatialAwarenessEventData <SpatialAwarenessMeshObject>(EventSystem.current);
 }