using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.XR.ARSubsystems; using UnityEngine.XR.ARFoundation; /// This component listens for images detected by the XRImageTrackingSubsystem /// and overlays some information as well as the source Texture2D on top of the /// detected image. /// [RequireComponent(typeof(ARTrackedImageManager))] public class TrackedImageInfoManager : MonoBehaviour { //private Dictionary lastLoggings = new Dictionary(); //[SerializeField] //[Tooltip("The different sprites used for each imagetracked target.")] //private Sprite[] sprites; [SerializeField] [Tooltip("The camera to set on the world space UI canvas for each instantiated image info.")] Camera m_WorldSpaceCanvasCamera; /// /// The prefab has a world space UI canvas, /// which requires a camera to function properly. /// public Camera worldSpaceCanvasCamera { get { return m_WorldSpaceCanvasCamera; } set { m_WorldSpaceCanvasCamera = value; } } [SerializeField] [Tooltip("If an image is detected but no source texture can be found, this texture is used instead.")] Texture2D m_DefaultTexture; /// /// If an image is detected but no source texture can be found, /// this texture is used instead. /// public Texture2D defaultTexture { get { return m_DefaultTexture; } set { m_DefaultTexture = value; } } ARTrackedImageManager m_TrackedImageManager; void Awake() { m_TrackedImageManager = GetComponent(); } void OnEnable() { m_TrackedImageManager.trackedImagesChanged += OnTrackedImagesChanged; } void OnDisable() { m_TrackedImageManager.trackedImagesChanged -= OnTrackedImagesChanged; } //void Update() //{ // foreach (var item in lastLoggings) // { // if ((DateTime.Now - item.Value).Seconds > 0) // { // ARTrackedImage aRTrackedImage = null; // foreach (var trackable in m_TrackedImageManager.trackables) // { // if (trackable.name == item.Key) // { // aRTrackedImage = trackable; // break; // } // } // if (aRTrackedImage) // { // //slet her // aRTrackedImage.gameObject.SetActive(false); // } // } // } //} void UpdateInfo(ARTrackedImage trackedImage) { // Set canvas camera var canvas = trackedImage.GetComponentInChildren(); canvas.worldCamera = worldSpaceCanvasCamera; // Update information about the tracked image var text = canvas.GetComponentInChildren(); //Image image = canvas.GetComponentInChildren(); //Use something like this to get the name of the image //Debug.Log("trackedImage name " + trackedImage.referenceImage.name.ToString()); //text.text = string.Format( // "{0}\ntrackingState: {1}\nGUID: {2}\nReference size: {3} cm\nDetected size: {4} cm", // trackedImage.referenceImage.name, // trackedImage.trackingState, // trackedImage.referenceImage.guid, // trackedImage.referenceImage.size * 100f, // trackedImage.size * 100f); var planeParentGo = trackedImage.transform.GetChild(0).gameObject; var planeGo = planeParentGo.transform.GetChild(0).gameObject; Debug.Log("trackingState is " + trackedImage.trackingState); if (trackedImage.referenceImage.name == "smed1") { if (PlayerPrefs.GetInt("Blacksmith") == 0) { PlayerPrefs.SetInt("Blacksmith", 1); } text.text = "Dette er en test på billede " + trackedImage.referenceImage.name; } else if (trackedImage.referenceImage.name == "lejlighed2") { if (PlayerPrefs.GetInt("Apartment") == 0) { PlayerPrefs.SetInt("Apartment", 1); } text.text = "Dette er en test på billede " + trackedImage.referenceImage.name; } else if (trackedImage.referenceImage.name == "butiksgade3") { if (PlayerPrefs.GetInt("Shop") == 0) { PlayerPrefs.SetInt("Shop", 1); } text.text = "Dette er en test på billede " + trackedImage.referenceImage.name; } else if (trackedImage.referenceImage.name == "bogtrykkeriet4") { if (PlayerPrefs.GetInt("printingpress") == 0) { PlayerPrefs.SetInt("Printingpress", 1); } text.text = "Dette er en test på billede " + trackedImage.referenceImage.name; } else if (trackedImage.referenceImage.name == "tobaksfabrikken5") { if (PlayerPrefs.GetInt("Tobacco") == 0) { PlayerPrefs.SetInt("Tobacco", 1); } text.text = "Dette er en test på billede " + trackedImage.referenceImage.name; } else if (trackedImage.referenceImage.name == "banken6") { if (PlayerPrefs.GetInt("Bank") == 0) { PlayerPrefs.SetInt("Bank", 1); } text.text = "Dette er en test på billede " + trackedImage.referenceImage.name; } else if (trackedImage.referenceImage.name == "skolen7") { if (PlayerPrefs.GetInt("School") == 0) { PlayerPrefs.SetInt("School", 1); } text.text = "Dette er en test på billede " + trackedImage.referenceImage.name; } //Disable the visual plane if it is not being tracked if (trackedImage.trackingState != TrackingState.None) { planeGo.SetActive(true); // The image extents is only valid when the image is being tracked trackedImage.transform.localScale = new Vector3(trackedImage.size.x, 1f, trackedImage.size.y); // Set the texture var material = planeGo.GetComponentInChildren().material; material.mainTexture = (trackedImage.referenceImage.texture == null) ? defaultTexture : trackedImage.referenceImage.texture; } else { planeGo.SetActive(false); } } void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs eventArgs) { eventArgs.removed.ForEach(x => Debug.Log("removed: " + x.name + " Count: " + eventArgs.removed.Count)); eventArgs.added.ForEach(x => Debug.Log("added: " + x.name + " Count: " + eventArgs.added.Count)); eventArgs.updated.ForEach(x => Debug.Log("update: " + x.name + " Count: " + eventArgs.updated.Count)); foreach (var trackedImage in eventArgs.added) { // Give the initial image a reasonable default scale trackedImage.transform.localScale = new Vector3(1f, 1f, 1f); //lastLoggings.Add(trackedImage.name, DateTime.Now); UpdateInfo(trackedImage); Debug.Log("image target name: " + trackedImage.name); } foreach (var trackedImage in eventArgs.updated) { UpdateInfo(trackedImage); Debug.Log("image target name: " + trackedImage.name); //string name = trackedImage.name; //if (trackedImage.name != name) //{ // trackedImage.gameObject.SetActive(false); //} //TEST //if (lastLoggings.ContainsKey(trackedImage.name)) //{ // lastLoggings[trackedImage.name] = DateTime.Now; //} } foreach (var trackedImage in eventArgs.removed) { Debug.Log("image target name: " + trackedImage.name); } } }