123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- using System.Collections.Generic;
- using System.Linq;
- using UnityEngine;
- using UnityEngine.Events;
- using UnityEngine.XR.ARFoundation;
- using UnityEngine.XR.ARSubsystems;
- public class ImageRecognitionBasic : MonoBehaviour
- {
- public string ReferenceImageName; //refer name to the image in the image library, this name should be exactly same as the respective image name in library
- private ARTrackedImageManager _TrackedImageManager; //reference to the ARTrackedImageManager to manages the tracking images
- public Dictionary<string, GameObject> modelPrefabs;
-
- private void Awake() //initializes _TrackedImageManager by finding an object ARTrackedImageManager, when the script instance loaded
- {
- _TrackedImageManager = FindObjectOfType<ARTrackedImageManager>();
-
- }
-
- private void OnEnable()
- {
- if (_TrackedImageManager != null)
- {
- _TrackedImageManager.trackedImagesChanged += OnTrackedImagesChanged; //called whenever there's a change in the tracked images
- }
- }
- private void OnDisable()
- {
- if (_TrackedImageManager != null)
- {
- _TrackedImageManager.trackedImagesChanged -= OnTrackedImagesChanged;
- }
- }
- private void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs e)
- {
- foreach (var trackedImage in e.added)
- {
- Debug.Log($"Tracked image detected: {trackedImage.referenceImage.name} with size: {trackedImage.size}");
- }
- UpdateTrackedImages(e.added);
- UpdateTrackedImages(e.updated);
- UpdateTrackedImages(e.removed);
- }
- private void UpdateTrackedImages(IEnumerable<ARTrackedImage> trackedImages)
- {
- // If the same image (ReferenceImageName)
- var trackedImage =
- trackedImages.FirstOrDefault(x => x.referenceImage.name == ReferenceImageName);
- if (trackedImage == null)
- {
- return;
- }
- if (trackedImage.trackingState != TrackingState.None)
- {
- var trackedImageTransform = trackedImage.transform;
- transform.SetPositionAndRotation(trackedImageTransform.position, trackedImageTransform.rotation);
- this.gameObject.GetComponent<ObjectDropper>().objectWasScanned();
- }
- }
-
- }
|