Skip to content

Instantly share code, notes, and snippets.

@Drenerdo
Created July 7, 2022 13:36
Show Gist options
  • Save Drenerdo/2b2dc20d85db4d29355dcf8842acc15f to your computer and use it in GitHub Desktop.
Save Drenerdo/2b2dc20d85db4d29355dcf8842acc15f to your computer and use it in GitHub Desktop.
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.XR;
using UnityEngine.XR.ARFoundation;
using UnityEngine.Events;
[RequireComponent(typeof(ARTrackedImageManager))]
public class TrackingManager : MonoBehaviour
{
[SerializeField]
private GameObject welcomePanel;
// [SerializeField]
// private Button dismissButton;
[SerializeField]
private GameObject[] arObjectsToPlace;
// [SerializeField]
// private Text imageTrackedText;
[SerializeField] private Vector3 scaleFactor = new Vector3(0.1f, 0.1f, 0.1f);
private ARTrackedImageManager m_TrackedImageManager;
private Dictionary<string, GameObject> arObjects = new Dictionary<string, GameObject>();
void Awake()
{
// dismissButton.onClick.AddListener(Dismiss);
m_TrackedImageManager = GetComponent<ARTrackedImageManager>();
foreach (GameObject arObject in arObjectsToPlace)
{
// GameObject newARObj = Instantiate(arObject, Vector3.zero, Quaternion.identity);
arObject.SetActive(true);
arObject.name = arObject.name;
arObjects.Add(arObject.name, arObject);
}
}
void OnEnable()
{
m_TrackedImageManager.trackedImagesChanged += OnTrackedImagesChanged;
}
void OnDisable()
{
m_TrackedImageManager.trackedImagesChanged -= OnTrackedImagesChanged;
}
private void Dismiss() => welcomePanel.SetActive(false);
void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs eventArgs)
{
foreach (ARTrackedImage trackedImage in eventArgs.added)
{
// Give the initial image a reasonable default scale
// trackedImage.transform.localScale =
// new Vector3(-trackedImage.referenceImage.size.x, 0.005f, -trackedImage.referenceImage.size.y);
UpdateARImage(trackedImage);
}
foreach (ARTrackedImage trackedImage in eventArgs.updated)
{
// Give the initial image a reasonable default scale
// trackedImage.transform.localScale =
// new Vector3(-trackedImage.referenceImage.size.x, 0.005f, -trackedImage.referenceImage.size.y);
UpdateARImage(trackedImage);
}
foreach (ARTrackedImage trackedImage in eventArgs.removed)
{
arObjects[trackedImage.name].SetActive(false);
}
}
void UpdateARImage(ARTrackedImage trackedImage)
{
AssignGameObject(trackedImage.referenceImage.name, trackedImage.transform.position, trackedImage.transform.rotation);
}
void AssignGameObject(string name, Vector3 newPosition, Quaternion newRotation)
{
if (arObjectsToPlace != null)
{
GameObject goARObj = arObjects[name];
goARObj.SetActive(true);
goARObj.transform.position = newPosition;
goARObj.transform.rotation = newRotation;
goARObj.transform.localScale = scaleFactor;
foreach (GameObject go in arObjects.Values)
{
if (go.name != name)
{
go.SetActive(false);
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment