From 8c10cd6f8386ddad007c0d601317a27892cf84f2 Mon Sep 17 00:00:00 2001
From: Marlena Klein <marlenaklein@microsoft.com>
Date: Tue, 17 Oct 2023 15:57:39 -0700
Subject: [PATCH 1/3] Asmdef updates

---
 .../MixedRealityToolkitFacadeHandler.cs       |  2 +-
 ...ityToolkitConfigurationProfileInspector.cs |  2 +-
 .../PropertyDrawers/SceneInfoUtils.cs         |  5 ++-
 Assets/MRTK/Core/MRTK.Core.asmdef             |  6 +++
 .../MRTK/Core/Services/MixedRealityToolkit.cs |  6 +--
 .../Async/Internal/AsyncCoroutineRunner.cs    |  6 ++-
 .../Core/Utilities/Async/MRTK.Async.asmdef    |  5 ++-
 Assets/MRTK/Core/Utilities/CameraCache.cs     |  2 +-
 .../MRTK/Core/Utilities/FindObjectUtility.cs  | 38 +++++++++++++++++++
 .../Core/Utilities/FindObjectUtility.cs.meta  | 11 ++++++
 .../Scripts/UserInputRecorder.cs              |  5 ++-
 .../General/Scripts/Utils/StatusText.cs       |  3 +-
 .../SceneTransitionService.cs                 |  4 +-
 .../Oculus/XRSDK/OculusXRSDKDeviceManager.cs  |  2 +-
 .../BoundsControlMigrationHandler.cs          |  2 +-
 .../Features/Utilities/WorldAnchorManager.cs  |  2 +-
 .../Input/Scripts/InputSystemManager.cs       |  2 +-
 .../InputSystem/MixedRealityInputSystem.cs    |  2 +-
 .../MixedRealityTeleportSystem.cs             |  2 +-
 .../Core/MixedRealityToolkitTests.cs          |  3 +-
 .../Tests/PlayModeTests/BaseCursorTests.cs    |  4 +-
 .../PlayModeTests/ChangeActiveProfileTests.cs |  5 ++-
 .../Hands/RiggedHandVisualizerTests.cs        |  2 +-
 .../Async/AsyncCoroutineRunnerTests.cs        |  2 +-
 .../TestUtilities/PlayModeTestUtilities.cs    |  2 +-
 .../MRTK/Tests/TestUtilities/TestUtilities.cs |  4 +-
 .../MixedRealityOptimizeWindow.cs             | 10 ++---
 .../Toolbox/MixedRealityToolboxWindow.cs      |  3 +-
 28 files changed, 104 insertions(+), 38 deletions(-)
 create mode 100644 Assets/MRTK/Core/Utilities/FindObjectUtility.cs
 create mode 100644 Assets/MRTK/Core/Utilities/FindObjectUtility.cs.meta

diff --git a/Assets/MRTK/Core/Inspectors/MixedRealityToolkitFacadeHandler.cs b/Assets/MRTK/Core/Inspectors/MixedRealityToolkitFacadeHandler.cs
index b0f2b77656c..1c476255403 100644
--- a/Assets/MRTK/Core/Inspectors/MixedRealityToolkitFacadeHandler.cs
+++ b/Assets/MRTK/Core/Inspectors/MixedRealityToolkitFacadeHandler.cs
@@ -59,7 +59,7 @@ private static void OnSceneSaved(Scene scene)
 
         private static void CleanupCurrentFacades()
         {
-            foreach (MixedRealityToolkit toolkitInstance in GameObject.FindObjectsOfType<MixedRealityToolkit>())
+            foreach (MixedRealityToolkit toolkitInstance in FindObjectUtility.FindObjectsOfType<MixedRealityToolkit>())
             {
                 DestroyAllChildren(toolkitInstance);
             }
diff --git a/Assets/MRTK/Core/Inspectors/Profiles/MixedRealityToolkitConfigurationProfileInspector.cs b/Assets/MRTK/Core/Inspectors/Profiles/MixedRealityToolkitConfigurationProfileInspector.cs
index 5129041442b..b7530e2bc11 100644
--- a/Assets/MRTK/Core/Inspectors/Profiles/MixedRealityToolkitConfigurationProfileInspector.cs
+++ b/Assets/MRTK/Core/Inspectors/Profiles/MixedRealityToolkitConfigurationProfileInspector.cs
@@ -423,7 +423,7 @@ protected override void OnEnable()
                                 }
                                 else
                                 {
-                                    foreach (var dbr in FindObjectsOfType<DepthBufferRenderer>())
+                                    foreach (var dbr in FindObjectUtility.FindObjectsOfType<DepthBufferRenderer>())
                                     {
                                         UnityObjectExtensions.DestroyObject(dbr);
                                     }
diff --git a/Assets/MRTK/Core/Inspectors/PropertyDrawers/SceneInfoUtils.cs b/Assets/MRTK/Core/Inspectors/PropertyDrawers/SceneInfoUtils.cs
index 9741c6e6403..74ab65ef15b 100644
--- a/Assets/MRTK/Core/Inspectors/PropertyDrawers/SceneInfoUtils.cs
+++ b/Assets/MRTK/Core/Inspectors/PropertyDrawers/SceneInfoUtils.cs
@@ -1,6 +1,7 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+using Microsoft.MixedReality.Toolkit.Utilities;
 using Microsoft.MixedReality.Toolkit.SceneSystem;
 using System;
 using System.Collections.Generic;
@@ -346,7 +347,7 @@ private static void RefreshSceneInfoFieldsInOpenScenes()
                 foreach (Tuple<Type, FieldInfo> typeFieldInfoPair in cachedComponentTypes)
                 {
                     FieldInfo fieldInfo = typeFieldInfoPair.Item2;
-                    foreach (Component source in GameObject.FindObjectsOfType(typeFieldInfoPair.Item1))
+                    foreach (Component source in FindObjectUtility.FindObjectsOfType(typeFieldInfoPair.Item1))
                     {
                         CheckForChangesInField(source, fieldInfo);
                     }
@@ -425,4 +426,4 @@ private static void CheckForChangesInField(UnityEngine.Object source, FieldInfo
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/Assets/MRTK/Core/MRTK.Core.asmdef b/Assets/MRTK/Core/MRTK.Core.asmdef
index ae359a5f76c..c8cb007717a 100644
--- a/Assets/MRTK/Core/MRTK.Core.asmdef
+++ b/Assets/MRTK/Core/MRTK.Core.asmdef
@@ -1,5 +1,6 @@
 {
     "name": "Microsoft.MixedReality.Toolkit",
+    "rootNamespace": "",
     "references": [
         "Microsoft.MixedReality.Toolkit.Async",
         "Microsoft.MixedReality.Toolkit.Editor.Utilities",
@@ -22,6 +23,11 @@
             "name": "com.unity.xr.management",
             "expression": "",
             "define": "XR_MANAGEMENT_ENABLED"
+        },
+        {
+            "name": "Unity",
+            "expression": "2021.3.18",
+            "define": "UNITY_2021_3_18_OR_NEWER"
         }
     ],
     "noEngineReferences": false
diff --git a/Assets/MRTK/Core/Services/MixedRealityToolkit.cs b/Assets/MRTK/Core/Services/MixedRealityToolkit.cs
index 0ca55a54591..3d4ad18c830 100644
--- a/Assets/MRTK/Core/Services/MixedRealityToolkit.cs
+++ b/Assets/MRTK/Core/Services/MixedRealityToolkit.cs
@@ -132,7 +132,7 @@ public MixedRealityToolkitConfigurationProfile ActiveProfile
         /// </remarks>
         public static void SetProfileBeforeInitialization(MixedRealityToolkitConfigurationProfile profile)
         {
-            MixedRealityToolkit toolkit = FindObjectOfType<MixedRealityToolkit>();
+            MixedRealityToolkit toolkit = FindObjectUtility.FindObjectByType<MixedRealityToolkit>();
             toolkit.activeProfile = profile;
         }
 
@@ -586,7 +586,7 @@ private void EnsureMixedRealityRequirements()
             bool addedComponents = false;
             if (!Application.isPlaying && CameraCache.Main != null)
             {
-                EventSystem[] eventSystems = FindObjectsOfType<EventSystem>();
+                EventSystem[] eventSystems = FindObjectUtility.FindObjectsOfType<EventSystem>();
 
                 if (eventSystems.Length == 0)
                 {
@@ -644,7 +644,7 @@ public static MixedRealityToolkit Instance
                 //
                 // To avoid returning null in this case, make sure to search the scene for MRTK.
                 // We do this only when in editor to avoid any performance cost at runtime.
-                List<MixedRealityToolkit> mrtks = new List<MixedRealityToolkit>(FindObjectsOfType<MixedRealityToolkit>());
+                List<MixedRealityToolkit> mrtks = new List<MixedRealityToolkit>(FindObjectUtility.FindObjectsOfType<MixedRealityToolkit>());
                 // Sort the list by instance ID so we get deterministic results when selecting our next active instance
                 mrtks.Sort(delegate (MixedRealityToolkit i1, MixedRealityToolkit i2) { return i1.GetInstanceID().CompareTo(i2.GetInstanceID()); });
 
diff --git a/Assets/MRTK/Core/Utilities/Async/Internal/AsyncCoroutineRunner.cs b/Assets/MRTK/Core/Utilities/Async/Internal/AsyncCoroutineRunner.cs
index 3d2801879a8..562517c1650 100644
--- a/Assets/MRTK/Core/Utilities/Async/Internal/AsyncCoroutineRunner.cs
+++ b/Assets/MRTK/Core/Utilities/Async/Internal/AsyncCoroutineRunner.cs
@@ -51,7 +51,11 @@ internal static AsyncCoroutineRunner Instance
             {
                 if (instance == null)
                 {
-                    instance = FindObjectOfType<AsyncCoroutineRunner>();
+#if UNITY_2021_3_18_OR_NEWER
+                    instance = UnityEngine.Object.FindFirstObjectByType<AsyncCoroutineRunner>();
+#else
+                    instance = GameObject.FindObjectOfType<AsyncCoroutineRunner>();
+#endif
                 }
 
                 // FindObjectOfType() only search for objects attached to active GameObjects. The FindObjectOfType(bool includeInactive) variant is not available to Unity 2019.4 and earlier so cannot be used.
diff --git a/Assets/MRTK/Core/Utilities/Async/MRTK.Async.asmdef b/Assets/MRTK/Core/Utilities/Async/MRTK.Async.asmdef
index 82e205dc99a..c3f00b605ac 100644
--- a/Assets/MRTK/Core/Utilities/Async/MRTK.Async.asmdef
+++ b/Assets/MRTK/Core/Utilities/Async/MRTK.Async.asmdef
@@ -1,12 +1,13 @@
 {
     "name": "Microsoft.MixedReality.Toolkit.Async",
     "references": [],
-    "optionalUnityReferences": [],
     "includePlatforms": [],
     "excludePlatforms": [],
     "allowUnsafeCode": false,
     "overrideReferences": false,
     "precompiledReferences": [],
     "autoReferenced": true,
-    "defineConstraints": []
+    "defineConstraints": [],
+    "versionDefines": [],
+    "noEngineReferences": false
 }
\ No newline at end of file
diff --git a/Assets/MRTK/Core/Utilities/CameraCache.cs b/Assets/MRTK/Core/Utilities/CameraCache.cs
index fb3ed239216..528bd225e7b 100644
--- a/Assets/MRTK/Core/Utilities/CameraCache.cs
+++ b/Assets/MRTK/Core/Utilities/CameraCache.cs
@@ -38,7 +38,7 @@ public static Camera Main
                     Debug.Log("No main camera found. Searching for cameras in the scene.");
 
                     // If no main camera was found, try to determine one.
-                    Camera[] cameras = Object.FindObjectsOfType<Camera>();
+                    Camera[] cameras = FindObjectUtility.FindObjectsOfType<Camera>();
                     if (cameras.Length == 0)
                     {
                         Debug.LogWarning("No cameras found. Creating a \"MainCamera\".");
diff --git a/Assets/MRTK/Core/Utilities/FindObjectUtility.cs b/Assets/MRTK/Core/Utilities/FindObjectUtility.cs
new file mode 100644
index 00000000000..1948a8981a3
--- /dev/null
+++ b/Assets/MRTK/Core/Utilities/FindObjectUtility.cs
@@ -0,0 +1,38 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+using UnityEngine;
+using System;
+
+namespace Microsoft.MixedReality.Toolkit.Utilities
+{
+    public static class FindObjectUtility
+    {
+        public static T FindObjectByType<T>(bool includeInactive = false) where T : Component
+        {
+#if UNITY_2021_3_18_OR_NEWER
+        return UnityEngine.Object.FindFirstObjectByType<T>(includeInactive ? FindObjectsInactive.Include : FindObjectsInactive.Exclude);
+#else 
+            return UnityEngine.Object.FindObjectOfType<T>(includeInactive);
+#endif
+        }
+
+        public static T[] FindObjectsOfType<T>(bool includeInactive = false, bool sort = true) where T : Component
+        {
+#if UNITY_2021_3_18_OR_NEWER
+        return UnityEngine.Object.FindObjectsByType<T>(includeInactive ? FindObjectsInactive.Include : FindObjectsInactive.Exclude, sort ? FindObjectsSortMode.InstanceID : FindObjectsSortMode.None);
+#else
+            return UnityEngine.Object.FindObjectsOfType<T>(includeInactive);
+#endif
+        }
+
+        public static UnityEngine.Object[] FindObjectsOfType(Type type, bool includeInactive = false, bool sort = true)
+        {
+#if UNITY_2021_3_18_OR_NEWER
+            return UnityEngine.Object.FindObjectsByType(type, includeInactive ? FindObjectsInactive.Include : FindObjectsInactive.Exclude, sort ? FindObjectsSortMode.InstanceID : FindObjectsSortMode.None);
+#else
+            return UnityEngine.Object.FindObjectsOfType(type, includeInactive);
+#endif
+        }
+    }
+}
diff --git a/Assets/MRTK/Core/Utilities/FindObjectUtility.cs.meta b/Assets/MRTK/Core/Utilities/FindObjectUtility.cs.meta
new file mode 100644
index 00000000000..e77e43dda87
--- /dev/null
+++ b/Assets/MRTK/Core/Utilities/FindObjectUtility.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b8a334127c067a34da7cd12800934ae3
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/MRTK/Examples/Demos/EyeTracking/DemoVisualizer/Scripts/UserInputRecorder.cs b/Assets/MRTK/Examples/Demos/EyeTracking/DemoVisualizer/Scripts/UserInputRecorder.cs
index 267af435ed4..e0c1fc481f3 100644
--- a/Assets/MRTK/Examples/Demos/EyeTracking/DemoVisualizer/Scripts/UserInputRecorder.cs
+++ b/Assets/MRTK/Examples/Demos/EyeTracking/DemoVisualizer/Scripts/UserInputRecorder.cs
@@ -1,6 +1,7 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+using Microsoft.MixedReality.Toolkit.Utilities;
 using Microsoft.MixedReality.Toolkit.Input;
 using System;
 using System.IO;
@@ -26,7 +27,7 @@ public static UserInputRecorder Instance
             {
                 if (instance == null)
                 {
-                    instance = FindObjectOfType<UserInputRecorder>();
+                    instance = FindObjectUtility.FindObjectByType<UserInputRecorder>();
                 }
                 return instance;
             }
@@ -148,4 +149,4 @@ public override void OnDestroy()
             base.OnDestroy();
         }
     }
-}
\ No newline at end of file
+}
diff --git a/Assets/MRTK/Examples/Demos/EyeTracking/General/Scripts/Utils/StatusText.cs b/Assets/MRTK/Examples/Demos/EyeTracking/General/Scripts/Utils/StatusText.cs
index 13038156402..6c888f413b7 100644
--- a/Assets/MRTK/Examples/Demos/EyeTracking/General/Scripts/Utils/StatusText.cs
+++ b/Assets/MRTK/Examples/Demos/EyeTracking/General/Scripts/Utils/StatusText.cs
@@ -1,6 +1,7 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+using Microsoft.MixedReality.Toolkit.Utilities;
 using UnityEngine;
 
 namespace Microsoft.MixedReality.Toolkit.Examples.Demos.EyeTracking
@@ -17,7 +18,7 @@ public static StatusText Instance
             {
                 if (_Instance == null)
                 {
-                    _Instance = FindObjectOfType<StatusText>();
+                    _Instance = FindObjectUtility.FindObjectByType<StatusText>();
                 }
                 return _Instance;
             }
diff --git a/Assets/MRTK/Extensions/SceneTransitionService/SceneTransitionService.cs b/Assets/MRTK/Extensions/SceneTransitionService/SceneTransitionService.cs
index a0aed33e1ee..c61ec50060c 100644
--- a/Assets/MRTK/Extensions/SceneTransitionService/SceneTransitionService.cs
+++ b/Assets/MRTK/Extensions/SceneTransitionService/SceneTransitionService.cs
@@ -422,7 +422,7 @@ private List<Camera> GatherFadeTargetCameras()
                 {
                     case CameraFaderTargets.All:
                         // Add every single camera in all scenes
-                        targetCameras.AddRange(GameObject.FindObjectsOfType<Camera>());
+                        targetCameras.AddRange(FindObjectUtility.FindObjectsOfType<Camera>());
                         break;
 
                     case CameraFaderTargets.Main:
@@ -430,7 +430,7 @@ private List<Camera> GatherFadeTargetCameras()
                         break;
 
                     case CameraFaderTargets.UI:
-                        foreach (Canvas canvas in GameObject.FindObjectsOfType<Canvas>())
+                        foreach (Canvas canvas in FindObjectUtility.FindObjectsOfType<Canvas>())
                         {
                             switch (canvas.renderMode)
                             {
diff --git a/Assets/MRTK/Providers/Oculus/XRSDK/OculusXRSDKDeviceManager.cs b/Assets/MRTK/Providers/Oculus/XRSDK/OculusXRSDKDeviceManager.cs
index d9803f3f6af..65ccc28a9b0 100644
--- a/Assets/MRTK/Providers/Oculus/XRSDK/OculusXRSDKDeviceManager.cs
+++ b/Assets/MRTK/Providers/Oculus/XRSDK/OculusXRSDKDeviceManager.cs
@@ -207,7 +207,7 @@ public override void Update()
 
         private void SetupInput()
         {
-            cameraRig = GameObject.FindObjectOfType<OVRCameraRig>();
+            cameraRig = FindObjectUtility.FindObjectOfType<OVRCameraRig>();
             if (cameraRig == null)
             {
                 var mainCamera = CameraCache.Main;
diff --git a/Assets/MRTK/SDK/Editor/Migration/BoundsControlMigrationHandler.cs b/Assets/MRTK/SDK/Editor/Migration/BoundsControlMigrationHandler.cs
index 2b4c95f9335..6a8223ac68b 100644
--- a/Assets/MRTK/SDK/Editor/Migration/BoundsControlMigrationHandler.cs
+++ b/Assets/MRTK/SDK/Editor/Migration/BoundsControlMigrationHandler.cs
@@ -297,7 +297,7 @@ private void MigrateAppBar(BoundingBox boundingBox, BoundsControl boundsControl)
         {
             // note: this might be expensive for larger scenes but we don't know where the appbar is 
             // placed in the hierarchy so we have to search the scene for it
-            AppBar[] appBars = Object.FindObjectsOfType<AppBar>();
+            AppBar[] appBars = FindObjectUtility.FindObjectsOfType<AppBar>();
             for (int i = 0; i < appBars.Length; ++i)
             {
                 AppBar appBar = appBars[i];
diff --git a/Assets/MRTK/SDK/Experimental/Features/Utilities/WorldAnchorManager.cs b/Assets/MRTK/SDK/Experimental/Features/Utilities/WorldAnchorManager.cs
index 7c21422613b..f1333dd9d71 100644
--- a/Assets/MRTK/SDK/Experimental/Features/Utilities/WorldAnchorManager.cs
+++ b/Assets/MRTK/SDK/Experimental/Features/Utilities/WorldAnchorManager.cs
@@ -336,7 +336,7 @@ public void RemoveAllAnchors()
                 Debug.LogWarning("[WorldAnchorManager] RemoveAllAnchors called before anchor store is ready.");
             }
 
-            var anchors = FindObjectsOfType<WorldAnchor>();
+            var anchors = FindObjectUtility.FindObjectsOfType<WorldAnchor>();
 
             if (anchors == null)
             {
diff --git a/Assets/MRTK/SDK/Experimental/ServiceManagers/Input/Scripts/InputSystemManager.cs b/Assets/MRTK/SDK/Experimental/ServiceManagers/Input/Scripts/InputSystemManager.cs
index 8b3f99de8e8..740cebf22aa 100644
--- a/Assets/MRTK/SDK/Experimental/ServiceManagers/Input/Scripts/InputSystemManager.cs
+++ b/Assets/MRTK/SDK/Experimental/ServiceManagers/Input/Scripts/InputSystemManager.cs
@@ -66,7 +66,7 @@ private void InitializeManager()
             Initialize<IMixedRealityRaycastProvider>(profile.RaycastProviderType, args: args);
 
 
-            EventSystem[] eventSystems = FindObjectsOfType<EventSystem>();
+            EventSystem[] eventSystems = FindObjectUtility.FindObjectsOfType<EventSystem>();
 
             if (eventSystems.Length == 0)
             {
diff --git a/Assets/MRTK/Services/InputSystem/MixedRealityInputSystem.cs b/Assets/MRTK/Services/InputSystem/MixedRealityInputSystem.cs
index ab7e3031eac..09541171cf8 100644
--- a/Assets/MRTK/Services/InputSystem/MixedRealityInputSystem.cs
+++ b/Assets/MRTK/Services/InputSystem/MixedRealityInputSystem.cs
@@ -170,7 +170,7 @@ public override void Initialize()
                 return;
             }
 
-            BaseInputModule[] inputModules = UnityEngine.Object.FindObjectsOfType<BaseInputModule>();
+            BaseInputModule[] inputModules = FindObjectUtility.FindObjectsOfType<BaseInputModule>();
 
             if (inputModules.Length == 0)
             {
diff --git a/Assets/MRTK/Services/TeleportSystem/MixedRealityTeleportSystem.cs b/Assets/MRTK/Services/TeleportSystem/MixedRealityTeleportSystem.cs
index 2c15ecc53cc..ec54b294a13 100644
--- a/Assets/MRTK/Services/TeleportSystem/MixedRealityTeleportSystem.cs
+++ b/Assets/MRTK/Services/TeleportSystem/MixedRealityTeleportSystem.cs
@@ -60,7 +60,7 @@ private void InitializeInternal()
 #if UNITY_EDITOR
             if (!UnityEditor.EditorApplication.isPlaying)
             {
-                var eventSystems = Object.FindObjectsOfType<EventSystem>();
+                var eventSystems = FindObjectUtility.FindObjectsOfType<EventSystem>();
 
                 if (eventSystems.Length == 0)
                 {
diff --git a/Assets/MRTK/Tests/EditModeTests/Core/MixedRealityToolkitTests.cs b/Assets/MRTK/Tests/EditModeTests/Core/MixedRealityToolkitTests.cs
index aff60ca0d3b..78a09f0a167 100644
--- a/Assets/MRTK/Tests/EditModeTests/Core/MixedRealityToolkitTests.cs
+++ b/Assets/MRTK/Tests/EditModeTests/Core/MixedRealityToolkitTests.cs
@@ -1,6 +1,7 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+using Microsoft.MixedReality.Toolkit.Utilities;
 using Microsoft.MixedReality.Toolkit.Tests.EditMode.Services;
 using NUnit.Framework;
 using System.Collections.Generic;
@@ -476,7 +477,7 @@ public void TestCreateMultipleInstancesInMultipleScenes()
                 _ = new GameObject("MixedRealityToolkit").AddComponent<MixedRealityToolkit>();
             }
 
-            MixedRealityToolkit[] instances = GameObject.FindObjectsOfType<MixedRealityToolkit>();
+            MixedRealityToolkit[] instances = FindObjectUtility.FindObjectsOfType<MixedRealityToolkit>();
             for (int i = 0; i < instances.Length; i++)
             {
                 MixedRealityToolkit.SetActiveInstance(instances[i]);
diff --git a/Assets/MRTK/Tests/PlayModeTests/BaseCursorTests.cs b/Assets/MRTK/Tests/PlayModeTests/BaseCursorTests.cs
index bd77cc2b1ce..cc4720368fe 100644
--- a/Assets/MRTK/Tests/PlayModeTests/BaseCursorTests.cs
+++ b/Assets/MRTK/Tests/PlayModeTests/BaseCursorTests.cs
@@ -360,9 +360,9 @@ public IEnumerator CursorContextScaleRotate()
         public IEnumerator CursorScaling()
         {
             // Finding or initializing necessary objects
-            Camera cam = GameObject.FindObjectOfType<Camera>();
+            Camera cam = FindObjectUtility.FindObjectByType<Camera>();
 
-            BaseCursor baseCursor = GameObject.FindObjectOfType<BaseCursor>();
+            BaseCursor baseCursor = FindObjectUtility.FindObjectByType<BaseCursor>();
             Assert.IsNotNull(baseCursor);
 
             // Make sure resizing is turned on
diff --git a/Assets/MRTK/Tests/PlayModeTests/ChangeActiveProfileTests.cs b/Assets/MRTK/Tests/PlayModeTests/ChangeActiveProfileTests.cs
index fab0e1dc951..0609ac44a55 100644
--- a/Assets/MRTK/Tests/PlayModeTests/ChangeActiveProfileTests.cs
+++ b/Assets/MRTK/Tests/PlayModeTests/ChangeActiveProfileTests.cs
@@ -10,6 +10,7 @@
 // issue will likely persist for 2018, this issue is worked around by wrapping all
 // play mode tests in this check.
 
+using Microsoft.MixedReality.Toolkit.Utilities;
 using Microsoft.MixedReality.Toolkit.Boundary;
 using NUnit.Framework;
 using System.Collections;
@@ -150,7 +151,7 @@ public IEnumerator VerifyPlayspaceChildren()
             int uiRaycastCameraCount = 0;
             // Confirm that we have one UIRaycastCamera.
             Debug.Log("Validating UIRaycastCamera count.");
-            Camera[] cameras = GameObject.FindObjectsOfType<Camera>();
+            Camera[] cameras = FindObjectUtility.FindObjectsOfType<Camera>();
             foreach (Camera camera in cameras)
             {
                 if ("UIRaycastCamera" == camera.name)
@@ -177,4 +178,4 @@ public IEnumerator VerifyPlayspaceChildren()
     }
 }
 
-#endif // !WINDOWS_UWP
\ No newline at end of file
+#endif // !WINDOWS_UWP
diff --git a/Assets/MRTK/Tests/PlayModeTests/Core/Providers/Hands/RiggedHandVisualizerTests.cs b/Assets/MRTK/Tests/PlayModeTests/Core/Providers/Hands/RiggedHandVisualizerTests.cs
index 114256874bf..56412613695 100644
--- a/Assets/MRTK/Tests/PlayModeTests/Core/Providers/Hands/RiggedHandVisualizerTests.cs
+++ b/Assets/MRTK/Tests/PlayModeTests/Core/Providers/Hands/RiggedHandVisualizerTests.cs
@@ -45,7 +45,7 @@ public IEnumerator TestRiggedHand()
             var rightHand = new TestHand(Handedness.Right);
             yield return rightHand.Show(Vector3.zero);
 
-            RiggedHandVisualizer handVisualizer = GameObject.FindObjectOfType<RiggedHandVisualizer>().GetComponent<RiggedHandVisualizer>();
+            RiggedHandVisualizer handVisualizer = FindObjectUtility.FindObjectByType<RiggedHandVisualizer>().GetComponent<RiggedHandVisualizer>();
 
             yield return rightHand.SetGesture(ArticulatedHandPose.GestureId.Open);
             Assert.IsTrue(handVisualizer.HandRenderer.sharedMaterial.GetFloat(handVisualizer.PinchStrengthMaterialProperty) < 0.5f);
diff --git a/Assets/MRTK/Tests/PlayModeTests/Core/Utilities/Async/AsyncCoroutineRunnerTests.cs b/Assets/MRTK/Tests/PlayModeTests/Core/Utilities/Async/AsyncCoroutineRunnerTests.cs
index 8d63548f766..f19b7cee197 100644
--- a/Assets/MRTK/Tests/PlayModeTests/Core/Utilities/Async/AsyncCoroutineRunnerTests.cs
+++ b/Assets/MRTK/Tests/PlayModeTests/Core/Utilities/Async/AsyncCoroutineRunnerTests.cs
@@ -29,7 +29,7 @@ public IEnumerator TestNonRootParenting()
         {
             // Set up the AsyncCoroutineRunner to be parented under the MixedRealityPlayspace,
             // to validate that the runner will correctly unparent it.
-            AsyncCoroutineRunner asyncCoroutineRunner = Object.FindObjectOfType<AsyncCoroutineRunner>();
+            AsyncCoroutineRunner asyncCoroutineRunner = FindObjectUtility.FindObjectByType<AsyncCoroutineRunner>();
             if (asyncCoroutineRunner == null)
             {
                 asyncCoroutineRunner = new GameObject("AsyncCoroutineRunner").AddComponent<AsyncCoroutineRunner>();
diff --git a/Assets/MRTK/Tests/TestUtilities/PlayModeTestUtilities.cs b/Assets/MRTK/Tests/TestUtilities/PlayModeTestUtilities.cs
index a90faa0ab17..d3210b0aecd 100644
--- a/Assets/MRTK/Tests/TestUtilities/PlayModeTestUtilities.cs
+++ b/Assets/MRTK/Tests/TestUtilities/PlayModeTestUtilities.cs
@@ -266,7 +266,7 @@ public static IEnumerator SetupMrtkWithoutGlobalInputHandlers()
             UnityEngine.Object.Destroy(CoreServices.InputSystem.GazeProvider.GazeCursor as Behaviour);
             CoreServices.InputSystem.GazeProvider.Enabled = false;
 
-            var diagnosticsVoiceControls = UnityEngine.Object.FindObjectsOfType<DiagnosticsSystemVoiceControls>();
+            var diagnosticsVoiceControls = FindObjectUtility.FindObjectsOfType<DiagnosticsSystemVoiceControls>();
             foreach (var diagnosticsComponent in diagnosticsVoiceControls)
             {
                 diagnosticsComponent.enabled = false;
diff --git a/Assets/MRTK/Tests/TestUtilities/TestUtilities.cs b/Assets/MRTK/Tests/TestUtilities/TestUtilities.cs
index f853a136a77..fbc6918ec5b 100644
--- a/Assets/MRTK/Tests/TestUtilities/TestUtilities.cs
+++ b/Assets/MRTK/Tests/TestUtilities/TestUtilities.cs
@@ -274,7 +274,7 @@ public static void InitializeMixedRealityToolkitAndCreateScenes(bool useDefaultP
 
         public static void InitializeCamera()
         {
-            Camera[] cameras = Object.FindObjectsOfType<Camera>();
+            Camera[] cameras = FindObjectUtility.FindObjectsOfType<Camera>();
 
             if (cameras.Length == 0)
             {
@@ -287,7 +287,7 @@ public static void InitializeMixedRealityToolkit(MixedRealityToolkitConfiguratio
             InitializeCamera();
 
             // Ensure the AsyncCoroutineRunner is added to avoid log spam in the tests
-            if (Object.FindObjectOfType<AsyncCoroutineRunner>() == null)
+            if (FindObjectUtility.FindObjectByType<AsyncCoroutineRunner>() == null)
             {
                 new GameObject("AsyncCoroutineRunner").AddComponent<AsyncCoroutineRunner>();
             }
diff --git a/Assets/MRTK/Tools/OptimizeWindow/MixedRealityOptimizeWindow.cs b/Assets/MRTK/Tools/OptimizeWindow/MixedRealityOptimizeWindow.cs
index 6a4d5d9d39e..eb3e9704260 100644
--- a/Assets/MRTK/Tools/OptimizeWindow/MixedRealityOptimizeWindow.cs
+++ b/Assets/MRTK/Tools/OptimizeWindow/MixedRealityOptimizeWindow.cs
@@ -506,13 +506,13 @@ private void RenderOptimalRenderingSection()
 
         private void AnalyzeScene()
         {
-            sceneLights = FindObjectsOfType<Light>();
+            sceneLights = FindObjectUtility.FindObjectsOfType<Light>();
 
             AnalyzeRaycastTargets();
 
             // TODO: Consider searching for particle renderers count?
 
-            MeshesOrderedByPolyCountDesc = FindObjectsOfType<MeshFilter>()
+            MeshesOrderedByPolyCountDesc = FindObjectUtility.FindObjectsOfType<MeshFilter>()
                 .Where(f => f != null && f.sharedMesh != null)
                 .OrderByDescending(f => f.sharedMesh.triangles.Length)
                 .ToArray();
@@ -537,8 +537,8 @@ private void AnalyzeScene()
 
         private void AnalyzeRaycastTargets()
         {
-            totalRaycastableUnityUI_Text = FindObjectsOfType<Text>().Where(t => t.raycastTarget).Count();
-            totalRaycastableUnityUI_TMP_UGUI = FindObjectsOfType<TextMeshProUGUI>().Where(t => t.raycastTarget).Count();
+            totalRaycastableUnityUI_Text = FindObjectUtility.FindObjectsOfType<Text>().Where(t => t.raycastTarget).Count();
+            totalRaycastableUnityUI_TMP_UGUI = FindObjectUtility.FindObjectsOfType<TextMeshProUGUI>().Where(t => t.raycastTarget).Count();
         }
 
         private void DiscoverMaterials()
@@ -591,7 +591,7 @@ private bool CanConvertMaterial(Material asset)
 
         private static void DisableRaycastTargetAll<T>() where T : Graphic
         {
-            DisableRaycastTarget(FindObjectsOfType<T>());
+            DisableRaycastTarget(FindObjectUtility.FindObjectsOfType<T>());
         }
 
         private static void DisableRaycastTarget(Graphic[] elements)
diff --git a/Assets/MRTK/Tools/Toolbox/MixedRealityToolboxWindow.cs b/Assets/MRTK/Tools/Toolbox/MixedRealityToolboxWindow.cs
index 5e50be21846..89ccb0ccea1 100644
--- a/Assets/MRTK/Tools/Toolbox/MixedRealityToolboxWindow.cs
+++ b/Assets/MRTK/Tools/Toolbox/MixedRealityToolboxWindow.cs
@@ -1,6 +1,7 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+using Microsoft.MixedReality.Toolkit.Utilities;
 using Microsoft.MixedReality.Toolkit.Utilities.Editor;
 using System;
 using System.Collections.Generic;
@@ -353,7 +354,7 @@ private static bool IsSearchMatch(string field, string searchContent)
 
         private void FindAllMRTKCanvases()
         {
-            canvasUtilities = FindObjectsOfType<Input.Utilities.CanvasUtility>();
+            canvasUtilities = FindObjectUtility.FindObjectsOfType<Input.Utilities.CanvasUtility>();
             dropdownValues = new string[canvasUtilities.Length];
 
             for (int i = 0; i < canvasUtilities.Length; i++)

From f01164e9e3e6169a97b777679c638293d2df59d5 Mon Sep 17 00:00:00 2001
From: Marlena Klein <marlenaklein@microsoft.com>
Date: Wed, 25 Oct 2023 11:04:41 -0700
Subject: [PATCH 2/3] Update Asmdef

---
 .../MixedRealityToolkitFacadeHandler.cs       |  2 +-
 ...ityToolkitConfigurationProfileInspector.cs |  2 +-
 .../PropertyDrawers/SceneInfoUtils.cs         |  2 +-
 .../MRTK/Core/Services/MixedRealityToolkit.cs |  4 +--
 .../Core/Utilities/Async/MRTK.Async.asmdef    |  9 ++++-
 Assets/MRTK/Core/Utilities/CameraCache.cs     |  2 +-
 .../MRTK/Core/Utilities/FindObjectUtility.cs  | 35 ++++++++++++++++---
 .../SceneTransitionService.cs                 |  4 +--
 .../BoundsControlMigrationHandler.cs          |  2 +-
 .../Features/Utilities/WorldAnchorManager.cs  |  2 +-
 .../Input/Scripts/InputSystemManager.cs       |  2 +-
 .../InputSystem/MixedRealityInputSystem.cs    |  2 +-
 .../MixedRealityTeleportSystem.cs             |  2 +-
 .../Core/MixedRealityToolkitTests.cs          |  2 +-
 .../PlayModeTests/ChangeActiveProfileTests.cs |  2 +-
 .../TestUtilities/PlayModeTestUtilities.cs    |  2 +-
 .../MRTK/Tests/TestUtilities/TestUtilities.cs |  2 +-
 .../MixedRealityOptimizeWindow.cs             | 10 +++---
 .../Toolbox/MixedRealityToolboxWindow.cs      |  2 +-
 19 files changed, 62 insertions(+), 28 deletions(-)

diff --git a/Assets/MRTK/Core/Inspectors/MixedRealityToolkitFacadeHandler.cs b/Assets/MRTK/Core/Inspectors/MixedRealityToolkitFacadeHandler.cs
index 1c476255403..411df666436 100644
--- a/Assets/MRTK/Core/Inspectors/MixedRealityToolkitFacadeHandler.cs
+++ b/Assets/MRTK/Core/Inspectors/MixedRealityToolkitFacadeHandler.cs
@@ -59,7 +59,7 @@ private static void OnSceneSaved(Scene scene)
 
         private static void CleanupCurrentFacades()
         {
-            foreach (MixedRealityToolkit toolkitInstance in FindObjectUtility.FindObjectsOfType<MixedRealityToolkit>())
+            foreach (MixedRealityToolkit toolkitInstance in FindObjectUtility.FindObjectsByType<MixedRealityToolkit>())
             {
                 DestroyAllChildren(toolkitInstance);
             }
diff --git a/Assets/MRTK/Core/Inspectors/Profiles/MixedRealityToolkitConfigurationProfileInspector.cs b/Assets/MRTK/Core/Inspectors/Profiles/MixedRealityToolkitConfigurationProfileInspector.cs
index b7530e2bc11..8266175b351 100644
--- a/Assets/MRTK/Core/Inspectors/Profiles/MixedRealityToolkitConfigurationProfileInspector.cs
+++ b/Assets/MRTK/Core/Inspectors/Profiles/MixedRealityToolkitConfigurationProfileInspector.cs
@@ -423,7 +423,7 @@ protected override void OnEnable()
                                 }
                                 else
                                 {
-                                    foreach (var dbr in FindObjectUtility.FindObjectsOfType<DepthBufferRenderer>())
+                                    foreach (var dbr in FindObjectUtility.FindObjectsByType<DepthBufferRenderer>())
                                     {
                                         UnityObjectExtensions.DestroyObject(dbr);
                                     }
diff --git a/Assets/MRTK/Core/Inspectors/PropertyDrawers/SceneInfoUtils.cs b/Assets/MRTK/Core/Inspectors/PropertyDrawers/SceneInfoUtils.cs
index 74ab65ef15b..18018dfa127 100644
--- a/Assets/MRTK/Core/Inspectors/PropertyDrawers/SceneInfoUtils.cs
+++ b/Assets/MRTK/Core/Inspectors/PropertyDrawers/SceneInfoUtils.cs
@@ -347,7 +347,7 @@ private static void RefreshSceneInfoFieldsInOpenScenes()
                 foreach (Tuple<Type, FieldInfo> typeFieldInfoPair in cachedComponentTypes)
                 {
                     FieldInfo fieldInfo = typeFieldInfoPair.Item2;
-                    foreach (Component source in FindObjectUtility.FindObjectsOfType(typeFieldInfoPair.Item1))
+                    foreach (Component source in FindObjectUtility.FindObjectsByType(typeFieldInfoPair.Item1))
                     {
                         CheckForChangesInField(source, fieldInfo);
                     }
diff --git a/Assets/MRTK/Core/Services/MixedRealityToolkit.cs b/Assets/MRTK/Core/Services/MixedRealityToolkit.cs
index 3d4ad18c830..8509ef8b89f 100644
--- a/Assets/MRTK/Core/Services/MixedRealityToolkit.cs
+++ b/Assets/MRTK/Core/Services/MixedRealityToolkit.cs
@@ -586,7 +586,7 @@ private void EnsureMixedRealityRequirements()
             bool addedComponents = false;
             if (!Application.isPlaying && CameraCache.Main != null)
             {
-                EventSystem[] eventSystems = FindObjectUtility.FindObjectsOfType<EventSystem>();
+                EventSystem[] eventSystems = FindObjectUtility.FindObjectsByType<EventSystem>();
 
                 if (eventSystems.Length == 0)
                 {
@@ -644,7 +644,7 @@ public static MixedRealityToolkit Instance
                 //
                 // To avoid returning null in this case, make sure to search the scene for MRTK.
                 // We do this only when in editor to avoid any performance cost at runtime.
-                List<MixedRealityToolkit> mrtks = new List<MixedRealityToolkit>(FindObjectUtility.FindObjectsOfType<MixedRealityToolkit>());
+                List<MixedRealityToolkit> mrtks = new List<MixedRealityToolkit>(FindObjectUtility.FindObjectsByType<MixedRealityToolkit>());
                 // Sort the list by instance ID so we get deterministic results when selecting our next active instance
                 mrtks.Sort(delegate (MixedRealityToolkit i1, MixedRealityToolkit i2) { return i1.GetInstanceID().CompareTo(i2.GetInstanceID()); });
 
diff --git a/Assets/MRTK/Core/Utilities/Async/MRTK.Async.asmdef b/Assets/MRTK/Core/Utilities/Async/MRTK.Async.asmdef
index c3f00b605ac..69fc2e0957a 100644
--- a/Assets/MRTK/Core/Utilities/Async/MRTK.Async.asmdef
+++ b/Assets/MRTK/Core/Utilities/Async/MRTK.Async.asmdef
@@ -1,5 +1,6 @@
 {
     "name": "Microsoft.MixedReality.Toolkit.Async",
+    "rootNamespace": "",
     "references": [],
     "includePlatforms": [],
     "excludePlatforms": [],
@@ -8,6 +9,12 @@
     "precompiledReferences": [],
     "autoReferenced": true,
     "defineConstraints": [],
-    "versionDefines": [],
+    "versionDefines": [
+        {
+            "name": "Unity",
+            "expression": "2021.3.18",
+            "define": "UNITY_2021_3_18_OR_NEWER"
+        }
+    ],
     "noEngineReferences": false
 }
\ No newline at end of file
diff --git a/Assets/MRTK/Core/Utilities/CameraCache.cs b/Assets/MRTK/Core/Utilities/CameraCache.cs
index 528bd225e7b..fe1b2e7cd56 100644
--- a/Assets/MRTK/Core/Utilities/CameraCache.cs
+++ b/Assets/MRTK/Core/Utilities/CameraCache.cs
@@ -38,7 +38,7 @@ public static Camera Main
                     Debug.Log("No main camera found. Searching for cameras in the scene.");
 
                     // If no main camera was found, try to determine one.
-                    Camera[] cameras = FindObjectUtility.FindObjectsOfType<Camera>();
+                    Camera[] cameras = FindObjectUtility.FindObjectsByType<Camera>();
                     if (cameras.Length == 0)
                     {
                         Debug.LogWarning("No cameras found. Creating a \"MainCamera\".");
diff --git a/Assets/MRTK/Core/Utilities/FindObjectUtility.cs b/Assets/MRTK/Core/Utilities/FindObjectUtility.cs
index 1948a8981a3..89010e1b677 100644
--- a/Assets/MRTK/Core/Utilities/FindObjectUtility.cs
+++ b/Assets/MRTK/Core/Utilities/FindObjectUtility.cs
@@ -6,27 +6,54 @@
 
 namespace Microsoft.MixedReality.Toolkit.Utilities
 {
+    /// <summary>
+    /// A static utility used to avoid deprecated Find Object functions in favor of replacements introduced in Unity >= 2021.3.18. 
+    /// </summary>
     public static class FindObjectUtility
     {
+        /// <summary>
+        /// Returns the first object matching the specified type.
+        /// </summary>
+        /// <remarks>
+        /// If Unity >= 2021.3.18, calls FindFirstObjectByType. Otherwise calls FindObjectOfType.
+        /// </remarks>
+        /// <param name="includeInactive">If true, inactive objects will be included in the search. False by default.</param>
         public static T FindObjectByType<T>(bool includeInactive = false) where T : Component
         {
 #if UNITY_2021_3_18_OR_NEWER
-        return UnityEngine.Object.FindFirstObjectByType<T>(includeInactive ? FindObjectsInactive.Include : FindObjectsInactive.Exclude);
+            return UnityEngine.Object.FindFirstObjectByType<T>(includeInactive ? FindObjectsInactive.Include : FindObjectsInactive.Exclude);
 #else 
             return UnityEngine.Object.FindObjectOfType<T>(includeInactive);
 #endif
         }
 
-        public static T[] FindObjectsOfType<T>(bool includeInactive = false, bool sort = true) where T : Component
+        /// <summary>
+        /// Returns all objects matching the specified type.
+        /// </summary>
+        /// <remarks>
+        /// If Unity >= 2021.3.18, calls FindObjectsByType. Otherwise calls FindObjectsOfType.
+        /// </remarks>
+        /// <param name="includeInactive">If true, inactive objects will be included in the search. False by default.</param>
+        /// <param name="sort">If false, results will not sorted by InstanceID. True by default.</param>
+        public static T[] FindObjectsByType<T>(bool includeInactive = false, bool sort = true) where T : Component
         {
 #if UNITY_2021_3_18_OR_NEWER
-        return UnityEngine.Object.FindObjectsByType<T>(includeInactive ? FindObjectsInactive.Include : FindObjectsInactive.Exclude, sort ? FindObjectsSortMode.InstanceID : FindObjectsSortMode.None);
+            return UnityEngine.Object.FindObjectsByType<T>(includeInactive ? FindObjectsInactive.Include : FindObjectsInactive.Exclude, sort ? FindObjectsSortMode.InstanceID : FindObjectsSortMode.None);
 #else
             return UnityEngine.Object.FindObjectsOfType<T>(includeInactive);
 #endif
         }
 
-        public static UnityEngine.Object[] FindObjectsOfType(Type type, bool includeInactive = false, bool sort = true)
+        /// <summary>
+        /// Returns all objects matching the specified type.
+        /// </summary>
+        /// <remarks>
+        /// If Unity >= 2021.3.18, calls FindObjectsByType. Otherwise calls FindObjectsOfType.
+        /// </remarks>
+        /// <param name="includeInactive">If true, inactive objects will be included in the search. False by default.</param>
+        /// <param name="sort">If false, results will not sorted by InstanceID. True by default.</param>
+        /// <param name="type">The type to search for.</param>
+        public static UnityEngine.Object[] FindObjectsByType(Type type, bool includeInactive = false, bool sort = true)
         {
 #if UNITY_2021_3_18_OR_NEWER
             return UnityEngine.Object.FindObjectsByType(type, includeInactive ? FindObjectsInactive.Include : FindObjectsInactive.Exclude, sort ? FindObjectsSortMode.InstanceID : FindObjectsSortMode.None);
diff --git a/Assets/MRTK/Extensions/SceneTransitionService/SceneTransitionService.cs b/Assets/MRTK/Extensions/SceneTransitionService/SceneTransitionService.cs
index c61ec50060c..b6155274472 100644
--- a/Assets/MRTK/Extensions/SceneTransitionService/SceneTransitionService.cs
+++ b/Assets/MRTK/Extensions/SceneTransitionService/SceneTransitionService.cs
@@ -422,7 +422,7 @@ private List<Camera> GatherFadeTargetCameras()
                 {
                     case CameraFaderTargets.All:
                         // Add every single camera in all scenes
-                        targetCameras.AddRange(FindObjectUtility.FindObjectsOfType<Camera>());
+                        targetCameras.AddRange(FindObjectUtility.FindObjectsByType<Camera>());
                         break;
 
                     case CameraFaderTargets.Main:
@@ -430,7 +430,7 @@ private List<Camera> GatherFadeTargetCameras()
                         break;
 
                     case CameraFaderTargets.UI:
-                        foreach (Canvas canvas in FindObjectUtility.FindObjectsOfType<Canvas>())
+                        foreach (Canvas canvas in FindObjectUtility.FindObjectsByType<Canvas>())
                         {
                             switch (canvas.renderMode)
                             {
diff --git a/Assets/MRTK/SDK/Editor/Migration/BoundsControlMigrationHandler.cs b/Assets/MRTK/SDK/Editor/Migration/BoundsControlMigrationHandler.cs
index 6a8223ac68b..378773d9451 100644
--- a/Assets/MRTK/SDK/Editor/Migration/BoundsControlMigrationHandler.cs
+++ b/Assets/MRTK/SDK/Editor/Migration/BoundsControlMigrationHandler.cs
@@ -297,7 +297,7 @@ private void MigrateAppBar(BoundingBox boundingBox, BoundsControl boundsControl)
         {
             // note: this might be expensive for larger scenes but we don't know where the appbar is 
             // placed in the hierarchy so we have to search the scene for it
-            AppBar[] appBars = FindObjectUtility.FindObjectsOfType<AppBar>();
+            AppBar[] appBars = FindObjectUtility.FindObjectsByType<AppBar>();
             for (int i = 0; i < appBars.Length; ++i)
             {
                 AppBar appBar = appBars[i];
diff --git a/Assets/MRTK/SDK/Experimental/Features/Utilities/WorldAnchorManager.cs b/Assets/MRTK/SDK/Experimental/Features/Utilities/WorldAnchorManager.cs
index f1333dd9d71..2b429e01cfc 100644
--- a/Assets/MRTK/SDK/Experimental/Features/Utilities/WorldAnchorManager.cs
+++ b/Assets/MRTK/SDK/Experimental/Features/Utilities/WorldAnchorManager.cs
@@ -336,7 +336,7 @@ public void RemoveAllAnchors()
                 Debug.LogWarning("[WorldAnchorManager] RemoveAllAnchors called before anchor store is ready.");
             }
 
-            var anchors = FindObjectUtility.FindObjectsOfType<WorldAnchor>();
+            var anchors = FindObjectUtility.FindObjectsByType<WorldAnchor>();
 
             if (anchors == null)
             {
diff --git a/Assets/MRTK/SDK/Experimental/ServiceManagers/Input/Scripts/InputSystemManager.cs b/Assets/MRTK/SDK/Experimental/ServiceManagers/Input/Scripts/InputSystemManager.cs
index 740cebf22aa..56093bef03d 100644
--- a/Assets/MRTK/SDK/Experimental/ServiceManagers/Input/Scripts/InputSystemManager.cs
+++ b/Assets/MRTK/SDK/Experimental/ServiceManagers/Input/Scripts/InputSystemManager.cs
@@ -66,7 +66,7 @@ private void InitializeManager()
             Initialize<IMixedRealityRaycastProvider>(profile.RaycastProviderType, args: args);
 
 
-            EventSystem[] eventSystems = FindObjectUtility.FindObjectsOfType<EventSystem>();
+            EventSystem[] eventSystems = FindObjectUtility.FindObjectsByType<EventSystem>();
 
             if (eventSystems.Length == 0)
             {
diff --git a/Assets/MRTK/Services/InputSystem/MixedRealityInputSystem.cs b/Assets/MRTK/Services/InputSystem/MixedRealityInputSystem.cs
index 09541171cf8..8216fb3e573 100644
--- a/Assets/MRTK/Services/InputSystem/MixedRealityInputSystem.cs
+++ b/Assets/MRTK/Services/InputSystem/MixedRealityInputSystem.cs
@@ -170,7 +170,7 @@ public override void Initialize()
                 return;
             }
 
-            BaseInputModule[] inputModules = FindObjectUtility.FindObjectsOfType<BaseInputModule>();
+            BaseInputModule[] inputModules = FindObjectUtility.FindObjectsByType<BaseInputModule>();
 
             if (inputModules.Length == 0)
             {
diff --git a/Assets/MRTK/Services/TeleportSystem/MixedRealityTeleportSystem.cs b/Assets/MRTK/Services/TeleportSystem/MixedRealityTeleportSystem.cs
index ec54b294a13..01e4dc6a8fe 100644
--- a/Assets/MRTK/Services/TeleportSystem/MixedRealityTeleportSystem.cs
+++ b/Assets/MRTK/Services/TeleportSystem/MixedRealityTeleportSystem.cs
@@ -60,7 +60,7 @@ private void InitializeInternal()
 #if UNITY_EDITOR
             if (!UnityEditor.EditorApplication.isPlaying)
             {
-                var eventSystems = FindObjectUtility.FindObjectsOfType<EventSystem>();
+                var eventSystems = FindObjectUtility.FindObjectsByType<EventSystem>();
 
                 if (eventSystems.Length == 0)
                 {
diff --git a/Assets/MRTK/Tests/EditModeTests/Core/MixedRealityToolkitTests.cs b/Assets/MRTK/Tests/EditModeTests/Core/MixedRealityToolkitTests.cs
index 78a09f0a167..4f9e0e3d48e 100644
--- a/Assets/MRTK/Tests/EditModeTests/Core/MixedRealityToolkitTests.cs
+++ b/Assets/MRTK/Tests/EditModeTests/Core/MixedRealityToolkitTests.cs
@@ -477,7 +477,7 @@ public void TestCreateMultipleInstancesInMultipleScenes()
                 _ = new GameObject("MixedRealityToolkit").AddComponent<MixedRealityToolkit>();
             }
 
-            MixedRealityToolkit[] instances = FindObjectUtility.FindObjectsOfType<MixedRealityToolkit>();
+            MixedRealityToolkit[] instances = FindObjectUtility.FindObjectsByType<MixedRealityToolkit>();
             for (int i = 0; i < instances.Length; i++)
             {
                 MixedRealityToolkit.SetActiveInstance(instances[i]);
diff --git a/Assets/MRTK/Tests/PlayModeTests/ChangeActiveProfileTests.cs b/Assets/MRTK/Tests/PlayModeTests/ChangeActiveProfileTests.cs
index 0609ac44a55..1ef395587cf 100644
--- a/Assets/MRTK/Tests/PlayModeTests/ChangeActiveProfileTests.cs
+++ b/Assets/MRTK/Tests/PlayModeTests/ChangeActiveProfileTests.cs
@@ -151,7 +151,7 @@ public IEnumerator VerifyPlayspaceChildren()
             int uiRaycastCameraCount = 0;
             // Confirm that we have one UIRaycastCamera.
             Debug.Log("Validating UIRaycastCamera count.");
-            Camera[] cameras = FindObjectUtility.FindObjectsOfType<Camera>();
+            Camera[] cameras = FindObjectUtility.FindObjectsByType<Camera>();
             foreach (Camera camera in cameras)
             {
                 if ("UIRaycastCamera" == camera.name)
diff --git a/Assets/MRTK/Tests/TestUtilities/PlayModeTestUtilities.cs b/Assets/MRTK/Tests/TestUtilities/PlayModeTestUtilities.cs
index d3210b0aecd..fbbd42ca517 100644
--- a/Assets/MRTK/Tests/TestUtilities/PlayModeTestUtilities.cs
+++ b/Assets/MRTK/Tests/TestUtilities/PlayModeTestUtilities.cs
@@ -266,7 +266,7 @@ public static IEnumerator SetupMrtkWithoutGlobalInputHandlers()
             UnityEngine.Object.Destroy(CoreServices.InputSystem.GazeProvider.GazeCursor as Behaviour);
             CoreServices.InputSystem.GazeProvider.Enabled = false;
 
-            var diagnosticsVoiceControls = FindObjectUtility.FindObjectsOfType<DiagnosticsSystemVoiceControls>();
+            var diagnosticsVoiceControls = FindObjectUtility.FindObjectsByType<DiagnosticsSystemVoiceControls>();
             foreach (var diagnosticsComponent in diagnosticsVoiceControls)
             {
                 diagnosticsComponent.enabled = false;
diff --git a/Assets/MRTK/Tests/TestUtilities/TestUtilities.cs b/Assets/MRTK/Tests/TestUtilities/TestUtilities.cs
index fbc6918ec5b..7815cd24111 100644
--- a/Assets/MRTK/Tests/TestUtilities/TestUtilities.cs
+++ b/Assets/MRTK/Tests/TestUtilities/TestUtilities.cs
@@ -274,7 +274,7 @@ public static void InitializeMixedRealityToolkitAndCreateScenes(bool useDefaultP
 
         public static void InitializeCamera()
         {
-            Camera[] cameras = FindObjectUtility.FindObjectsOfType<Camera>();
+            Camera[] cameras = FindObjectUtility.FindObjectsByType<Camera>();
 
             if (cameras.Length == 0)
             {
diff --git a/Assets/MRTK/Tools/OptimizeWindow/MixedRealityOptimizeWindow.cs b/Assets/MRTK/Tools/OptimizeWindow/MixedRealityOptimizeWindow.cs
index eb3e9704260..07bc9f94ebe 100644
--- a/Assets/MRTK/Tools/OptimizeWindow/MixedRealityOptimizeWindow.cs
+++ b/Assets/MRTK/Tools/OptimizeWindow/MixedRealityOptimizeWindow.cs
@@ -506,13 +506,13 @@ private void RenderOptimalRenderingSection()
 
         private void AnalyzeScene()
         {
-            sceneLights = FindObjectUtility.FindObjectsOfType<Light>();
+            sceneLights = FindObjectUtility.FindObjectsByType<Light>();
 
             AnalyzeRaycastTargets();
 
             // TODO: Consider searching for particle renderers count?
 
-            MeshesOrderedByPolyCountDesc = FindObjectUtility.FindObjectsOfType<MeshFilter>()
+            MeshesOrderedByPolyCountDesc = FindObjectUtility.FindObjectsByType<MeshFilter>()
                 .Where(f => f != null && f.sharedMesh != null)
                 .OrderByDescending(f => f.sharedMesh.triangles.Length)
                 .ToArray();
@@ -537,8 +537,8 @@ private void AnalyzeScene()
 
         private void AnalyzeRaycastTargets()
         {
-            totalRaycastableUnityUI_Text = FindObjectUtility.FindObjectsOfType<Text>().Where(t => t.raycastTarget).Count();
-            totalRaycastableUnityUI_TMP_UGUI = FindObjectUtility.FindObjectsOfType<TextMeshProUGUI>().Where(t => t.raycastTarget).Count();
+            totalRaycastableUnityUI_Text = FindObjectUtility.FindObjectsByType<Text>().Where(t => t.raycastTarget).Count();
+            totalRaycastableUnityUI_TMP_UGUI = FindObjectUtility.FindObjectsByType<TextMeshProUGUI>().Where(t => t.raycastTarget).Count();
         }
 
         private void DiscoverMaterials()
@@ -591,7 +591,7 @@ private bool CanConvertMaterial(Material asset)
 
         private static void DisableRaycastTargetAll<T>() where T : Graphic
         {
-            DisableRaycastTarget(FindObjectUtility.FindObjectsOfType<T>());
+            DisableRaycastTarget(FindObjectUtility.FindObjectsByType<T>());
         }
 
         private static void DisableRaycastTarget(Graphic[] elements)
diff --git a/Assets/MRTK/Tools/Toolbox/MixedRealityToolboxWindow.cs b/Assets/MRTK/Tools/Toolbox/MixedRealityToolboxWindow.cs
index 89ccb0ccea1..96c8999b066 100644
--- a/Assets/MRTK/Tools/Toolbox/MixedRealityToolboxWindow.cs
+++ b/Assets/MRTK/Tools/Toolbox/MixedRealityToolboxWindow.cs
@@ -354,7 +354,7 @@ private static bool IsSearchMatch(string field, string searchContent)
 
         private void FindAllMRTKCanvases()
         {
-            canvasUtilities = FindObjectUtility.FindObjectsOfType<Input.Utilities.CanvasUtility>();
+            canvasUtilities = FindObjectUtility.FindObjectsByType<Input.Utilities.CanvasUtility>();
             dropdownValues = new string[canvasUtilities.Length];
 
             for (int i = 0; i < canvasUtilities.Length; i++)

From d52771038bdc28c529f638d12af73f834b19e0d9 Mon Sep 17 00:00:00 2001
From: Marlena Klein <marlenaklein@microsoft.com>
Date: Wed, 25 Oct 2023 11:10:57 -0700
Subject: [PATCH 3/3] Fix Oculus call

---
 Assets/MRTK/Providers/Oculus/XRSDK/OculusXRSDKDeviceManager.cs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Assets/MRTK/Providers/Oculus/XRSDK/OculusXRSDKDeviceManager.cs b/Assets/MRTK/Providers/Oculus/XRSDK/OculusXRSDKDeviceManager.cs
index 65ccc28a9b0..fed61aa2e3d 100644
--- a/Assets/MRTK/Providers/Oculus/XRSDK/OculusXRSDKDeviceManager.cs
+++ b/Assets/MRTK/Providers/Oculus/XRSDK/OculusXRSDKDeviceManager.cs
@@ -207,7 +207,7 @@ public override void Update()
 
         private void SetupInput()
         {
-            cameraRig = FindObjectUtility.FindObjectOfType<OVRCameraRig>();
+            cameraRig = FindObjectUtility.FindObjectsByType<OVRCameraRig>();
             if (cameraRig == null)
             {
                 var mainCamera = CameraCache.Main;