public void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus) { if (!gameObject.activeSelf) { return; // avoid useless (but jarring) log message } if (!GetComponentInChildren <ImageTargetBehaviour>().enabled && (newStatus == TrackableBehaviour.Status.TRACKED || newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)) { // if we receive a tracking event even though we have already disabled the marker, something went wrong Debug.LogError("Bad tracking event received started for disabled marker " + gameObject.name); } GameObject engine = GameObject.FindWithTag("AREngine"); if (engine != null) { AREngineBehaviour engineBehaviour = engine.GetComponent <AREngineBehaviour>(); if (newStatus == TrackableBehaviour.Status.TRACKED) { engineBehaviour.SetTarget(gameObject, true); } else if (newStatus != TrackableBehaviour.Status.EXTENDED_TRACKED || DeviceInput.isAttitudeYawStable) { // lose the tracking if: // 1. new status is neither tracked nor extended-tracked // 2. new status is extended-tracked, but the device yaw is valid (so we don't need it) engineBehaviour.SetTarget(gameObject, false); } _visible = (newStatus == TrackableBehaviour.Status.TRACKED); } }
public void OnNewTrackableSource(TrackableSource trackableSource) { if (scanningDelay == -1) { scanningDelay = AREngineBehaviour.INITIALIZATION_DELAY; AREngineBehaviour engine = GameObject.FindWithTag("AREngine").GetComponent <AREngineBehaviour>(); if (engine.markerState == IARMarkerState.LOST || engine.currentlySeenARMarker.name != "ARTemporaryMarker" && !engine.currentlySeenARMarker.GetComponent <ARMarkerBehaviour>().visible) { Debug.Log("Saving new marker..."); if (dataSet != null) { objectTracker.DeactivateDataSet(dataSet); dataSet.DestroyAllTrackables(false); dataSet.CreateTrackable(trackableSource, GetComponentInChildren <TrackableBehaviour>().gameObject); objectTracker.ActivateDataSet(dataSet); } gameObject.GetComponent <ARMarkerBehaviour>().StartTracking(); } } }