/
ImageTrackingViz.cs
134 lines (121 loc) · 4.14 KB
/
ImageTrackingViz.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
using System;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.XR.MagicLeap;
namespace MagicLeap
{
/// <summary>
/// This class handles visibility on image tracking, displaying and hiding prefabs
/// when images are detected or lost. Based on Magic Leap Image Tracking example
/// </summary>
[RequireComponent(typeof(MLImageTrackerBehavior))]
public class ImageTrackingViz : MonoBehaviour
{
#region Private Variables
private MLImageTrackerBehavior _trackerBehavior = null;
private bool _targetFound = false;
[SerializeField, Tooltip("Text to update on ImageTracking changes.")]
private Text _statusLabel = null;
// Stores initial text
private string _prefix;
private string _eventString;
[SerializeField, Tooltip("Game Object showing the demo")]
private GameObject _demo = null;
private ImageTracking.ViewMode _lastViewMode = ImageTracking.ViewMode.All;
#endregion
#region Unity Methods
/// <summary>
/// Validate inspector variables
/// </summary>
void Awake()
{
if (null == _demo)
{
Debug.LogError("Error: ImageTrackingVisualizer._demo is not set, disabling script.");
enabled = false;
return;
}
}
/// <summary>
/// Initializes variables and register callbacks
/// </summary>
void Start()
{
_prefix = _statusLabel.text;
_statusLabel.text = _prefix + "Target Lost";
_eventString = "";
_trackerBehavior = GetComponent<MLImageTrackerBehavior>();
_trackerBehavior.OnTargetFound += OnTargetFound;
_trackerBehavior.OnTargetLost += OnTargetLost;
RefreshViewMode();
}
private void Update()
{
_statusLabel.text = String.Format("{0}[{1}/{2}] {3}", _prefix, _trackerBehavior.IsTracking, _trackerBehavior.TrackingStatus, _eventString);
}
/// <summary>
/// Unregister calbacks
/// </summary>
void OnDestroy()
{
_trackerBehavior.OnTargetFound -= OnTargetFound;
_trackerBehavior.OnTargetLost -= OnTargetLost;
}
#endregion
#region Public Methods
/// <summary>
/// Update which objects should be visible
/// </summary>
/// <param name="viewMode">Contains the mode to view</param>
public void UpdateViewMode(ImageTracking.ViewMode viewMode)
{
_lastViewMode = viewMode;
RefreshViewMode();
}
#endregion
#region Private Methods
/// <summary>
/// De/Activate objects to be hidden/seen
/// </summary>
private void RefreshViewMode()
{
switch (_lastViewMode)
{
case ImageTracking.ViewMode.All:
_demo.SetActive(_targetFound);
break;
case ImageTracking.ViewMode.AxisOnly:
_demo.SetActive(false);
break;
case ImageTracking.ViewMode.TrackingCubeOnly:
_demo.SetActive(false);
break;
case ImageTracking.ViewMode.DemoOnly:
_demo.SetActive(_targetFound);
break;
}
}
#endregion
#region Event Handlers
/// <summary>
/// Callback for when tracked image is found
/// </summary>
/// <param name="isReliable"> Contains if image found is reliable </param>
private void OnTargetFound(bool isReliable)
{
_eventString = String.Format("Target Found ({0})", (isReliable ? "Reliable" : "Unreliable"));
_targetFound = true;
RefreshViewMode();
}
/// <summary>
/// Callback for when image tracked is lost
/// </summary>
private void OnTargetLost()
{
_eventString = "Target Lost";
_targetFound = false;
RefreshViewMode();
}
#endregion
}
}