Exemple #1
0
        protected virtual void SetObjectPosition(LocationARWorldObject worldObject, GameObject gameObj, Coordinates coords)
        {
            var pos = GetPosition(worldObject, coords);

            // Set the object to be level with the camera: may want to revisit 
            // this if we do ground surface tracking
            pos.y += (float)worldObject.Elevation;

            gameObj.transform.localPosition = pos;
            gameObj.transform.localScale = Vector3.one;
            gameObj.transform.localRotation = Quaternion.identity;
        }
Exemple #2
0
        public override double GetDistance(LocationARWorldObject worldObj)
        {
            // TODO: if tracking..
            var dist = (worldObj.GameObject.transform.position - WorldCamera.transform.position).magnitude;

            if (worldObj.Options != null &&
                worldObj.Options.DistanceVariation is LinearDistanceVariation)
            {
                var linVar = (LinearDistanceVariation)worldObj.Options.DistanceVariation;

                dist /= (float)linVar.Scale.GetValueOrDefault(1);
            }

            return dist;
        }
Exemple #3
0
        public override void AddWorldObject(LocationARWorldObject worldObject, bool attach)
        {
            var state = new TrackedWorldObjectState();

            var parent = new GameObject("AR Object");
            state.WorldObjectParent = parent;
            worldObject.GameObject.transform.SetParent(state.WorldObjectParent.transform);

            worldObject.GameObject.transform.localPosition = Vector2.zero;
            worldObject.GameObject.transform.localScale = Vector3.one;
            worldObject.GameObject.transform.rotation = Quaternion.identity;

            m_objStates.Add(worldObject, state);

            // Leave the object inactive until we parent it to the correct anchor.
            state.WorldObjectParent.SetActive(false);

            base.AddWorldObject(worldObject, false);
        }
Exemple #4
0
        protected void AdjustObject(LocationARWorldObject worldObject, bool isCameraTracking, TrackedWorldObjectState state)
        {
            state.WorldObjectParent.SetActive(true);

            bool isTracking = UsingTracking && isCameraTracking;

            if (!isTracking)
            {
                // Use the default rendering. We do this if ARKit stopped tracking.
                if (state.TrackingState != ObjectTrackingState.NotTracking)
                {
                    state.TrackingState = ObjectTrackingState.NotTracking;

                    state.WorldObjectParent.SetActive(false);

                    worldObject.GameObject.transform.SetParent(DefaultAnchor.transform);

                    worldObject.GameObject.transform.localRotation = Quaternion.identity;
                    worldObject.GameObject.transform.localScale = Vector3.one;
                }

                SetPosition(worldObject);
            }
            else
            {
                if (state.TrackingState != ObjectTrackingState.Tracking)
                {
                    state.WorldObjectParent.transform.SetParent(TrackingAnchor.transform);

                    worldObject.GameObject.transform.SetParent(state.WorldObjectParent.transform);

                    worldObject.GameObject.transform.localPosition = Vector3.zero;
                    worldObject.GameObject.transform.localScale = Vector3.one;
                    worldObject.GameObject.transform.localRotation = Quaternion.identity;

                    SetObjectPosition(worldObject, state, m_gpsAnchorCoords);

                    state.TrackingState = ObjectTrackingState.Tracking;
                }

                AdjustTrackedObject(worldObject, state);
            }
        }
Exemple #5
0
        public override void RemoveWorldObject(LocationARWorldObject worldObject)
        {
            m_objStates.Remove(worldObject);

            base.RemoveWorldObject(worldObject);
        }
Exemple #6
0
 protected void SetObjectPosition(LocationARWorldObject worldObject, TrackedWorldObjectState state, Coordinates coords)
 {
     SetObjectPosition(worldObject, state.WorldObjectParent, coords);
 }