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; }
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; }
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); }
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); } }
public override void RemoveWorldObject(LocationARWorldObject worldObject) { m_objStates.Remove(worldObject); base.RemoveWorldObject(worldObject); }
protected void SetObjectPosition(LocationARWorldObject worldObject, TrackedWorldObjectState state, Coordinates coords) { SetObjectPosition(worldObject, state.WorldObjectParent, coords); }