Skip to content

Commit e2d0a03

Browse files
committed
Add TrackedPoseDriver at runtime
1 parent 72b2bd0 commit e2d0a03

File tree

2 files changed

+52
-3
lines changed

2 files changed

+52
-3
lines changed

Assets/MixedRealityToolkit.Providers/XRSDK/Editor/ConfigurationChecker/XRSDKConfigurationChecker.cs

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@ static class XRSDKConfigurationChecker
1818
private const string AsmDefFileName = "Microsoft.MixedReality.Toolkit.Providers.XRSDK.asmdef";
1919
private const string XRManagementReference = "Unity.XR.Management";
2020
private const string ARSubsystemsReference = "Unity.XR.ARSubsystems";
21+
private const string SpatialTrackingReference = "UnityEngine.SpatialTracking";
2122

2223
#if UNITY_2019_3_OR_NEWER
2324
private static readonly VersionDefine XRManagementDefine = new VersionDefine("com.unity.xr.management", "", "XR_MANAGEMENT_ENABLED");
2425
private static readonly VersionDefine ARSubsystemsDefine = new VersionDefine("com.unity.xr.arsubsystems", "", "ARSUBSYSTEMS_ENABLED");
26+
private static readonly VersionDefine SpatialTrackingDefine = new VersionDefine("com.unity.xr.legacyinputhelpers", "", "SPATIALTRACKING_ENABLED");
2527
#endif // UNITY_2019_3_OR_NEWER
2628

2729
static XRSDKConfigurationChecker()
@@ -86,10 +88,16 @@ private static void UpdateAsmDef()
8688
}
8789
if (!references.Contains(ARSubsystemsReference))
8890
{
89-
// Add a reference to the spatial tracking assembly
91+
// Add a reference to the ARSubsystems assembly
9092
references.Add(ARSubsystemsReference);
9193
changed = true;
9294
}
95+
if (!references.Contains(SpatialTrackingReference))
96+
{
97+
// Add a reference to the spatial tracking assembly
98+
references.Add(SpatialTrackingReference);
99+
changed = true;
100+
}
93101

94102
if (!versionDefines.Contains(XRManagementDefine))
95103
{
@@ -103,19 +111,31 @@ private static void UpdateAsmDef()
103111
versionDefines.Add(ARSubsystemsDefine);
104112
changed = true;
105113
}
114+
if (!versionDefines.Contains(SpatialTrackingDefine))
115+
{
116+
// Add the spatial tracking #define
117+
versionDefines.Add(SpatialTrackingDefine);
118+
changed = true;
119+
}
106120
#else
107121
if (references.Contains(XRManagementReference))
108122
{
109-
// Remove the reference to the spatial tracking assembly
123+
// Remove the reference to the XRManagement assembly
110124
references.Remove(XRManagementReference);
111125
changed = true;
112126
}
113127
if (references.Contains(ARSubsystemsReference))
114128
{
115-
// Add a reference to the spatial tracking assembly
129+
// Remove the reference to the ARSubsystems assembly
116130
references.Remove(ARSubsystemsReference);
117131
changed = true;
118132
}
133+
if (references.Contains(SpatialTrackingReference))
134+
{
135+
// Remove the reference to the spatial tracking assembly
136+
references.Remove(SpatialTrackingReference);
137+
changed = true;
138+
}
119139
#endif
120140

121141
if (changed)

Assets/MixedRealityToolkit.Providers/XRSDK/GenericXRSDKCameraSettings.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
using Microsoft.MixedReality.Toolkit.CameraSystem;
55
using Microsoft.MixedReality.Toolkit.Utilities;
6+
using UnityEngine;
7+
using UnityEngine.SpatialTracking;
68

79
namespace Microsoft.MixedReality.Toolkit.XRSDK
810
{
@@ -29,11 +31,38 @@ public GenericXRSDKCameraSettings(
2931
BaseCameraSettingsProfile profile = null) : base(cameraSystem, name, priority, profile)
3032
{ }
3133

34+
private TrackedPoseDriver trackedPoseDriver = null;
35+
3236
#region IMixedRealityCameraSettings
3337

3438
/// <inheritdoc/>
3539
public override bool IsOpaque => XRSDKSubsystemHelpers.DisplaySubsystem?.displayOpaque ?? true;
3640

41+
/// <inheritdoc/>
42+
public override void Enable()
43+
{
44+
base.Enable();
45+
46+
// Only track the TrackedPoseDriver if we added it ourselves.
47+
// There may be a pre-configured TrackedPoseDriver on the camera.
48+
if (!CameraCache.Main.GetComponent<TrackedPoseDriver>())
49+
{
50+
trackedPoseDriver = CameraCache.Main.gameObject.AddComponent<TrackedPoseDriver>();
51+
}
52+
}
53+
54+
/// <inheritdoc />
55+
public override void Disable()
56+
{
57+
if (trackedPoseDriver != null)
58+
{
59+
Object.Destroy(trackedPoseDriver);
60+
trackedPoseDriver = null;
61+
}
62+
63+
base.Disable();
64+
}
65+
3766
#endregion IMixedRealityCameraSettings
3867
}
3968
}

0 commit comments

Comments
 (0)