using System; using UnityEngine; /// <summary> /// This MonoBehaviour implements the Cloud Reco Event handling for this sample. /// It registers itself at the CloudRecoBehaviour and is notified of new search results. /// </summary> public class SimpleCloudRecoEventHandler : MonoBehaviour, ICloudRecoEventHandler { #region PRIVATE_MEMBER_VARIABLES // CloudRecoBehaviour reference to avoid lookups private CloudRecoBehaviour mCloudRecoBehaviour; // ImageTracker reference to avoid lookups private ImageTracker mImageTracker; #endregion // PRIVATE_MEMBER_VARIABLES #region EXPOSED_PUBLIC_VARIABLES /// <summary> /// can be set in the Unity inspector to reference a ImageTargetBehaviour that is used for augmentations of new cloud reco results. /// </summary> public ImageTargetBehaviour ImageTargetTemplate; #endregion #region ICloudRecoEventHandler_IMPLEMENTATION /// <summary> /// called when TargetFinder has been initialized successfully /// </summary> public void OnInitialized() { // get a reference to the Image Tracker, remember it mImageTracker = (ImageTracker)TrackerManager.Instance.GetTracker(Tracker.Type.IMAGE_TRACKER); } /// <summary> /// initialization errors /// </summary> public void OnInitError(TargetFinder.InitState initError) { } /// <summary> /// update errors /// </summary> public void OnUpdateError(TargetFinder.UpdateState updateError) { } /// <summary> /// updates to the scanning state /// </summary> public void OnStateChanged(bool scanning) { } /// <summary> /// Handles new search results /// </summary> /// <param name="targetSearchResult"></param> public void OnNewSearchResult(TargetFinder.TargetSearchResult targetSearchResult) { // duplicate the referenced image target GameObject newImageTarget = Instantiate(ImageTargetTemplate.gameObject) as GameObject; // enable the new result with the same ImageTargetBehaviour: ImageTargetBehaviour imageTargetBehaviour = mImageTracker.TargetFinder.EnableTracking(targetSearchResult, newImageTarget); if (imageTargetBehaviour != null) { // stop the target finder mCloudRecoBehaviour.CloudRecoEnabled = false; } } #endregion // ICloudRecoEventHandler_IMPLEMENTATION #region UNTIY_MONOBEHAVIOUR_METHODS /// <summary> /// register for events at the CloudRecoBehaviour /// </summary> void Start() { // register this event handler at the cloud reco behaviour CloudRecoBehaviour cloudRecoBehaviour = GetComponent<CloudRecoBehaviour>(); if (cloudRecoBehaviour) { cloudRecoBehaviour.RegisterEventHandler(this); } // remember cloudRecoBehaviour for later mCloudRecoBehaviour = cloudRecoBehaviour; } #endregion // UNTIY_MONOBEHAVIOUR_METHODS }