Created
July 7, 2022 13:36
-
-
Save Drenerdo/2b2dc20d85db4d29355dcf8842acc15f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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