Skip to content

Commit 905fab4

Browse files
authored
Merge pull request #7061 from keveleigh/xr-sdk-spatial
Add spatial awareness and camera system providers, as well as WMR-specific support for each
2 parents c17ecee + 3539043 commit 905fab4

24 files changed

+1016
-10
lines changed

Assets/MixedRealityToolkit.Providers/WindowsMixedReality/XRSDK.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/MixedRealityToolkit.Providers/WindowsMixedReality/XRSDK/Editor.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"name": "Microsoft.MixedReality.Toolkit.Providers.XRSDK.WindowsMixedReality.Editor",
3+
"references": [
4+
"Microsoft.MixedReality.Toolkit.Editor.Utilities"
5+
],
6+
"includePlatforms": [
7+
"Editor"
8+
],
9+
"excludePlatforms": [],
10+
"allowUnsafeCode": false,
11+
"overrideReferences": false,
12+
"precompiledReferences": [],
13+
"autoReferenced": true,
14+
"defineConstraints": [],
15+
"versionDefines": [],
16+
"noEngineReferences": false
17+
}

Assets/MixedRealityToolkit.Providers/WindowsMixedReality/XRSDK/Editor/Microsoft.MixedReality.Toolkit.Providers.XRSDK.WMR.Editor.asmdef.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
// Copyright (c) Microsoft Corporation.
2+
// Licensed under the MIT License.
3+
4+
using Microsoft.MixedReality.Toolkit.Utilities.Editor;
5+
using System.Collections.Generic;
6+
using System.IO;
7+
using UnityEditor;
8+
using UnityEngine;
9+
10+
namespace Microsoft.MixedReality.Toolkit.XRSDK.WindowsMixedReality
11+
{
12+
/// <summary>
13+
/// Class to perform checks for configuration checks for the WMR XR SDK provider.
14+
/// </summary>
15+
[InitializeOnLoad]
16+
static class WindowsMixedRealityXRSDKConfigurationChecker
17+
{
18+
private const string AsmDefFileName = "Microsoft.MixedReality.Toolkit.Providers.XRSDK.WMR.asmdef";
19+
private const string WindowsMixedRealityReference = "Unity.XR.WindowsMixedReality";
20+
21+
#if UNITY_2019_3_OR_NEWER
22+
private static readonly VersionDefine WindowsMixedRealityDefine = new VersionDefine("com.unity.xr.windowsmr", "", "WMR_ENABLED");
23+
#endif // UNITY_2019_3_OR_NEWER
24+
25+
static WindowsMixedRealityXRSDKConfigurationChecker()
26+
{
27+
UpdateAsmDef();
28+
}
29+
30+
/// <summary>
31+
/// Updates the assembly definition to contain the appropriate references based on the Unity version.
32+
/// </summary>
33+
/// <remarks>
34+
/// Versions of Unity may have different factorings of components. To address this, the UpdateAsmDef
35+
/// method conditionally compiles for the version currently in use.
36+
/// To ensure proper compilation on each Unity version, the following steps are performed:
37+
/// - Load the Microsoft.MixedReality.Toolkit.Providers.XRSDK.WMR.asmdef file
38+
/// - If Unity 2018: nothing
39+
/// - If Unity 2019 and newer: Unity.XR.WindowsMixedReality
40+
/// - Save the Microsoft.MixedReality.Toolkit.Providers.XRSDK.WMR.asmdef file
41+
/// This will result in Unity reloading the assembly with the appropriate dependencies.
42+
/// </remarks>
43+
private static void UpdateAsmDef()
44+
{
45+
FileInfo[] asmDefFiles = FileUtilities.FindFilesInAssets(AsmDefFileName);
46+
47+
if (asmDefFiles.Length == 0)
48+
{
49+
Debug.LogWarning($"Unable to locate file: {AsmDefFileName}");
50+
return;
51+
}
52+
if (asmDefFiles.Length > 1)
53+
{
54+
Debug.LogWarning($"Multiple ({asmDefFiles.Length}) {AsmDefFileName} instances found. Modifying only the first.");
55+
}
56+
57+
AssemblyDefinition asmDef = AssemblyDefinition.Load(asmDefFiles[0].FullName);
58+
if (asmDef == null)
59+
{
60+
Debug.LogWarning($"Unable to load file: {AsmDefFileName}");
61+
return;
62+
}
63+
64+
List<string> references = new List<string>();
65+
if (asmDef.References != null)
66+
{
67+
references.AddRange(asmDef.References);
68+
}
69+
70+
bool changed = false;
71+
72+
#if UNITY_2019_3_OR_NEWER
73+
List<VersionDefine> versionDefines = new List<VersionDefine>();
74+
if (asmDef.VersionDefines != null)
75+
{
76+
versionDefines.AddRange(asmDef.VersionDefines);
77+
}
78+
79+
if (!references.Contains(WindowsMixedRealityReference))
80+
{
81+
// Add a reference to the XR SDK WMR assembly
82+
references.Add(WindowsMixedRealityReference);
83+
changed = true;
84+
}
85+
86+
if (!versionDefines.Contains(WindowsMixedRealityDefine))
87+
{
88+
// Add the WMR #define
89+
versionDefines.Add(WindowsMixedRealityDefine);
90+
changed = true;
91+
}
92+
#else
93+
if (references.Contains(WindowsMixedRealityReference))
94+
{
95+
// Remove the reference to the XR SDK WMR assembly
96+
references.Remove(WindowsMixedRealityReference);
97+
changed = true;
98+
}
99+
#endif
100+
101+
if (changed)
102+
{
103+
asmDef.References = references.ToArray();
104+
#if UNITY_2019_3_OR_NEWER
105+
asmDef.VersionDefines = versionDefines.ToArray();
106+
#endif // UNITY_2019_3_OR_NEWER
107+
asmDef.Save(asmDefFiles[0].FullName);
108+
}
109+
}
110+
}
111+
}

Assets/MixedRealityToolkit.Providers/WindowsMixedReality/XRSDK/Editor/WindowsMixedRealityXRSDKConfigurationChecker.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"name": "Microsoft.MixedReality.Toolkit.Providers.XRSDK.WindowsMixedReality",
3+
"references": [
4+
"Microsoft.MixedReality.Toolkit",
5+
"Microsoft.MixedReality.Toolkit.Providers.WindowsMixedReality.Shared",
6+
"Microsoft.MixedReality.Toolkit.Providers.XRSDK"
7+
],
8+
"optionalUnityReferences": [],
9+
"includePlatforms": [
10+
"Editor",
11+
"WSA"
12+
],
13+
"excludePlatforms": [],
14+
"allowUnsafeCode": false,
15+
"overrideReferences": false,
16+
"precompiledReferences": [],
17+
"autoReferenced": true,
18+
"defineConstraints": [
19+
"UNITY_2019_3_OR_NEWER"
20+
]
21+
}

Assets/MixedRealityToolkit.Providers/WindowsMixedReality/XRSDK/Microsoft.MixedReality.Toolkit.Providers.XRSDK.WMR.asmdef.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// Copyright (c) Microsoft Corporation.
2+
// Licensed under the MIT License.
3+
4+
using Microsoft.MixedReality.Toolkit.CameraSystem;
5+
using Microsoft.MixedReality.Toolkit.Utilities;
6+
using Microsoft.MixedReality.Toolkit.WindowsMixedReality;
7+
8+
namespace Microsoft.MixedReality.Toolkit.XRSDK.WindowsMixedReality
9+
{
10+
/// <summary>
11+
/// Camera settings provider for use with Windows Mixed Reality and XR SDK.
12+
/// </summary>
13+
[MixedRealityDataProvider(
14+
typeof(IMixedRealityCameraSystem),
15+
SupportedPlatforms.WindowsUniversal | SupportedPlatforms.WindowsStandalone,
16+
"XR SDK Windows Mixed Reality Camera Settings",
17+
"WindowsMixedReality/Shared/Profiles/DefaultWindowsMixedRealityCameraSettingsProfile.asset",
18+
"MixedRealityToolkit.Providers")]
19+
public class WindowsMixedRealityCameraSettings : BaseWindowsMixedRealityCameraSettings
20+
{
21+
/// <summary>
22+
/// Constructor.
23+
/// </summary>
24+
/// <param name="cameraSystem">The instance of the camera system which is managing this provider.</param>
25+
/// <param name="name">Friendly name of the provider.</param>
26+
/// <param name="priority">Provider priority. Used to determine order of instantiation.</param>
27+
/// <param name="profile">The provider's configuration profile.</param>
28+
public WindowsMixedRealityCameraSettings(
29+
IMixedRealityCameraSystem cameraSystem,
30+
string name = null,
31+
uint priority = DefaultPriority,
32+
BaseCameraSettingsProfile profile = null) : base(cameraSystem, name, priority, profile)
33+
{ }
34+
35+
#region IMixedRealityCameraSettings
36+
37+
/// <inheritdoc/>
38+
public override bool IsOpaque => XRSDKSubsystemHelpers.DisplaySubsystem?.displayOpaque ?? true;
39+
40+
#endregion IMixedRealityCameraSettings
41+
}
42+
}

Assets/MixedRealityToolkit.Providers/WindowsMixedReality/XRSDK/WindowsMixedRealityCameraSettings.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)