I'm working on a project that I need to track images on a catalog and show the respectives 3D models to each page. Nothing complex by now, just the functional demo. It needs to show a 3D model per time, show nothing when there isn't a reference image on the screen, and I need to be able to return to previous images. I couldn't find a code like that, even in the samples provided by Unity. I'm new at Unity and C# programming, so I'm having a hard time when trying to change codes I've found here and on YouTube.
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;
public class ImageTracking2: MonoBehaviour
{
public string ReferenceImageName;
private ARTrackedImageManager _TrackedImageManager;
private void Awake()
{
_TrackedImageManager = FindObjectOfType<ARTrackedImageManager>();
}
private void OnEnable()
{
if (_TrackedImageManager != null)
{
_TrackedImageManager.trackedImagesChanged += OnTrackedImagesChanged;
}
}
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);
}
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 one above works well, somebody shared with the Unity Forum. But how can I make the game object disappear when the camera looses the reference, maybe after a second? (this is attached to the prefabs, individually. works perfectly, but the game objects of my 3D models keep forever on the screen once they get enabled). Thanks in advance.