diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 000000000..256b7e021
Binary files /dev/null and b/.DS_Store differ
diff --git a/Frontend/VIAProMa/Assets/MRTK/Providers/WindowsMixedReality/Shared/DotNetAdapter.meta b/Frontend/VIAProMa/Assets/AssetBundles.meta
similarity index 77%
rename from Frontend/VIAProMa/Assets/MRTK/Providers/WindowsMixedReality/Shared/DotNetAdapter.meta
rename to Frontend/VIAProMa/Assets/AssetBundles.meta
index 0bcadfb4c..945a90735 100644
--- a/Frontend/VIAProMa/Assets/MRTK/Providers/WindowsMixedReality/Shared/DotNetAdapter.meta
+++ b/Frontend/VIAProMa/Assets/AssetBundles.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: d3817b39173905f4482a4a2c0ee34e39
+guid: d54fc6b1813f1ec41ab8a1eeda61f247
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/AssetBundles b/Frontend/VIAProMa/Assets/AssetBundles/AssetBundles
new file mode 100644
index 000000000..37b03301e
Binary files /dev/null and b/Frontend/VIAProMa/Assets/AssetBundles/AssetBundles differ
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/AssetBundles.manifest b/Frontend/VIAProMa/Assets/AssetBundles/AssetBundles.manifest
new file mode 100644
index 000000000..11ffdee7c
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/AssetBundles/AssetBundles.manifest
@@ -0,0 +1,25 @@
+ManifestFileVersion: 0
+CRC: 2014439043
+AssetBundleManifest:
+ AssetBundleInfos:
+ Info_0:
+ Name: artgallery
+ Dependencies: {}
+ Info_1:
+ Name: conferenceroom
+ Dependencies: {}
+ Info_2:
+ Name: hotelroom
+ Dependencies: {}
+ Info_3:
+ Name: silentlibrary
+ Dependencies: {}
+ Info_4:
+ Name: modernoffice
+ Dependencies: {}
+ Info_5:
+ Name: winterloft
+ Dependencies: {}
+ Info_6:
+ Name: roundgallery
+ Dependencies: {}
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/AssetBundles.manifest.meta b/Frontend/VIAProMa/Assets/AssetBundles/AssetBundles.manifest.meta
new file mode 100644
index 000000000..48c5bb115
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/AssetBundles/AssetBundles.manifest.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: bfa1bc7b628c2ce4fa67a9a95dad8dbb
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/AssetBundles.meta b/Frontend/VIAProMa/Assets/AssetBundles/AssetBundles.meta
new file mode 100644
index 000000000..07597cec1
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/AssetBundles/AssetBundles.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: d21b3fcae207a7b4a8de0c30032f56b2
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/artgallery b/Frontend/VIAProMa/Assets/AssetBundles/artgallery
new file mode 100644
index 000000000..37d43648f
Binary files /dev/null and b/Frontend/VIAProMa/Assets/AssetBundles/artgallery differ
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/artgallery.manifest b/Frontend/VIAProMa/Assets/AssetBundles/artgallery.manifest
new file mode 100644
index 000000000..bd1556c14
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/AssetBundles/artgallery.manifest
@@ -0,0 +1,38 @@
+ManifestFileVersion: 0
+CRC: 153468764
+Hashes:
+ AssetFileHash:
+ serializedVersion: 2
+ Hash: a510fef27a1d17ee03766e4a873de291
+ TypeTreeHash:
+ serializedVersion: 2
+ Hash: 069797ccdc458d01886e092d5a79e275
+HashAppended: 0
+ClassTypes:
+- Class: 1
+ Script: {instanceID: 0}
+- Class: 4
+ Script: {instanceID: 0}
+- Class: 21
+ Script: {instanceID: 0}
+- Class: 23
+ Script: {instanceID: 0}
+- Class: 28
+ Script: {instanceID: 0}
+- Class: 33
+ Script: {instanceID: 0}
+- Class: 43
+ Script: {instanceID: 0}
+- Class: 48
+ Script: {instanceID: 0}
+- Class: 49
+ Script: {instanceID: 0}
+- Class: 213
+ Script: {instanceID: 0}
+Assets:
+- Assets/3D Models/VirtualEnvironments/Art Gallery/Art Gallery.prefab
+- Assets/Virtual Environments/PreviewImages/PI_countryhouse.PNG
+- Assets/Virtual Environments/Sample_Skyboxes/Outdoor Environments/Nature Sunrise/Nature
+ Sunrise.mat
+- Assets/Virtual Environments/CreditStrings/CountryHouseCredits.txt
+Dependencies: []
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/artgallery.manifest.meta b/Frontend/VIAProMa/Assets/AssetBundles/artgallery.manifest.meta
new file mode 100644
index 000000000..a8e7d981d
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/AssetBundles/artgallery.manifest.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 720b4045ba08e4240b3a7d45e0dc4805
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/artgallery.meta b/Frontend/VIAProMa/Assets/AssetBundles/artgallery.meta
new file mode 100644
index 000000000..e47d5ac19
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/AssetBundles/artgallery.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: edbfd89cf59546a43a7e7571e0355231
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/conferenceroom b/Frontend/VIAProMa/Assets/AssetBundles/conferenceroom
new file mode 100644
index 000000000..df324ffb7
Binary files /dev/null and b/Frontend/VIAProMa/Assets/AssetBundles/conferenceroom differ
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/conferenceroom.manifest b/Frontend/VIAProMa/Assets/AssetBundles/conferenceroom.manifest
new file mode 100644
index 000000000..0995cf420
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/AssetBundles/conferenceroom.manifest
@@ -0,0 +1,44 @@
+ManifestFileVersion: 0
+CRC: 1157137925
+Hashes:
+ AssetFileHash:
+ serializedVersion: 2
+ Hash: fe1f5b21b70ee262bfcd9efc727b20da
+ TypeTreeHash:
+ serializedVersion: 2
+ Hash: cf74657c334ef892cf2488e785dfac7c
+HashAppended: 0
+ClassTypes:
+- Class: 1
+ Script: {instanceID: 0}
+- Class: 4
+ Script: {instanceID: 0}
+- Class: 21
+ Script: {instanceID: 0}
+- Class: 23
+ Script: {instanceID: 0}
+- Class: 28
+ Script: {instanceID: 0}
+- Class: 33
+ Script: {instanceID: 0}
+- Class: 43
+ Script: {instanceID: 0}
+- Class: 48
+ Script: {instanceID: 0}
+- Class: 49
+ Script: {instanceID: 0}
+- Class: 65
+ Script: {instanceID: 0}
+- Class: 90
+ Script: {instanceID: 0}
+- Class: 95
+ Script: {instanceID: 0}
+- Class: 213
+ Script: {instanceID: 0}
+Assets:
+- Assets/Virtual Environments/CreditStrings/ConferenceRoomCredits.txt
+- Assets/Virtual Environments/PreviewImages/PI_conferenceroom.PNG
+- Assets/Virtual Environments/Sample_Skyboxes/Outdoor Environments/Venice Sunset/Venice
+ Sunset.mat
+- Assets/3D Models/VirtualEnvironments/Modern Lounge/Modern Lounge.prefab
+Dependencies: []
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/conferenceroom.manifest.meta b/Frontend/VIAProMa/Assets/AssetBundles/conferenceroom.manifest.meta
new file mode 100644
index 000000000..30c338ef5
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/AssetBundles/conferenceroom.manifest.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 76f87317f2778a54b966e579861294fe
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/conferenceroom.meta b/Frontend/VIAProMa/Assets/AssetBundles/conferenceroom.meta
new file mode 100644
index 000000000..14144704f
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/AssetBundles/conferenceroom.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: a32d9c40143a2bd4791735f2eec6bc35
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/hotelroom b/Frontend/VIAProMa/Assets/AssetBundles/hotelroom
new file mode 100644
index 000000000..81d412e20
Binary files /dev/null and b/Frontend/VIAProMa/Assets/AssetBundles/hotelroom differ
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/hotelroom.manifest b/Frontend/VIAProMa/Assets/AssetBundles/hotelroom.manifest
new file mode 100644
index 000000000..75c808eb3
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/AssetBundles/hotelroom.manifest
@@ -0,0 +1,26 @@
+ManifestFileVersion: 0
+CRC: 4177383486
+Hashes:
+ AssetFileHash:
+ serializedVersion: 2
+ Hash: c70521b4246c7ce289e0a101b8730002
+ TypeTreeHash:
+ serializedVersion: 2
+ Hash: 5a4f7949edd0ea13039d74a0f9fc997e
+HashAppended: 0
+ClassTypes:
+- Class: 21
+ Script: {instanceID: 0}
+- Class: 28
+ Script: {instanceID: 0}
+- Class: 48
+ Script: {instanceID: 0}
+- Class: 49
+ Script: {instanceID: 0}
+- Class: 213
+ Script: {instanceID: 0}
+Assets:
+- Assets/Virtual Environments/CreditStrings/HotelRoomCredits.txt
+- Assets/Virtual Environments/Sample_Skyboxes/Indoors Environments/HotelRoomBeige/Skybox_HRB.mat
+- Assets/Virtual Environments/PreviewImages/PI_hotelroom.PNG
+Dependencies: []
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/hotelroom.manifest.meta b/Frontend/VIAProMa/Assets/AssetBundles/hotelroom.manifest.meta
new file mode 100644
index 000000000..7f979618e
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/AssetBundles/hotelroom.manifest.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 57ea346357d45794fae89afb390624ac
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/hotelroom.meta b/Frontend/VIAProMa/Assets/AssetBundles/hotelroom.meta
new file mode 100644
index 000000000..634847ade
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/AssetBundles/hotelroom.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: ddb0091c7526daf4ea777608e1a2f532
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/modernoffice b/Frontend/VIAProMa/Assets/AssetBundles/modernoffice
new file mode 100644
index 000000000..490ee4a27
Binary files /dev/null and b/Frontend/VIAProMa/Assets/AssetBundles/modernoffice differ
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/modernoffice.manifest b/Frontend/VIAProMa/Assets/AssetBundles/modernoffice.manifest
new file mode 100644
index 000000000..464e8869d
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/AssetBundles/modernoffice.manifest
@@ -0,0 +1,37 @@
+ManifestFileVersion: 0
+CRC: 1517764436
+Hashes:
+ AssetFileHash:
+ serializedVersion: 2
+ Hash: 264b8011a089f7fa54023ac21f9f5e73
+ TypeTreeHash:
+ serializedVersion: 2
+ Hash: 069797ccdc458d01886e092d5a79e275
+HashAppended: 0
+ClassTypes:
+- Class: 1
+ Script: {instanceID: 0}
+- Class: 4
+ Script: {instanceID: 0}
+- Class: 21
+ Script: {instanceID: 0}
+- Class: 23
+ Script: {instanceID: 0}
+- Class: 28
+ Script: {instanceID: 0}
+- Class: 33
+ Script: {instanceID: 0}
+- Class: 43
+ Script: {instanceID: 0}
+- Class: 48
+ Script: {instanceID: 0}
+- Class: 49
+ Script: {instanceID: 0}
+- Class: 213
+ Script: {instanceID: 0}
+Assets:
+- Assets/Virtual Environments/CreditStrings/ModernOfficeCredits.txt
+- Assets/Virtual Environments/PreviewImages/PI_modernoffice.PNG
+- Assets/3D Models/VirtualEnvironments/Modern Office/Office_VR.prefab
+- Assets/Virtual Environments/Sample_Skyboxes/Outdoor Environments/Epic_BlueSunset/Epic_BlueSunset.mat
+Dependencies: []
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/modernoffice.manifest.meta b/Frontend/VIAProMa/Assets/AssetBundles/modernoffice.manifest.meta
new file mode 100644
index 000000000..c7236c9e4
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/AssetBundles/modernoffice.manifest.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 53afe28e8bc68d047a3c8dfdb48fe4b0
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/modernoffice.meta b/Frontend/VIAProMa/Assets/AssetBundles/modernoffice.meta
new file mode 100644
index 000000000..402078fc7
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/AssetBundles/modernoffice.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 0fd78ab7c47a47443b7932589f3079b5
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/roundgallery b/Frontend/VIAProMa/Assets/AssetBundles/roundgallery
new file mode 100644
index 000000000..e02f3ed2c
Binary files /dev/null and b/Frontend/VIAProMa/Assets/AssetBundles/roundgallery differ
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/roundgallery.manifest b/Frontend/VIAProMa/Assets/AssetBundles/roundgallery.manifest
new file mode 100644
index 000000000..3fb68d964
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/AssetBundles/roundgallery.manifest
@@ -0,0 +1,37 @@
+ManifestFileVersion: 0
+CRC: 1417199156
+Hashes:
+ AssetFileHash:
+ serializedVersion: 2
+ Hash: 2517bfbaec68e44ca33eb8c99ef9d2b1
+ TypeTreeHash:
+ serializedVersion: 2
+ Hash: 069797ccdc458d01886e092d5a79e275
+HashAppended: 0
+ClassTypes:
+- Class: 1
+ Script: {instanceID: 0}
+- Class: 4
+ Script: {instanceID: 0}
+- Class: 21
+ Script: {instanceID: 0}
+- Class: 23
+ Script: {instanceID: 0}
+- Class: 28
+ Script: {instanceID: 0}
+- Class: 33
+ Script: {instanceID: 0}
+- Class: 43
+ Script: {instanceID: 0}
+- Class: 48
+ Script: {instanceID: 0}
+- Class: 49
+ Script: {instanceID: 0}
+- Class: 213
+ Script: {instanceID: 0}
+Assets:
+- Assets/Virtual Environments/Sample_Skyboxes/Outdoor Environments/Epic_GloriousPink/Epic_GloriousPink.mat
+- Assets/Virtual Environments/CreditStrings/RoundGalleryCredits.txt
+- Assets/Virtual Environments/PreviewImages/PI_roundgallery.PNG
+- Assets/3D Models/VirtualEnvironments/Round Gallery/Round Gallery.prefab
+Dependencies: []
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/roundgallery.manifest.meta b/Frontend/VIAProMa/Assets/AssetBundles/roundgallery.manifest.meta
new file mode 100644
index 000000000..df0079fff
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/AssetBundles/roundgallery.manifest.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 904d4973093058149a1b02decfc1010d
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/roundgallery.meta b/Frontend/VIAProMa/Assets/AssetBundles/roundgallery.meta
new file mode 100644
index 000000000..638248e7a
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/AssetBundles/roundgallery.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: d7a54fb75ebb461479980d2c89febd6d
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/silentlibrary b/Frontend/VIAProMa/Assets/AssetBundles/silentlibrary
new file mode 100644
index 000000000..8ce901ba3
Binary files /dev/null and b/Frontend/VIAProMa/Assets/AssetBundles/silentlibrary differ
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/silentlibrary.manifest b/Frontend/VIAProMa/Assets/AssetBundles/silentlibrary.manifest
new file mode 100644
index 000000000..740cdf787
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/AssetBundles/silentlibrary.manifest
@@ -0,0 +1,38 @@
+ManifestFileVersion: 0
+CRC: 644650935
+Hashes:
+ AssetFileHash:
+ serializedVersion: 2
+ Hash: d242817638b1ffc74893663dfe9dc8cc
+ TypeTreeHash:
+ serializedVersion: 2
+ Hash: 069797ccdc458d01886e092d5a79e275
+HashAppended: 0
+ClassTypes:
+- Class: 1
+ Script: {instanceID: 0}
+- Class: 4
+ Script: {instanceID: 0}
+- Class: 21
+ Script: {instanceID: 0}
+- Class: 23
+ Script: {instanceID: 0}
+- Class: 28
+ Script: {instanceID: 0}
+- Class: 33
+ Script: {instanceID: 0}
+- Class: 43
+ Script: {instanceID: 0}
+- Class: 48
+ Script: {instanceID: 0}
+- Class: 49
+ Script: {instanceID: 0}
+- Class: 213
+ Script: {instanceID: 0}
+Assets:
+- Assets/Virtual Environments/Sample_Skyboxes/Outdoor Environments/Cold Night/Cold
+ Night.mat
+- Assets/Virtual Environments/PreviewImages/PI_silentlibrary.PNG
+- Assets/Virtual Environments/CreditStrings/SilentLibraryCredits.txt
+- Assets/3D Models/VirtualEnvironments/Silent Library/Silent Library.prefab
+Dependencies: []
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/silentlibrary.manifest.meta b/Frontend/VIAProMa/Assets/AssetBundles/silentlibrary.manifest.meta
new file mode 100644
index 000000000..24701bc4b
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/AssetBundles/silentlibrary.manifest.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 016f00b29f4d6c04f830cddf8af82ce6
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/silentlibrary.meta b/Frontend/VIAProMa/Assets/AssetBundles/silentlibrary.meta
new file mode 100644
index 000000000..abc0e87f8
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/AssetBundles/silentlibrary.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 9390d428d64687e41bf25642040c6fb1
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/winterloft b/Frontend/VIAProMa/Assets/AssetBundles/winterloft
new file mode 100644
index 000000000..95ac9980a
Binary files /dev/null and b/Frontend/VIAProMa/Assets/AssetBundles/winterloft differ
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/winterloft.manifest b/Frontend/VIAProMa/Assets/AssetBundles/winterloft.manifest
new file mode 100644
index 000000000..e4ea7323a
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/AssetBundles/winterloft.manifest
@@ -0,0 +1,37 @@
+ManifestFileVersion: 0
+CRC: 3264377351
+Hashes:
+ AssetFileHash:
+ serializedVersion: 2
+ Hash: f5167dba59cd39bb03ba62ec775d2839
+ TypeTreeHash:
+ serializedVersion: 2
+ Hash: 069797ccdc458d01886e092d5a79e275
+HashAppended: 0
+ClassTypes:
+- Class: 1
+ Script: {instanceID: 0}
+- Class: 4
+ Script: {instanceID: 0}
+- Class: 21
+ Script: {instanceID: 0}
+- Class: 23
+ Script: {instanceID: 0}
+- Class: 28
+ Script: {instanceID: 0}
+- Class: 33
+ Script: {instanceID: 0}
+- Class: 43
+ Script: {instanceID: 0}
+- Class: 48
+ Script: {instanceID: 0}
+- Class: 49
+ Script: {instanceID: 0}
+- Class: 213
+ Script: {instanceID: 0}
+Assets:
+- Assets/Virtual Environments/CreditStrings/WinterLoftCredits.txt
+- Assets/Virtual Environments/Sample_Skyboxes/Outdoor Environments/Overcast Low/AllSky_Overcast4_Low.mat
+- Assets/Virtual Environments/PreviewImages/PI_winterloft.PNG
+- Assets/3D Models/VirtualEnvironments/Winter Loft/Winter Loft.prefab
+Dependencies: []
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/winterloft.manifest.meta b/Frontend/VIAProMa/Assets/AssetBundles/winterloft.manifest.meta
new file mode 100644
index 000000000..79cd271f1
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/AssetBundles/winterloft.manifest.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 35cfb56905e573544b8e75ff3acdb3eb
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/AssetBundles/winterloft.meta b/Frontend/VIAProMa/Assets/AssetBundles/winterloft.meta
new file mode 100644
index 000000000..390c9b157
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/AssetBundles/winterloft.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 2ce2f7862870f044c9cc5e334ba582a8
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/ButtonThemes/MainMenuButtonTheme.asset b/Frontend/VIAProMa/Assets/ButtonThemes/MainMenuButtonTheme.asset
index 88358811a..9bdb2b669 100644
--- a/Frontend/VIAProMa/Assets/ButtonThemes/MainMenuButtonTheme.asset
+++ b/Frontend/VIAProMa/Assets/ButtonThemes/MainMenuButtonTheme.asset
@@ -62,7 +62,7 @@ MonoBehaviour:
Shader: {fileID: 0}
GameObject: {fileID: 0}
Vector2: {x: 0, y: 0}
- Vector3: {x: 0, y: -0.04, z: 0}
+ Vector3: {x: 0, y: 0, z: 0}
Vector4: {x: 0, y: 0, z: 0, w: 0}
Color: {r: 0, g: 0, b: 0, a: 0}
Quaternion: {x: 0, y: 0, z: 0, w: 0}
diff --git a/Frontend/VIAProMa/Assets/Editor/CreateAssetBundles.cs b/Frontend/VIAProMa/Assets/Editor/CreateAssetBundles.cs
new file mode 100644
index 000000000..49aa4f5b8
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/Editor/CreateAssetBundles.cs
@@ -0,0 +1,18 @@
+using UnityEditor;
+using System.IO;
+
+public class CreateAssetBundles
+{
+ [MenuItem("Assets/Build AssetBundles")]
+ static void BuildAllAssetBundles()
+ {
+ string assetBundleDirectory = "Assets/AssetBundles";
+ if (!Directory.Exists(assetBundleDirectory))
+ {
+ Directory.CreateDirectory(assetBundleDirectory);
+ }
+ BuildPipeline.BuildAssetBundles(assetBundleDirectory,
+ BuildAssetBundleOptions.None,
+ BuildTarget.StandaloneWindows);
+ }
+}
\ No newline at end of file
diff --git a/Frontend/VIAProMa/Assets/Editor/CreateAssetBundles.cs.meta b/Frontend/VIAProMa/Assets/Editor/CreateAssetBundles.cs.meta
new file mode 100644
index 000000000..c71aa67b9
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/Editor/CreateAssetBundles.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0e55aa4d3650f5f458a51eeef294e39b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK.meta b/Frontend/VIAProMa/Assets/MRTK.meta
index e17031de7..e014dece9 100644
--- a/Frontend/VIAProMa/Assets/MRTK.meta
+++ b/Frontend/VIAProMa/Assets/MRTK.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 6529684e913f2d94e969d072a14f2a60
+guid: ea98bb28fb703da49b925f7be8b3ce1e
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions.meta
new file mode 100644
index 000000000..6d54fd47d
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ba44229d36dd59749befeb30c1906336
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService.meta
new file mode 100644
index 000000000..c6a69189c
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8ad788cf01b0b8d4f9ed3d1fdacc67f3
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/AssemblyInfo.cs b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/AssemblyInfo.cs
new file mode 100644
index 000000000..18279dbcf
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/AssemblyInfo.cs
@@ -0,0 +1,10 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+using System.Reflection;
+
+[assembly: AssemblyVersion("2.4.0.0")]
+[assembly: AssemblyFileVersion("2.4.0.0")]
+
+[assembly: AssemblyProduct("Microsoft® Mixed Reality Toolkit Extensions")]
+[assembly: AssemblyCopyright("Copyright © Microsoft Corporation")]
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/AssemblyInfo.cs.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/AssemblyInfo.cs.meta
new file mode 100644
index 000000000..6b7c2c554
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/AssemblyInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f9834b5c9cec0a541bc93fa68f1471d0
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Examples.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Examples.meta
new file mode 100644
index 000000000..99e25b65b
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Examples.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f415267b09628ac46b4af18997bea3c1
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Examples/HandPhysicsServiceExample.unity b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Examples/HandPhysicsServiceExample.unity
new file mode 100644
index 000000000..482c6ad63
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Examples/HandPhysicsServiceExample.unity
@@ -0,0 +1,2917 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_OcclusionBakeSettings:
+ smallestOccluder: 5
+ smallestHole: 0.25
+ backfaceThreshold: 100
+ m_SceneGUID: 00000000000000000000000000000000
+ m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 9
+ m_Fog: 0
+ m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+ m_FogMode: 3
+ m_FogDensity: 0.01
+ m_LinearFogStart: 0
+ m_LinearFogEnd: 300
+ m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+ m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+ m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+ m_AmbientIntensity: 1
+ m_AmbientMode: 0
+ m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+ m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
+ m_HaloStrength: 0.5
+ m_FlareStrength: 1
+ m_FlareFadeSpeed: 3
+ m_HaloTexture: {fileID: 0}
+ m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+ m_DefaultReflectionMode: 0
+ m_DefaultReflectionResolution: 128
+ m_ReflectionBounces: 1
+ m_ReflectionIntensity: 1
+ m_CustomReflection: {fileID: 0}
+ m_Sun: {fileID: 0}
+ m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1}
+ m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 11
+ m_GIWorkflowMode: 0
+ m_GISettings:
+ serializedVersion: 2
+ m_BounceScale: 1
+ m_IndirectOutputScale: 1
+ m_AlbedoBoost: 1
+ m_EnvironmentLightingMode: 0
+ m_EnableBakedLightmaps: 1
+ m_EnableRealtimeLightmaps: 1
+ m_LightmapEditorSettings:
+ serializedVersion: 10
+ m_Resolution: 2
+ m_BakeResolution: 40
+ m_AtlasSize: 1024
+ m_AO: 0
+ m_AOMaxDistance: 1
+ m_CompAOExponent: 1
+ m_CompAOExponentDirect: 0
+ m_Padding: 2
+ m_LightmapParameters: {fileID: 0}
+ m_LightmapsBakeMode: 1
+ m_TextureCompression: 1
+ m_FinalGather: 0
+ m_FinalGatherFiltering: 1
+ m_FinalGatherRayCount: 256
+ m_ReflectionCompression: 2
+ m_MixedBakeMode: 2
+ m_BakeBackend: 1
+ m_PVRSampling: 1
+ m_PVRDirectSampleCount: 32
+ m_PVRSampleCount: 500
+ m_PVRBounces: 2
+ m_PVRFilterTypeDirect: 0
+ m_PVRFilterTypeIndirect: 0
+ m_PVRFilterTypeAO: 0
+ m_PVRFilteringMode: 1
+ m_PVRCulling: 1
+ m_PVRFilteringGaussRadiusDirect: 1
+ m_PVRFilteringGaussRadiusIndirect: 5
+ m_PVRFilteringGaussRadiusAO: 2
+ m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+ m_PVRFilteringAtrousPositionSigmaIndirect: 2
+ m_PVRFilteringAtrousPositionSigmaAO: 1
+ m_ShowResolutionOverlay: 1
+ m_LightingDataAsset: {fileID: 0}
+ m_UseShadowmask: 1
+--- !u!196 &4
+NavMeshSettings:
+ serializedVersion: 2
+ m_ObjectHideFlags: 0
+ m_BuildSettings:
+ serializedVersion: 2
+ agentTypeID: 0
+ agentRadius: 0.5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: 0.4
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ minRegionArea: 2
+ manualCellSize: 0
+ cellSize: 0.16666667
+ manualTileSize: 0
+ tileSize: 256
+ accuratePlacement: 0
+ debug:
+ m_Flags: 0
+ m_NavMeshData: {fileID: 0}
+--- !u!1 &43646911
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 43646912}
+ m_Layer: 0
+ m_Name: PunchingBag
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &43646912
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 43646911}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0.4486, y: -0.227, z: 0.6012}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 2090703637}
+ - {fileID: 1794223521}
+ - {fileID: 860869865}
+ m_Father: {fileID: 0}
+ m_RootOrder: 6
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &189989384
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 189989385}
+ m_Layer: 0
+ m_Name: TableOfObjects
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &189989385
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 189989384}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: -0.35, z: 0.5}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 1421032454}
+ - {fileID: 844079867}
+ - {fileID: 1300550612}
+ - {fileID: 1683235918}
+ - {fileID: 1174152843}
+ m_Father: {fileID: 0}
+ m_RootOrder: 4
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &222720537
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 222720538}
+ m_Layer: 0
+ m_Name: Hinge
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &222720538
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 222720537}
+ m_LocalRotation: {x: -0, y: 0.13716066, z: -0, w: 0.99054885}
+ m_LocalPosition: {x: 0.264, y: -0.134, z: 0.665}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 317785146}
+ - {fileID: 332818910}
+ m_Father: {fileID: 0}
+ m_RootOrder: 5
+ m_LocalEulerAnglesHint: {x: 0, y: 15.767001, z: 0}
+--- !u!1 &317785140
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 317785146}
+ - component: {fileID: 317785145}
+ - component: {fileID: 317785144}
+ - component: {fileID: 317785143}
+ - component: {fileID: 317785142}
+ - component: {fileID: 317785141}
+ m_Layer: 0
+ m_Name: HangingDoor
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!59 &317785141
+HingeJoint:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 317785140}
+ m_ConnectedBody: {fileID: 332818906}
+ m_Anchor: {x: 0, y: 0.55, z: 0}
+ m_Axis: {x: 1, y: 0, z: 0}
+ m_AutoConfigureConnectedAnchor: 1
+ m_ConnectedAnchor: {x: 0, y: -0.52499956, z: -0.00000018626451}
+ m_UseSpring: 1
+ m_Spring:
+ spring: 0.1
+ damper: 0
+ targetPosition: 0
+ m_UseMotor: 0
+ m_Motor:
+ targetVelocity: 0
+ force: 0
+ freeSpin: 0
+ m_UseLimits: 0
+ m_Limits:
+ min: 0
+ max: 0
+ bounciness: 0
+ bounceMinVelocity: 0.02
+ contactDistance: 0
+ m_BreakForce: Infinity
+ m_BreakTorque: Infinity
+ m_EnableCollision: 0
+ m_EnablePreprocessing: 1
+ m_MassScale: 1
+ m_ConnectedMassScale: 1
+--- !u!54 &317785142
+Rigidbody:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 317785140}
+ serializedVersion: 2
+ m_Mass: 1
+ m_Drag: 0
+ m_AngularDrag: 0.05
+ m_UseGravity: 1
+ m_IsKinematic: 0
+ m_Interpolate: 0
+ m_Constraints: 0
+ m_CollisionDetection: 0
+--- !u!65 &317785143
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 317785140}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Size: {x: 1, y: 1, z: 1}
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &317785144
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 317785140}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 27a6136d64696da4eba1b89b3df8d3df, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &317785145
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 317785140}
+ m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &317785146
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 317785140}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0.132, y: -0.148, z: 0.037}
+ m_LocalScale: {x: 0.15, y: 0.15, z: 0.01}
+ m_Children:
+ - {fileID: 887160072}
+ - {fileID: 1355410463}
+ m_Father: {fileID: 222720538}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &332818905
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 332818910}
+ - component: {fileID: 332818909}
+ - component: {fileID: 332818908}
+ - component: {fileID: 332818907}
+ - component: {fileID: 332818906}
+ m_Layer: 0
+ m_Name: TopAnchor
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!54 &332818906
+Rigidbody:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 332818905}
+ serializedVersion: 2
+ m_Mass: 1
+ m_Drag: 0
+ m_AngularDrag: 0.05
+ m_UseGravity: 1
+ m_IsKinematic: 1
+ m_Interpolate: 0
+ m_Constraints: 0
+ m_CollisionDetection: 0
+--- !u!65 &332818907
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 332818905}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Size: {x: 1, y: 1, z: 1}
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &332818908
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 332818905}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 27a6136d64696da4eba1b89b3df8d3df, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &332818909
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 332818905}
+ m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &332818910
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 332818905}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0.132, y: -0.055, z: 0.037}
+ m_LocalScale: {x: 0.15, y: 0.02, z: 0.02}
+ m_Children: []
+ m_Father: {fileID: 222720538}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &442547010
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 442547011}
+ - component: {fileID: 442547015}
+ - component: {fileID: 442547014}
+ - component: {fileID: 442547013}
+ - component: {fileID: 442547012}
+ m_Layer: 0
+ m_Name: ReadoutText
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &442547011
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 442547010}
+ m_LocalRotation: {x: -0, y: -0.1371592, z: -0, w: 0.990549}
+ m_LocalPosition: {x: 0, y: 0, z: 0.10797882}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 1488577029}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: -15.767, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: -0.21408045, y: -0.10875997}
+ m_SizeDelta: {x: 0.25, y: 0.15}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &442547012
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 442547010}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_text: '
+
+
+'
+ m_isRightToLeft: 0
+ m_fontAsset: {fileID: 11400000, guid: afc8299d5d5bbd440a0616c8ecbc7217, type: 2}
+ m_sharedMaterial: {fileID: 21340371490990018, guid: afc8299d5d5bbd440a0616c8ecbc7217,
+ type: 2}
+ m_fontSharedMaterials: []
+ m_fontMaterial: {fileID: 0}
+ m_fontMaterials: []
+ m_fontColor32:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+ m_enableVertexGradient: 0
+ m_colorMode: 3
+ m_fontColorGradient:
+ topLeft: {r: 1, g: 1, b: 1, a: 1}
+ topRight: {r: 1, g: 1, b: 1, a: 1}
+ bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+ bottomRight: {r: 1, g: 1, b: 1, a: 1}
+ m_fontColorGradientPreset: {fileID: 0}
+ m_spriteAsset: {fileID: 0}
+ m_tintAllSprites: 0
+ m_overrideHtmlColors: 0
+ m_faceColor:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_outlineColor:
+ serializedVersion: 2
+ rgba: 4278190080
+ m_fontSize: 0.15
+ m_fontSizeBase: 0.15
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 0
+ m_textAlignment: 260
+ m_characterSpacing: 0
+ m_wordSpacing: 0
+ m_lineSpacing: 0
+ m_lineSpacingMax: 0
+ m_paragraphSpacing: 0
+ m_charWidthMaxAdj: 0
+ m_enableWordWrapping: 1
+ m_wordWrappingRatios: 0.4
+ m_overflowMode: 0
+ m_firstOverflowCharacterIndex: -1
+ m_linkedTextComponent: {fileID: 0}
+ m_isLinkedTextComponent: 0
+ m_isTextTruncated: 0
+ m_enableKerning: 1
+ m_enableExtraPadding: 0
+ checkPaddingRequired: 0
+ m_isRichText: 1
+ m_parseCtrlCharacters: 1
+ m_isOrthographic: 0
+ m_isCullingEnabled: 0
+ m_ignoreRectMaskCulling: 0
+ m_ignoreCulling: 1
+ m_horizontalMapping: 0
+ m_verticalMapping: 0
+ m_uvLineOffset: 0
+ m_geometrySortingOrder: 0
+ m_VertexBufferAutoSizeReduction: 1
+ m_firstVisibleCharacter: 0
+ m_useMaxVisibleDescender: 1
+ m_pageToDisplay: 1
+ m_margin: {x: 0, y: 0, z: 0, w: 0}
+ m_textInfo:
+ textComponent: {fileID: 442547012}
+ characterCount: 0
+ spriteCount: 0
+ spaceCount: 0
+ wordCount: 0
+ linkCount: 0
+ lineCount: 0
+ pageCount: 0
+ materialCount: 1
+ m_isUsingLegacyAnimationComponent: 0
+ m_isVolumetricText: 0
+ m_spriteAnimator: {fileID: 0}
+ m_hasFontAssetChanged: 0
+ m_renderer: {fileID: 442547015}
+ m_subTextObjects:
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ m_maskType: 0
+--- !u!222 &442547013
+CanvasRenderer:
+ m_ObjectHideFlags: 2
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 442547010}
+ m_CullTransparentMesh: 0
+--- !u!33 &442547014
+MeshFilter:
+ m_ObjectHideFlags: 2
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 442547010}
+ m_Mesh: {fileID: 0}
+--- !u!23 &442547015
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 442547010}
+ m_Enabled: 1
+ m_CastShadows: 0
+ m_ReceiveShadows: 0
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 21340371490990018, guid: afc8299d5d5bbd440a0616c8ecbc7217, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!1 &508005055
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 508005056}
+ m_Layer: 0
+ m_Name: MixedRealityPlayspace
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &508005056
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 508005055}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 1955111998}
+ m_Father: {fileID: 0}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &826893199
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 826893200}
+ - component: {fileID: 826893202}
+ - component: {fileID: 826893201}
+ m_Layer: 0
+ m_Name: node_id4 1
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &826893200
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 826893199}
+ m_LocalRotation: {x: 0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: -0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 1683235918}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!23 &826893201
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 826893199}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 2e7ee0c64b3021a46be96a51517a1d94, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &826893202
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 826893199}
+ m_Mesh: {fileID: 4300002, guid: fda2bf148915d3f419cd5690edf148c3, type: 3}
+--- !u!1 &844079863
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 844079867}
+ - component: {fileID: 844079866}
+ - component: {fileID: 844079865}
+ - component: {fileID: 844079864}
+ - component: {fileID: 844079868}
+ - component: {fileID: 844079870}
+ - component: {fileID: 844079869}
+ m_Layer: 0
+ m_Name: Cube
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!65 &844079864
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 844079863}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Size: {x: 1, y: 1, z: 1}
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &844079865
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 844079863}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 3c55769e893c4f4c8c51b7fa69bee2b9, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &844079866
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 844079863}
+ m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &844079867
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 844079863}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0.1483, y: -0.04639998, z: 0.0618}
+ m_LocalScale: {x: 0.05, y: 0.05, z: 0.05}
+ m_Children: []
+ m_Father: {fileID: 189989385}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!54 &844079868
+Rigidbody:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 844079863}
+ serializedVersion: 2
+ m_Mass: 1
+ m_Drag: 0
+ m_AngularDrag: 0.05
+ m_UseGravity: 1
+ m_IsKinematic: 0
+ m_Interpolate: 0
+ m_Constraints: 0
+ m_CollisionDetection: 0
+--- !u!114 &844079869
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 844079863}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 181cd563a8349c34ea8978b0bc8d9c7e, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ hostTransform: {fileID: 0}
+ manipulationType: 3
+ twoHandedManipulationType: 3
+ allowFarManipulation: 1
+ oneHandRotationModeNear: 1
+ oneHandRotationModeFar: 1
+ releaseBehavior: 3
+ smoothingActive: 1
+ moveLerpTime: 0.001
+ rotateLerpTime: 0.001
+ scaleLerpTime: 0.001
+ onManipulationStarted:
+ m_PersistentCalls:
+ m_Calls: []
+ onManipulationEnded:
+ m_PersistentCalls:
+ m_Calls: []
+ onHoverEntered:
+ m_PersistentCalls:
+ m_Calls: []
+ onHoverExited:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!114 &844079870
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 844079863}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5afd5316c63705643b3daba5a6e923bd, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ ShowTetherWhenManipulating: 0
+--- !u!1 &860869864
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 860869865}
+ - component: {fileID: 860869868}
+ - component: {fileID: 860869867}
+ - component: {fileID: 860869866}
+ - component: {fileID: 860869870}
+ - component: {fileID: 860869869}
+ m_Layer: 0
+ m_Name: Sphere
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &860869865
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 860869864}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0.137, y: -0.07799998, z: 0}
+ m_LocalScale: {x: 0.1, y: 0.1, z: 0.1}
+ m_Children: []
+ m_Father: {fileID: 43646912}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!135 &860869866
+SphereCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 860869864}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Radius: 0.5
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &860869867
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 860869864}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: e4c84336a1663704083b58c1b3d8cedf, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &860869868
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 860869864}
+ m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!59 &860869869
+HingeJoint:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 860869864}
+ m_ConnectedBody: {fileID: 1794223522}
+ m_Anchor: {x: 0, y: -0.56, z: 0}
+ m_Axis: {x: 1, y: 0, z: 0}
+ m_AutoConfigureConnectedAnchor: 1
+ m_ConnectedAnchor: {x: 0.00000029802322, y: 1.0400009, z: 0}
+ m_UseSpring: 1
+ m_Spring:
+ spring: 1
+ damper: 0
+ targetPosition: 0.001
+ m_UseMotor: 0
+ m_Motor:
+ targetVelocity: 0
+ force: 0
+ freeSpin: 0
+ m_UseLimits: 1
+ m_Limits:
+ min: -90
+ max: 90
+ bounciness: 0
+ bounceMinVelocity: 0.2
+ contactDistance: 0
+ m_BreakForce: Infinity
+ m_BreakTorque: Infinity
+ m_EnableCollision: 0
+ m_EnablePreprocessing: 1
+ m_MassScale: 1
+ m_ConnectedMassScale: 1
+--- !u!54 &860869870
+Rigidbody:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 860869864}
+ serializedVersion: 2
+ m_Mass: 1
+ m_Drag: 0
+ m_AngularDrag: 0.05
+ m_UseGravity: 0
+ m_IsKinematic: 0
+ m_Interpolate: 0
+ m_Constraints: 0
+ m_CollisionDetection: 0
+--- !u!1 &887160071
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 887160072}
+ - component: {fileID: 887160075}
+ - component: {fileID: 887160074}
+ m_Layer: 0
+ m_Name: MRTKLogo
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &887160072
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 887160071}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0.002666513, y: 0.010786453, z: -0.78999996}
+ m_LocalScale: {x: 0.7999999, y: 0.46666664, z: 10}
+ m_Children: []
+ m_Father: {fileID: 317785146}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!23 &887160074
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 887160071}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 65e7f8d2543587e45ad84ae8eac24bc6, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &887160075
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 887160071}
+ m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1 &1174152839
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1174152843}
+ - component: {fileID: 1174152842}
+ - component: {fileID: 1174152841}
+ - component: {fileID: 1174152840}
+ - component: {fileID: 1174152846}
+ m_Layer: 0
+ m_Name: Base
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!65 &1174152840
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1174152839}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Size: {x: 1, y: 1, z: 1}
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &1174152841
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1174152839}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: ec72a3a105768f746b556a8dfdae61a8, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &1174152842
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1174152839}
+ m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &1174152843
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1174152839}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0.137, y: -0.07799998, z: 0}
+ m_LocalScale: {x: 0.35, y: 0.01, z: 0.35}
+ m_Children: []
+ m_Father: {fileID: 189989385}
+ m_RootOrder: 4
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!54 &1174152846
+Rigidbody:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1174152839}
+ serializedVersion: 2
+ m_Mass: 1
+ m_Drag: 0
+ m_AngularDrag: 0.05
+ m_UseGravity: 0
+ m_IsKinematic: 1
+ m_Interpolate: 0
+ m_Constraints: 0
+ m_CollisionDetection: 0
+--- !u!1001 &1300550606
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ m_TransformParent: {fileID: 189989385}
+ m_Modifications:
+ - target: {fileID: 100002, guid: bb88669a3463b36438d9225a3ecd3a35, type: 3}
+ propertyPath: m_Name
+ value: Model_Icosa
+ objectReference: {fileID: 0}
+ - target: {fileID: 400002, guid: bb88669a3463b36438d9225a3ecd3a35, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0.035
+ objectReference: {fileID: 0}
+ - target: {fileID: 400002, guid: bb88669a3463b36438d9225a3ecd3a35, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: -0.03249998
+ objectReference: {fileID: 0}
+ - target: {fileID: 400002, guid: bb88669a3463b36438d9225a3ecd3a35, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: -0.0158
+ objectReference: {fileID: 0}
+ - target: {fileID: 400002, guid: bb88669a3463b36438d9225a3ecd3a35, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: 0.1684167
+ objectReference: {fileID: 0}
+ - target: {fileID: 400002, guid: bb88669a3463b36438d9225a3ecd3a35, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 400002, guid: bb88669a3463b36438d9225a3ecd3a35, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 400002, guid: bb88669a3463b36438d9225a3ecd3a35, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 0.9857159
+ objectReference: {fileID: 0}
+ - target: {fileID: 400002, guid: bb88669a3463b36438d9225a3ecd3a35, type: 3}
+ propertyPath: m_RootOrder
+ value: 2
+ objectReference: {fileID: 0}
+ - target: {fileID: 400002, guid: bb88669a3463b36438d9225a3ecd3a35, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 19.392
+ objectReference: {fileID: 0}
+ - target: {fileID: 400002, guid: bb88669a3463b36438d9225a3ecd3a35, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 400002, guid: bb88669a3463b36438d9225a3ecd3a35, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 400002, guid: bb88669a3463b36438d9225a3ecd3a35, type: 3}
+ propertyPath: m_LocalScale.x
+ value: 0.05
+ objectReference: {fileID: 0}
+ - target: {fileID: 400002, guid: bb88669a3463b36438d9225a3ecd3a35, type: 3}
+ propertyPath: m_LocalScale.y
+ value: 0.049999997
+ objectReference: {fileID: 0}
+ - target: {fileID: 400002, guid: bb88669a3463b36438d9225a3ecd3a35, type: 3}
+ propertyPath: m_LocalScale.z
+ value: 0.049999997
+ objectReference: {fileID: 0}
+ - target: {fileID: 400004, guid: bb88669a3463b36438d9225a3ecd3a35, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 2300000, guid: bb88669a3463b36438d9225a3ecd3a35, type: 3}
+ propertyPath: m_Materials.Array.data[0]
+ value:
+ objectReference: {fileID: 2100000, guid: e4c84336a1663704083b58c1b3d8cedf, type: 2}
+ m_RemovedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: bb88669a3463b36438d9225a3ecd3a35, type: 3}
+--- !u!1 &1300550607 stripped
+GameObject:
+ m_CorrespondingSourceObject: {fileID: 100002, guid: bb88669a3463b36438d9225a3ecd3a35,
+ type: 3}
+ m_PrefabInstance: {fileID: 1300550606}
+ m_PrefabAsset: {fileID: 0}
+--- !u!114 &1300550608
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1300550607}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 181cd563a8349c34ea8978b0bc8d9c7e, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ hostTransform: {fileID: 0}
+ manipulationType: 3
+ twoHandedManipulationType: 3
+ allowFarManipulation: 1
+ oneHandRotationModeNear: 1
+ oneHandRotationModeFar: 1
+ releaseBehavior: 3
+ smoothingActive: 1
+ moveLerpTime: 0.001
+ rotateLerpTime: 0.001
+ scaleLerpTime: 0.001
+ onManipulationStarted:
+ m_PersistentCalls:
+ m_Calls: []
+ onManipulationEnded:
+ m_PersistentCalls:
+ m_Calls: []
+ onHoverEntered:
+ m_PersistentCalls:
+ m_Calls: []
+ onHoverExited:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!54 &1300550609
+Rigidbody:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1300550607}
+ serializedVersion: 2
+ m_Mass: 1
+ m_Drag: 0
+ m_AngularDrag: 0.05
+ m_UseGravity: 1
+ m_IsKinematic: 0
+ m_Interpolate: 0
+ m_Constraints: 0
+ m_CollisionDetection: 0
+--- !u!64 &1300550610
+MeshCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1300550607}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 3
+ m_Convex: 1
+ m_CookingOptions: 14
+ m_Mesh: {fileID: 4300000, guid: bb88669a3463b36438d9225a3ecd3a35, type: 3}
+--- !u!114 &1300550611
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1300550607}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5afd5316c63705643b3daba5a6e923bd, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ ShowTetherWhenManipulating: 0
+--- !u!4 &1300550612 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 400002, guid: bb88669a3463b36438d9225a3ecd3a35,
+ type: 3}
+ m_PrefabInstance: {fileID: 1300550606}
+ m_PrefabAsset: {fileID: 0}
+--- !u!1 &1302525053
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1302525055}
+ - component: {fileID: 1302525054}
+ m_Layer: 0
+ m_Name: Directional Light
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!108 &1302525054
+Light:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1302525053}
+ m_Enabled: 1
+ serializedVersion: 8
+ m_Type: 1
+ m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
+ m_Intensity: 1
+ m_Range: 10
+ m_SpotAngle: 30
+ m_CookieSize: 10
+ m_Shadows:
+ m_Type: 2
+ m_Resolution: -1
+ m_CustomResolution: -1
+ m_Strength: 1
+ m_Bias: 0.05
+ m_NormalBias: 0.4
+ m_NearPlane: 0.2
+ m_Cookie: {fileID: 0}
+ m_DrawHalo: 0
+ m_Flare: {fileID: 0}
+ m_RenderMode: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_Lightmapping: 4
+ m_LightShadowCasterMode: 0
+ m_AreaSize: {x: 1, y: 1}
+ m_BounceIntensity: 1
+ m_ColorTemperature: 6570
+ m_UseColorTemperature: 0
+ m_ShadowRadius: 0
+ m_ShadowAngle: 0
+--- !u!4 &1302525055
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1302525053}
+ m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
+ m_LocalPosition: {x: 0, y: 3, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+--- !u!1 &1355410462
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1355410463}
+ - component: {fileID: 1355410466}
+ - component: {fileID: 1355410465}
+ m_Layer: 0
+ m_Name: MRTKLogo
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1355410463
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1355410462}
+ m_LocalRotation: {x: -0, y: 1, z: -0, w: 0}
+ m_LocalPosition: {x: 0.002666513, y: 0.010786453, z: 0.8099973}
+ m_LocalScale: {x: 0.7999999, y: 0.46666664, z: 10}
+ m_Children: []
+ m_Father: {fileID: 317785146}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0}
+--- !u!23 &1355410465
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1355410462}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 65e7f8d2543587e45ad84ae8eac24bc6, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &1355410466
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1355410462}
+ m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1 &1421032449
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1421032454}
+ - component: {fileID: 1421032453}
+ - component: {fileID: 1421032452}
+ - component: {fileID: 1421032451}
+ - component: {fileID: 1421032450}
+ m_Layer: 0
+ m_Name: Header
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1421032450
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1421032449}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_text: Rigidbodies + manipulation handler
+ m_isRightToLeft: 0
+ m_fontAsset: {fileID: 11400000, guid: 6a84f857bec7e7345843ae29404c57ce, type: 2}
+ m_sharedMaterial: {fileID: 21202819797275496, guid: 6a84f857bec7e7345843ae29404c57ce,
+ type: 2}
+ m_fontSharedMaterials: []
+ m_fontMaterial: {fileID: 0}
+ m_fontMaterials: []
+ m_fontColor32:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+ m_enableVertexGradient: 0
+ m_colorMode: 3
+ m_fontColorGradient:
+ topLeft: {r: 1, g: 1, b: 1, a: 1}
+ topRight: {r: 1, g: 1, b: 1, a: 1}
+ bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+ bottomRight: {r: 1, g: 1, b: 1, a: 1}
+ m_fontColorGradientPreset: {fileID: 0}
+ m_spriteAsset: {fileID: 0}
+ m_tintAllSprites: 0
+ m_overrideHtmlColors: 0
+ m_faceColor:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_outlineColor:
+ serializedVersion: 2
+ rgba: 4278190080
+ m_fontSize: 0.1
+ m_fontSizeBase: 0.1
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 0
+ m_textAlignment: 258
+ m_characterSpacing: 0
+ m_wordSpacing: 0
+ m_lineSpacing: 0
+ m_lineSpacingMax: 0
+ m_paragraphSpacing: 0
+ m_charWidthMaxAdj: 0
+ m_enableWordWrapping: 1
+ m_wordWrappingRatios: 0.4
+ m_overflowMode: 0
+ m_firstOverflowCharacterIndex: -1
+ m_linkedTextComponent: {fileID: 0}
+ m_isLinkedTextComponent: 0
+ m_isTextTruncated: 0
+ m_enableKerning: 1
+ m_enableExtraPadding: 0
+ checkPaddingRequired: 0
+ m_isRichText: 1
+ m_parseCtrlCharacters: 1
+ m_isOrthographic: 0
+ m_isCullingEnabled: 0
+ m_ignoreRectMaskCulling: 0
+ m_ignoreCulling: 1
+ m_horizontalMapping: 0
+ m_verticalMapping: 0
+ m_uvLineOffset: 0
+ m_geometrySortingOrder: 0
+ m_VertexBufferAutoSizeReduction: 1
+ m_firstVisibleCharacter: 0
+ m_useMaxVisibleDescender: 1
+ m_pageToDisplay: 1
+ m_margin: {x: 0, y: 0, z: 0, w: 0}
+ m_textInfo:
+ textComponent: {fileID: 1421032450}
+ characterCount: 0
+ spriteCount: 0
+ spaceCount: 0
+ wordCount: 0
+ linkCount: 0
+ lineCount: 0
+ pageCount: 0
+ materialCount: 1
+ m_isUsingLegacyAnimationComponent: 0
+ m_isVolumetricText: 0
+ m_spriteAnimator: {fileID: 0}
+ m_hasFontAssetChanged: 0
+ m_renderer: {fileID: 1421032453}
+ m_subTextObjects:
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ m_maskType: 0
+--- !u!222 &1421032451
+CanvasRenderer:
+ m_ObjectHideFlags: 2
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1421032449}
+ m_CullTransparentMesh: 0
+--- !u!33 &1421032452
+MeshFilter:
+ m_ObjectHideFlags: 2
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1421032449}
+ m_Mesh: {fileID: 0}
+--- !u!23 &1421032453
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1421032449}
+ m_Enabled: 1
+ m_CastShadows: 0
+ m_ReceiveShadows: 0
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 21202819797275496, guid: 6a84f857bec7e7345843ae29404c57ce, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!224 &1421032454
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1421032449}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0.17500001}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 189989385}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 0.1349, y: 0.013499975}
+ m_SizeDelta: {x: 0.3, y: 0.05}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &1462653015
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1462653017}
+ - component: {fileID: 1462653016}
+ m_Layer: 0
+ m_Name: MixedRealityToolkit
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1462653016
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1462653015}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 83d9acc7968244a8886f3af591305bcb, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ activeProfile: {fileID: 11400000, guid: ec6c5962fb980c041854a25f84d6f2e6, type: 2}
+--- !u!4 &1462653017
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1462653015}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1488577028
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1488577029}
+ m_Layer: 0
+ m_Name: TriggerEvents
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1488577029
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1488577028}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: -0.076919556, y: -0.19524002, z: 0.4517212}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 442547011}
+ - {fileID: 1814916318}
+ - {fileID: 1990255722}
+ m_Father: {fileID: 0}
+ m_RootOrder: 7
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1683235911
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1683235918}
+ - component: {fileID: 1683235917}
+ - component: {fileID: 1683235916}
+ - component: {fileID: 1683235915}
+ - component: {fileID: 1683235914}
+ - component: {fileID: 1683235913}
+ - component: {fileID: 1683235912}
+ m_Layer: 0
+ m_Name: Cheese
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1683235912
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1683235911}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 181cd563a8349c34ea8978b0bc8d9c7e, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ hostTransform: {fileID: 0}
+ manipulationType: 3
+ twoHandedManipulationType: 3
+ allowFarManipulation: 1
+ oneHandRotationModeNear: 1
+ oneHandRotationModeFar: 1
+ releaseBehavior: 3
+ smoothingActive: 1
+ moveLerpTime: 0.001
+ rotateLerpTime: 0.001
+ scaleLerpTime: 0.001
+ onManipulationStarted:
+ m_PersistentCalls:
+ m_Calls: []
+ onManipulationEnded:
+ m_PersistentCalls:
+ m_Calls: []
+ onHoverEntered:
+ m_PersistentCalls:
+ m_Calls: []
+ onHoverExited:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!114 &1683235913
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1683235911}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5afd5316c63705643b3daba5a6e923bd, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ ShowTetherWhenManipulating: 0
+--- !u!54 &1683235914
+Rigidbody:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1683235911}
+ serializedVersion: 2
+ m_Mass: 1
+ m_Drag: 0
+ m_AngularDrag: 0.05
+ m_UseGravity: 1
+ m_IsKinematic: 0
+ m_Interpolate: 0
+ m_Constraints: 0
+ m_CollisionDetection: 0
+--- !u!64 &1683235915
+MeshCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1683235911}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 3
+ m_Convex: 1
+ m_CookingOptions: 14
+ m_Mesh: {fileID: 4300000, guid: fda2bf148915d3f419cd5690edf148c3, type: 3}
+--- !u!23 &1683235916
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1683235911}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 71d471797c0e430783230146721c3fcb, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &1683235917
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1683235911}
+ m_Mesh: {fileID: 4300000, guid: fda2bf148915d3f419cd5690edf148c3, type: 3}
+--- !u!4 &1683235918
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1683235911}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0.1704, y: -0.07229998, z: -0.0197}
+ m_LocalScale: {x: 0.02171, y: 0.02171, z: 0.02171}
+ m_Children:
+ - {fileID: 826893200}
+ m_Father: {fileID: 189989385}
+ m_RootOrder: 3
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1794223520
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1794223521}
+ - component: {fileID: 1794223525}
+ - component: {fileID: 1794223524}
+ - component: {fileID: 1794223523}
+ - component: {fileID: 1794223522}
+ m_Layer: 0
+ m_Name: Cylinder
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1794223521
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1794223520}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0.137, y: -0.16, z: 0}
+ m_LocalScale: {x: 0.1, y: 0.025, z: 0.1}
+ m_Children: []
+ m_Father: {fileID: 43646912}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!54 &1794223522
+Rigidbody:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1794223520}
+ serializedVersion: 2
+ m_Mass: 1
+ m_Drag: 0
+ m_AngularDrag: 0.05
+ m_UseGravity: 0
+ m_IsKinematic: 1
+ m_Interpolate: 0
+ m_Constraints: 0
+ m_CollisionDetection: 0
+--- !u!136 &1794223523
+CapsuleCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1794223520}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ m_Radius: 0.5000001
+ m_Height: 2
+ m_Direction: 1
+ m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697}
+--- !u!23 &1794223524
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1794223520}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 56848fd596f082a43844edfc0e7647ae, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &1794223525
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1794223520}
+ m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1 &1814916317
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1814916318}
+ - component: {fileID: 1814916322}
+ - component: {fileID: 1814916321}
+ - component: {fileID: 1814916320}
+ - component: {fileID: 1814916319}
+ m_Layer: 0
+ m_Name: Sphere
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1814916318
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1814916317}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: -0.033580445, y: -0.08105999, z: 0.15837878}
+ m_LocalScale: {x: 0.1, y: 0.1, z: 0.1}
+ m_Children: []
+ m_Father: {fileID: 1488577029}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1814916319
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1814916317}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 465f08eca701b8e438b3f64c70c77a17, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ textField: {fileID: 442547012}
+--- !u!135 &1814916320
+SphereCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1814916317}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 1
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Radius: 0.5
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &1814916321
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1814916317}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 47c3d3b0d8143e3489351498fceed55d, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &1814916322
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1814916317}
+ m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1001 &1860348755
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ m_TransformParent: {fileID: 0}
+ m_Modifications:
+ - target: {fileID: 1054075472835142, guid: a900c08743a94c328074df8bbe3eb63c, type: 3}
+ propertyPath: m_IsActive
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 1149545904682892, guid: a900c08743a94c328074df8bbe3eb63c, type: 3}
+ propertyPath: m_IsActive
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 1951033628531078, guid: a900c08743a94c328074df8bbe3eb63c, type: 3}
+ propertyPath: m_Name
+ value: SceneDescriptionPanel
+ objectReference: {fileID: 0}
+ - target: {fileID: 4753320988497866, guid: a900c08743a94c328074df8bbe3eb63c, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0.796
+ objectReference: {fileID: 0}
+ - target: {fileID: 4753320988497866, guid: a900c08743a94c328074df8bbe3eb63c, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: -0.228
+ objectReference: {fileID: 0}
+ - target: {fileID: 4753320988497866, guid: a900c08743a94c328074df8bbe3eb63c, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 1.106
+ objectReference: {fileID: 0}
+ - target: {fileID: 4753320988497866, guid: a900c08743a94c328074df8bbe3eb63c, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4753320988497866, guid: a900c08743a94c328074df8bbe3eb63c, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: 0.21925522
+ objectReference: {fileID: 0}
+ - target: {fileID: 4753320988497866, guid: a900c08743a94c328074df8bbe3eb63c, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4753320988497866, guid: a900c08743a94c328074df8bbe3eb63c, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 0.97566754
+ objectReference: {fileID: 0}
+ - target: {fileID: 4753320988497866, guid: a900c08743a94c328074df8bbe3eb63c, type: 3}
+ propertyPath: m_RootOrder
+ value: 3
+ objectReference: {fileID: 0}
+ - target: {fileID: 4753320988497866, guid: a900c08743a94c328074df8bbe3eb63c, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4753320988497866, guid: a900c08743a94c328074df8bbe3eb63c, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 25.331001
+ objectReference: {fileID: 0}
+ - target: {fileID: 4753320988497866, guid: a900c08743a94c328074df8bbe3eb63c, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 114107642412081004, guid: a900c08743a94c328074df8bbe3eb63c,
+ type: 3}
+ propertyPath: m_Text
+ value: Hand Physics Service
+ objectReference: {fileID: 0}
+ - target: {fileID: 114121190672569774, guid: a900c08743a94c328074df8bbe3eb63c,
+ type: 3}
+ propertyPath: m_Text
+ value: To use
+ objectReference: {fileID: 0}
+ - target: {fileID: 114125765304321574, guid: a900c08743a94c328074df8bbe3eb63c,
+ type: 3}
+ propertyPath: m_Text
+ value: Key features
+ objectReference: {fileID: 0}
+ - target: {fileID: 114186135864427680, guid: a900c08743a94c328074df8bbe3eb63c,
+ type: 3}
+ propertyPath: m_Text
+ value: Note
+ objectReference: {fileID: 0}
+ - target: {fileID: 114713125240876806, guid: a900c08743a94c328074df8bbe3eb63c,
+ type: 3}
+ propertyPath: m_Text
+ value: HoloLens 2
+ objectReference: {fileID: 0}
+ - target: {fileID: 114995780653097258, guid: a900c08743a94c328074df8bbe3eb63c,
+ type: 3}
+ propertyPath: m_Text
+ value: 'This extension service enables rigid body collision events and interactions
+ with articulated hands.
+
+
+
+
+ - Native Unity physics driven by hand input
+
+ - Configurable prefab for fingertips
+
+ - Configurable prefab for palms
+
+
+
+
+ Enable the HandPhysics Extension Service. Ensure physical objects have a collider,
+ rigidbody, and are set to the appropriate layer.
+
+
+
+
+ While the service defaults to the "default" layer, it is recommended to use
+ a separate layer for HandPhysics objects. Otherwise there may be unwanted
+ collisions and/or inaccurate raycasts.'
+ objectReference: {fileID: 0}
+ - target: {fileID: 224745427211728820, guid: a900c08743a94c328074df8bbe3eb63c,
+ type: 3}
+ propertyPath: m_AnchoredPosition.y
+ value: 0.078
+ objectReference: {fileID: 0}
+ - target: {fileID: 224849082003076088, guid: a900c08743a94c328074df8bbe3eb63c,
+ type: 3}
+ propertyPath: m_AnchoredPosition.y
+ value: 0.201
+ objectReference: {fileID: 0}
+ - target: {fileID: 224963507392718102, guid: a900c08743a94c328074df8bbe3eb63c,
+ type: 3}
+ propertyPath: m_AnchoredPosition.y
+ value: -0.021
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: a900c08743a94c328074df8bbe3eb63c, type: 3}
+--- !u!1 &1955111997
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1955111998}
+ - component: {fileID: 1955112003}
+ - component: {fileID: 1955112002}
+ - component: {fileID: 1955112001}
+ - component: {fileID: 1955112000}
+ - component: {fileID: 1955111999}
+ m_Layer: 0
+ m_Name: Main Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1955111998
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1955111997}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 508005056}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1955111999
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1955111997}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: bf98dd1206224111a38765365e98e207, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ lockCursorWhenFocusLocked: 1
+ setCursorInvisibleWhenFocusLocked: 0
+ maxGazeCollisionDistance: 10
+ raycastLayerMasks:
+ - serializedVersion: 2
+ m_Bits: 4294967291
+ stabilizer:
+ storedStabilitySamples: 60
+ gazeTransform: {fileID: 0}
+ minHeadVelocityThreshold: 0.5
+ maxHeadVelocityThreshold: 2
+--- !u!114 &1955112000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1955111997}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 7a21b486d0bb44444b1418aaa38b44de, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_HorizontalAxis: Horizontal
+ m_VerticalAxis: Vertical
+ m_SubmitButton: Submit
+ m_CancelButton: Cancel
+ m_InputActionsPerSecond: 10
+ m_RepeatDelay: 0.5
+ m_ForceModuleActive: 0
+--- !u!114 &1955112001
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1955111997}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_FirstSelected: {fileID: 0}
+ m_sendNavigationEvents: 1
+ m_DragThreshold: 10
+--- !u!81 &1955112002
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1955111997}
+ m_Enabled: 1
+--- !u!20 &1955112003
+Camera:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1955111997}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 2
+ m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1}
+ m_projectionMatrixMode: 1
+ m_SensorSize: {x: 36, y: 24}
+ m_LensShift: {x: 0, y: 0}
+ m_GateFitMode: 2
+ m_FocalLength: 50
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.1
+ far clip plane: 1000
+ field of view: 60
+ orthographic: 0
+ orthographic size: 5
+ m_Depth: -1
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 1
+ m_AllowMSAA: 1
+ m_AllowDynamicResolution: 0
+ m_ForceIntoRT: 0
+ m_OcclusionCulling: 1
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
+--- !u!1 &1990255721
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1990255722}
+ - component: {fileID: 1990255726}
+ - component: {fileID: 1990255725}
+ - component: {fileID: 1990255724}
+ - component: {fileID: 1990255723}
+ m_Layer: 0
+ m_Name: Header
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1990255722
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1990255721}
+ m_LocalRotation: {x: -0, y: -0.1371592, z: -0, w: 0.990549}
+ m_LocalPosition: {x: 0, y: 0, z: 0.1566}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 1488577029}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: -15.767, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: -0.0367, y: -0.0317}
+ m_SizeDelta: {x: 0.3, y: 0.05}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1990255723
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1990255721}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_text: Trigger events from all digits
+ m_isRightToLeft: 0
+ m_fontAsset: {fileID: 11400000, guid: 6a84f857bec7e7345843ae29404c57ce, type: 2}
+ m_sharedMaterial: {fileID: 21202819797275496, guid: 6a84f857bec7e7345843ae29404c57ce,
+ type: 2}
+ m_fontSharedMaterials: []
+ m_fontMaterial: {fileID: 0}
+ m_fontMaterials: []
+ m_fontColor32:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+ m_enableVertexGradient: 0
+ m_colorMode: 3
+ m_fontColorGradient:
+ topLeft: {r: 1, g: 1, b: 1, a: 1}
+ topRight: {r: 1, g: 1, b: 1, a: 1}
+ bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+ bottomRight: {r: 1, g: 1, b: 1, a: 1}
+ m_fontColorGradientPreset: {fileID: 0}
+ m_spriteAsset: {fileID: 0}
+ m_tintAllSprites: 0
+ m_overrideHtmlColors: 0
+ m_faceColor:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_outlineColor:
+ serializedVersion: 2
+ rgba: 4278190080
+ m_fontSize: 0.1
+ m_fontSizeBase: 0.1
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 0
+ m_textAlignment: 258
+ m_characterSpacing: 0
+ m_wordSpacing: 0
+ m_lineSpacing: 0
+ m_lineSpacingMax: 0
+ m_paragraphSpacing: 0
+ m_charWidthMaxAdj: 0
+ m_enableWordWrapping: 1
+ m_wordWrappingRatios: 0.4
+ m_overflowMode: 0
+ m_firstOverflowCharacterIndex: -1
+ m_linkedTextComponent: {fileID: 0}
+ m_isLinkedTextComponent: 0
+ m_isTextTruncated: 0
+ m_enableKerning: 1
+ m_enableExtraPadding: 0
+ checkPaddingRequired: 0
+ m_isRichText: 1
+ m_parseCtrlCharacters: 1
+ m_isOrthographic: 0
+ m_isCullingEnabled: 0
+ m_ignoreRectMaskCulling: 0
+ m_ignoreCulling: 1
+ m_horizontalMapping: 0
+ m_verticalMapping: 0
+ m_uvLineOffset: 0
+ m_geometrySortingOrder: 0
+ m_VertexBufferAutoSizeReduction: 1
+ m_firstVisibleCharacter: 0
+ m_useMaxVisibleDescender: 1
+ m_pageToDisplay: 1
+ m_margin: {x: 0, y: 0, z: 0, w: 0}
+ m_textInfo:
+ textComponent: {fileID: 1990255723}
+ characterCount: 0
+ spriteCount: 0
+ spaceCount: 0
+ wordCount: 0
+ linkCount: 0
+ lineCount: 0
+ pageCount: 0
+ materialCount: 1
+ m_isUsingLegacyAnimationComponent: 0
+ m_isVolumetricText: 0
+ m_spriteAnimator: {fileID: 0}
+ m_hasFontAssetChanged: 0
+ m_renderer: {fileID: 1990255726}
+ m_subTextObjects:
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ m_maskType: 0
+--- !u!222 &1990255724
+CanvasRenderer:
+ m_ObjectHideFlags: 2
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1990255721}
+ m_CullTransparentMesh: 0
+--- !u!33 &1990255725
+MeshFilter:
+ m_ObjectHideFlags: 2
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1990255721}
+ m_Mesh: {fileID: 0}
+--- !u!23 &1990255726
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1990255721}
+ m_Enabled: 1
+ m_CastShadows: 0
+ m_ReceiveShadows: 0
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 21202819797275496, guid: 6a84f857bec7e7345843ae29404c57ce, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!1 &2090703632
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2090703637}
+ - component: {fileID: 2090703636}
+ - component: {fileID: 2090703635}
+ - component: {fileID: 2090703634}
+ - component: {fileID: 2090703633}
+ m_Layer: 0
+ m_Name: Header
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &2090703633
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2090703632}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_text: Rigidbodies + hinge constraints
+ m_isRightToLeft: 0
+ m_fontAsset: {fileID: 11400000, guid: 6a84f857bec7e7345843ae29404c57ce, type: 2}
+ m_sharedMaterial: {fileID: 21202819797275496, guid: 6a84f857bec7e7345843ae29404c57ce,
+ type: 2}
+ m_fontSharedMaterials: []
+ m_fontMaterial: {fileID: 0}
+ m_fontMaterials: []
+ m_fontColor32:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+ m_enableVertexGradient: 0
+ m_colorMode: 3
+ m_fontColorGradient:
+ topLeft: {r: 1, g: 1, b: 1, a: 1}
+ topRight: {r: 1, g: 1, b: 1, a: 1}
+ bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+ bottomRight: {r: 1, g: 1, b: 1, a: 1}
+ m_fontColorGradientPreset: {fileID: 0}
+ m_spriteAsset: {fileID: 0}
+ m_tintAllSprites: 0
+ m_overrideHtmlColors: 0
+ m_faceColor:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_outlineColor:
+ serializedVersion: 2
+ rgba: 4278190080
+ m_fontSize: 0.1
+ m_fontSizeBase: 0.1
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 0
+ m_textAlignment: 258
+ m_characterSpacing: 0
+ m_wordSpacing: 0
+ m_lineSpacing: 0
+ m_lineSpacingMax: 0
+ m_paragraphSpacing: 0
+ m_charWidthMaxAdj: 0
+ m_enableWordWrapping: 1
+ m_wordWrappingRatios: 0.4
+ m_overflowMode: 0
+ m_firstOverflowCharacterIndex: -1
+ m_linkedTextComponent: {fileID: 0}
+ m_isLinkedTextComponent: 0
+ m_isTextTruncated: 0
+ m_enableKerning: 1
+ m_enableExtraPadding: 0
+ checkPaddingRequired: 0
+ m_isRichText: 1
+ m_parseCtrlCharacters: 1
+ m_isOrthographic: 0
+ m_isCullingEnabled: 0
+ m_ignoreRectMaskCulling: 0
+ m_ignoreCulling: 1
+ m_horizontalMapping: 0
+ m_verticalMapping: 0
+ m_uvLineOffset: 0
+ m_geometrySortingOrder: 0
+ m_VertexBufferAutoSizeReduction: 1
+ m_firstVisibleCharacter: 0
+ m_useMaxVisibleDescender: 1
+ m_pageToDisplay: 1
+ m_margin: {x: 0, y: 0, z: 0, w: 0}
+ m_textInfo:
+ textComponent: {fileID: 2090703633}
+ characterCount: 0
+ spriteCount: 0
+ spaceCount: 0
+ wordCount: 0
+ linkCount: 0
+ lineCount: 0
+ pageCount: 0
+ materialCount: 1
+ m_isUsingLegacyAnimationComponent: 0
+ m_isVolumetricText: 0
+ m_spriteAnimator: {fileID: 0}
+ m_hasFontAssetChanged: 0
+ m_renderer: {fileID: 2090703636}
+ m_subTextObjects:
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ m_maskType: 0
+--- !u!222 &2090703634
+CanvasRenderer:
+ m_ObjectHideFlags: 2
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2090703632}
+ m_CullTransparentMesh: 0
+--- !u!33 &2090703635
+MeshFilter:
+ m_ObjectHideFlags: 2
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2090703632}
+ m_Mesh: {fileID: 0}
+--- !u!23 &2090703636
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2090703632}
+ m_Enabled: 1
+ m_CastShadows: 0
+ m_ReceiveShadows: 0
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 21202819797275496, guid: 6a84f857bec7e7345843ae29404c57ce, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!224 &2090703637
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2090703632}
+ m_LocalRotation: {x: -0, y: 0.13715929, z: -0, w: 0.990549}
+ m_LocalPosition: {x: 0, y: 0, z: 0.042600036}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 43646912}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 15.767, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 0.033899963, y: 0.052899987}
+ m_SizeDelta: {x: 0.3, y: 0.05}
+ m_Pivot: {x: 0.5, y: 0.5}
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Examples/HandPhysicsServiceExample.unity.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Examples/HandPhysicsServiceExample.unity.meta
new file mode 100644
index 000000000..acabaadb3
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Examples/HandPhysicsServiceExample.unity.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: ac738d830892ff44e92039d5416b41f2
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Examples/PhysicsTriggerEventReadout.cs b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Examples/PhysicsTriggerEventReadout.cs
new file mode 100644
index 000000000..2f88c8355
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Examples/PhysicsTriggerEventReadout.cs
@@ -0,0 +1,80 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See LICENSE in the project root for license information.
+
+using System.Collections.Generic;
+using System.Text;
+using TMPro;
+using UnityEngine;
+
+namespace Microsoft.MixedReality.Toolkit.Extensions.HandPhysics.Examples
+{
+ ///
+ /// Writes collider trigger from articulated hands events to a TextMeshPro object
+ ///
+ public class PhysicsTriggerEventReadout : MonoBehaviour
+ {
+ [SerializeField]
+ [Tooltip("TextMeshPro object that will write the events")]
+ private TextMeshPro textField;
+
+ ///
+ /// TextMeshPro object that will write the events
+ ///
+ public TextMeshPro TextField
+ {
+ get { return textField; }
+ set { textField = value; }
+ }
+
+ private List currentJoints = new List();
+
+ private void OnTriggerEnter(Collider other)
+ {
+ JointKinematicBody joint = other.GetComponent();
+ if (joint == null) { return; }
+
+ currentJoints.Add(joint);
+ WriteText();
+ }
+
+ private void OnTriggerExit(Collider other)
+ {
+ JointKinematicBody joint = other.GetComponent();
+ if (joint == null) { return; }
+
+ if(currentJoints.Contains(joint))
+ {
+ currentJoints.Remove(joint);
+ }
+ else
+ {
+ currentJoints.Add(joint);
+ WriteText();
+ currentJoints.Remove(joint);
+ }
+ if(currentJoints.Count <= 0)
+ {
+ WriteText(true);
+ }
+ }
+
+ private void WriteText(bool clear = false)
+ {
+ if (textField == null) { return; }
+
+ if (clear)
+ {
+ textField.text = "";
+ return;
+ }
+
+ StringBuilder text = new StringBuilder();
+
+ foreach (var joint in currentJoints)
+ {
+ text.Append(joint.name + " is touching.
");
+ }
+ textField.text = text + "
";
+ }
+ }
+}
\ No newline at end of file
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Examples/PhysicsTriggerEventReadout.cs.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Examples/PhysicsTriggerEventReadout.cs.meta
new file mode 100644
index 000000000..8d84cd773
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Examples/PhysicsTriggerEventReadout.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 465f08eca701b8e438b3f64c70c77a17
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/HandPhysicsService.cs b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/HandPhysicsService.cs
new file mode 100644
index 000000000..337c47c6e
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/HandPhysicsService.cs
@@ -0,0 +1,269 @@
+// Copyright(c) Microsoft Corporation.All rights reserved.
+// Licensed under the MIT License. See LICENSE in the project root for license information.
+
+using Microsoft.MixedReality.Toolkit.Input;
+using Microsoft.MixedReality.Toolkit.Utilities;
+using System.Collections.Generic;
+using Unity.Profiling;
+using UnityEngine;
+
+namespace Microsoft.MixedReality.Toolkit.Extensions.HandPhysics
+{
+ ///
+ /// A simple service that creates KinematicRigidbodies on fingertips for physics interactions.
+ ///
+ [MixedRealityExtensionService(
+ SupportedPlatforms.WindowsUniversal,
+ "Hand Physics Service",
+ "HandPhysicsService/Profiles/DefaultHandPhysicsServiceProfile.asset",
+ "MixedRealityToolkit.Extensions",
+ true)]
+ public class HandPhysicsService : BaseExtensionService, IHandPhysicsService, IMixedRealityExtensionService
+ {
+ private HandPhysicsServiceProfile handPhysicsServiceProfile;
+
+ ///
+ /// Constructor.
+ ///
+ /// Friendly name of the service.
+ /// Service priority. Used to determine order of instantiation.
+ /// The service's configuration profile.
+ public HandPhysicsService(string name, uint priority, BaseMixedRealityProfile profile) : base(name, priority, profile)
+ {
+ handPhysicsServiceProfile = (HandPhysicsServiceProfile)profile;
+ }
+
+ private IMixedRealityHandJointService HandJointService
+ => handJointService ?? CoreServices.GetInputSystemDataProvider();
+
+ ///
+ public GameObject HandPhysicsServiceRoot { get; private set; }
+
+ ///
+ public int HandPhysicsLayer { get; set; }
+
+ ///
+ public bool UsePalmKinematicBody { get; set; }
+
+ ///
+ public GameObject FingerTipKinematicBodyPrefab
+ {
+ get { return fingerTipKinematicBodyPrefab; }
+ set
+ {
+ if (value != null)
+ {
+ CreateKinematicBodies();
+ }
+ else
+ {
+ DestroyKinematicBodies();
+ }
+ fingerTipKinematicBodyPrefab = value;
+ }
+ }
+
+ private GameObject fingerTipKinematicBodyPrefab;
+
+ ///
+ public GameObject PalmKinematicBodyPrefab
+ {
+ get { return palmKinematicBodyPrefab; }
+ set
+ {
+ if(value != null)
+ {
+ CreateKinematicBodies();
+ }
+ else
+ {
+ DestroyKinematicBodies();
+ }
+
+ palmKinematicBodyPrefab = value;
+ }
+ }
+
+ private GameObject palmKinematicBodyPrefab;
+
+ private IMixedRealityHandJointService handJointService = null;
+
+ private static readonly Handedness[] handednessTypes = new Handedness[]
+ {
+ Handedness.Left,
+ Handedness.Right
+ };
+
+ private static readonly TrackedHandJoint[] fingerTipTypes = new TrackedHandJoint[]
+ {
+ TrackedHandJoint.ThumbTip,
+ TrackedHandJoint.IndexTip,
+ TrackedHandJoint.MiddleTip,
+ TrackedHandJoint.RingTip,
+ TrackedHandJoint.PinkyTip
+ };
+
+ private List jointKinematicBodies = new List();
+
+ #region BaseExtensionService Implementation
+
+ ///
+ public override void Initialize()
+ {
+ HandPhysicsLayer = handPhysicsServiceProfile.HandPhysicsLayer;
+ UsePalmKinematicBody = handPhysicsServiceProfile.UsePalmKinematicBody;
+ FingerTipKinematicBodyPrefab = handPhysicsServiceProfile.FingerTipKinematicBodyPrefab;
+ PalmKinematicBodyPrefab = handPhysicsServiceProfile.PalmKinematicBodyPrefab;
+ }
+
+ ///
+ public override void Enable()
+ {
+ HandPhysicsServiceRoot = new GameObject("Hand Physics Service");
+
+ CreateKinematicBodies();
+ }
+
+ ///
+ public override void Disable()
+ {
+ if (HandPhysicsServiceRoot != null)
+ {
+ UnityEngine.Object.Destroy(HandPhysicsServiceRoot);
+ HandPhysicsServiceRoot = null;
+ }
+ }
+
+ private static readonly ProfilerMarker UpdatePerfMarker = new ProfilerMarker("[MRTK] HandPhysicsService.Update");
+
+ ///
+ public override void Update()
+ {
+ using (UpdatePerfMarker.Auto())
+ {
+ foreach (JointKinematicBody jointKinematicBody in jointKinematicBodies)
+ {
+ if (HandJointService.IsHandTracked(jointKinematicBody.HandednessType))
+ {
+ jointKinematicBody.Joint = jointKinematicBody.Joint != null ? jointKinematicBody.Joint : HandJointService.RequestJointTransform(jointKinematicBody.JointType, jointKinematicBody.HandednessType);
+ jointKinematicBody.UpdateState(jointKinematicBody.Joint != null);
+ }
+ else
+ {
+ jointKinematicBody.UpdateState(false);
+ }
+ }
+ }
+ }
+
+ #endregion BaseExtensionService Implementation
+
+ #region HandPhysicsService Implementation
+
+ ///
+ /// Sets up the service by iterating over joints
+ ///
+ private void CreateKinematicBodies()
+ {
+ DestroyKinematicBodies();
+
+ // Create joint kinematic bodies.
+ for (int i = 0; i < handednessTypes.Length; ++i)
+ {
+ for (int j = 0; j < fingerTipTypes.Length; ++j)
+ {
+ if(FingerTipKinematicBodyPrefab == null) { continue; }
+ if (TryCreateJointKinematicBody(FingerTipKinematicBodyPrefab, HandPhysicsLayer, handednessTypes[i], fingerTipTypes[j], HandPhysicsServiceRoot.transform, out JointKinematicBody jointKinematicBody))
+ {
+ jointKinematicBodies.Add(jointKinematicBody);
+ }
+ }
+
+ if (UsePalmKinematicBody)
+ {
+ if (PalmKinematicBodyPrefab == null) { continue; }
+ if (TryCreateJointKinematicBody(PalmKinematicBodyPrefab, HandPhysicsLayer, handednessTypes[i], TrackedHandJoint.Palm, HandPhysicsServiceRoot.transform, out JointKinematicBody jointKinematicBody))
+ {
+ jointKinematicBodies.Add(jointKinematicBody);
+ }
+ }
+ }
+ }
+
+ ///
+ /// Destroys the existing joints
+ ///
+ private void DestroyKinematicBodies()
+ {
+ if(jointKinematicBodies.Count > 0)
+ {
+ // Tear down the old kinematicBodies
+ foreach (JointKinematicBody jointKinematicBody in jointKinematicBodies)
+ {
+ UnityEngine.Object.Destroy(jointKinematicBody.gameObject);
+ }
+ }
+ }
+
+ ///
+ /// Instantiates s for all .
+ ///
+ ///
+ /// Optionally instantiates .
+ ///
+ /// The prefab to instantiate.
+ /// the layer to put the prefab on.
+ /// the specified for the joint.
+ /// the specified to instantiate against.
+ /// The root for the joints.
+ /// When successful, the generated .
+ /// True when able to successfully intantiate and create a .
+ private static bool TryCreateJointKinematicBody(GameObject rigidBodyPrefab, int layer, Handedness handednessType, TrackedHandJoint jointType, Transform parent, out JointKinematicBody jointKinematicBody)
+ {
+ jointKinematicBody = null;
+
+ GameObject currentGameObject = GameObject.Instantiate(rigidBodyPrefab, parent);
+ currentGameObject.layer = layer;
+ JointKinematicBody currentJoint = currentGameObject.GetComponent();
+
+ if (currentJoint == null)
+ {
+ Debug.LogError("The HandPhysicsService assumes the FingerTipKinematicBodyPrefab has a JointKinematicBody component.");
+ UnityEngine.Object.Destroy(currentGameObject);
+ return false;
+ }
+
+ currentJoint.JointType = jointType;
+ currentJoint.HandednessType = handednessType;
+ currentGameObject.name = handednessType + " " + jointType;
+
+ if (currentGameObject.GetComponent() == null)
+ {
+ Debug.LogError("The HandPhysicsService assumes the FingerTipKinematicBodyPrefab has a Collider component.");
+ UnityEngine.Object.Destroy(currentGameObject);
+ return false;
+ }
+
+ Rigidbody rigidbody = currentGameObject.GetComponent();
+
+ if (rigidbody == null)
+ {
+ Debug.LogError("The HandPhysicsService assumes the FingerTipKinematicBodyPrefab has a Rigidbody component.");
+ UnityEngine.Object.Destroy(currentGameObject);
+ return false;
+ }
+
+ if (!rigidbody.isKinematic)
+ {
+ Debug.LogWarning("The HandPhysicsService FingerTipKinematicBodyPrefab rigidbody should be marked as kinematic, making kinematic.");
+ rigidbody.isKinematic = true;
+ }
+
+ jointKinematicBody = currentJoint;
+ return true;
+ }
+
+ #endregion HandPhysicsService Implementation
+
+ }
+}
\ No newline at end of file
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/HandPhysicsService.cs.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/HandPhysicsService.cs.meta
new file mode 100644
index 000000000..edd8c8ef0
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/HandPhysicsService.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9d56bed22edfab54ebc178d15ccb9037
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/HandPhysicsServiceProfile.cs b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/HandPhysicsServiceProfile.cs
new file mode 100644
index 000000000..5b095bee2
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/HandPhysicsServiceProfile.cs
@@ -0,0 +1,51 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See LICENSE in the project root for license information.
+
+using UnityEngine;
+
+namespace Microsoft.MixedReality.Toolkit.Extensions.HandPhysics
+{
+ ///
+ /// Configuration profile for extension service.
+ ///
+ [MixedRealityServiceProfile(typeof(IHandPhysicsService))]
+ [CreateAssetMenu(fileName = "HandPhysicsServiceProfile", menuName = "Mixed Reality Toolkit/Extensions/Hand Physics Service/Hand Physics Service Configuration Profile")]
+ public class HandPhysicsServiceProfile : BaseMixedRealityProfile
+ {
+ ///
+ /// Whether make the Palm a physics joint
+ ///
+ public bool UsePalmKinematicBody => usePalmKinematicBody;
+
+ ///
+ /// The prefab to represent each physics joint
+ ///
+ public GameObject FingerTipKinematicBodyPrefab => fingerTipKinematicBodyPrefab;
+
+ ///
+ /// The prefab to represent the palm physics joint
+ ///
+ public GameObject PalmKinematicBodyPrefab => palmKinematicBodyPrefab;
+
+ ///
+ /// The Layer the physics joints will be on
+ ///
+ public int HandPhysicsLayer => handPhysicsLayer;
+
+ [SerializeField]
+ [Tooltip("The Layer the physics joints will be on")]
+ private int handPhysicsLayer = 0;
+
+ [SerializeField]
+ [Tooltip("The prefab to represent each physics joint")]
+ private GameObject fingerTipKinematicBodyPrefab = null;
+
+ [SerializeField]
+ [Tooltip("Whether make the Palm a physics joint")]
+ private bool usePalmKinematicBody = false;
+
+ [SerializeField]
+ [Tooltip("The prefab to represent the palm physics joint")]
+ private GameObject palmKinematicBodyPrefab = null;
+ }
+}
\ No newline at end of file
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/HandPhysicsServiceProfile.cs.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/HandPhysicsServiceProfile.cs.meta
new file mode 100644
index 000000000..25cf6b518
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/HandPhysicsServiceProfile.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c6a7cd77bc44d654182d0fde9d267aee
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: 4f9f54f9478441228dea18a2c828cfc6, type: 3}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Interfaces.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Interfaces.meta
new file mode 100644
index 000000000..03e059fde
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Interfaces.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: dea01b2d286630d4b821f96dd803c10e
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Interfaces/IHandPhysicsService.cs b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Interfaces/IHandPhysicsService.cs
new file mode 100644
index 000000000..5d0bf61a4
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Interfaces/IHandPhysicsService.cs
@@ -0,0 +1,38 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See LICENSE in the project root for license information.
+
+using UnityEngine;
+
+namespace Microsoft.MixedReality.Toolkit.Extensions.HandPhysics
+{
+ ///
+ /// Generic interface for applying rigidbodies to hand joints
+ ///
+ public interface IHandPhysicsService : IMixedRealityExtensionService
+ {
+ ///
+ /// The parent GameObject that contains all the physics joints
+ ///
+ GameObject HandPhysicsServiceRoot { get; }
+
+ ///
+ /// The LayerMask the physics joints will be on
+ ///
+ int HandPhysicsLayer { get; set; }
+
+ ///
+ /// Whether to make the palm a physics joint
+ ///
+ bool UsePalmKinematicBody { get; set; }
+
+ ///
+ /// The prefab to represent each physics joints
+ ///
+ GameObject FingerTipKinematicBodyPrefab { get; set; }
+
+ ///
+ /// The prefab to represent the Palm physics joints
+ ///
+ GameObject PalmKinematicBodyPrefab { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Interfaces/IHandPhysicsService.cs.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Interfaces/IHandPhysicsService.cs.meta
new file mode 100644
index 000000000..5ea4a21c2
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Interfaces/IHandPhysicsService.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0dfedf46a6b6a8a408596d213f193fb2
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/JointKinematicBody.cs b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/JointKinematicBody.cs
new file mode 100644
index 000000000..461253a41
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/JointKinematicBody.cs
@@ -0,0 +1,73 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See LICENSE in the project root for license information.
+
+using Microsoft.MixedReality.Toolkit.Utilities;
+using System;
+using Unity.Profiling;
+using UnityEngine;
+
+namespace Microsoft.MixedReality.Toolkit.Extensions.HandPhysics
+{
+ ///
+ /// Updates a rigidbody transform against another transform.
+ ///
+ public class JointKinematicBody : MonoBehaviour
+ {
+ ///
+ /// The joint this component tracks.
+ ///
+ public Transform Joint { get; set; }
+
+ ///
+ /// What hand this component lives on.
+ ///
+ public Handedness HandednessType { get; set; }
+
+ ///
+ /// What joint this component lives on.
+ ///
+ public TrackedHandJoint JointType { get; set; }
+
+ ///
+ /// An event to subscribe to when the component get's enabled. Useful for tacking when the joint loses tracking.
+ ///
+ public Action OnEnableAction { get; set; }
+
+ ///
+ /// An event to subscribe to when the component get's disabled. Useful for tacking when the joint loses tracking.
+ ///
+ public Action OnDisableAction { get; set; }
+
+ private static readonly ProfilerMarker UpdateStatePerfMarker = new ProfilerMarker("[MRTK] JointKinematicBody.UpdateState");
+
+ ///
+ /// Updates the position of the based on .
+ ///
+ public void UpdateState(bool active)
+ {
+ using (UpdateStatePerfMarker.Auto())
+ {
+ bool previousActiveState = gameObject.activeSelf;
+ gameObject.SetActive(active);
+
+ if (active)
+ {
+ transform.position = Joint.position;
+ transform.rotation = Joint.rotation;
+ }
+
+ if (previousActiveState != active)
+ {
+ if (active)
+ {
+ OnEnableAction?.Invoke(this);
+ }
+ else
+ {
+ OnDisableAction?.Invoke(this);
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/JointKinematicBody.cs.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/JointKinematicBody.cs.meta
new file mode 100644
index 000000000..cf5a52d95
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/JointKinematicBody.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e6dfca575b8c4854f9598ca4e1971e37
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Microsoft.MixedReality.Toolkit.Extensions.HandPhysics.asmdef b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Microsoft.MixedReality.Toolkit.Extensions.HandPhysics.asmdef
new file mode 100644
index 000000000..4ef2d4fe7
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Microsoft.MixedReality.Toolkit.Extensions.HandPhysics.asmdef
@@ -0,0 +1,18 @@
+{
+ "name": "Microsoft.MixedReality.Toolkit.Extensions.HandPhysics",
+ "references": [
+ "Microsoft.MixedReality.Toolkit",
+ "Unity.TextMeshPro"
+ ],
+ "optionalUnityReferences": [],
+ "includePlatforms": [
+ "Editor",
+ "WSA"
+ ],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": false,
+ "precompiledReferences": [],
+ "autoReferenced": true,
+ "defineConstraints": []
+}
\ No newline at end of file
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Microsoft.MixedReality.Toolkit.Extensions.HandPhysics.asmdef.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Microsoft.MixedReality.Toolkit.Extensions.HandPhysics.asmdef.meta
new file mode 100644
index 000000000..53b9b233a
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Microsoft.MixedReality.Toolkit.Extensions.HandPhysics.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: f621f10f3b669bf40b1e4ff85dcfe2d8
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Prefabs.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Prefabs.meta
new file mode 100644
index 000000000..ef52181c1
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Prefabs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 98725f5ed0dde09488e76988442a160f
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Prefabs/FingerTipKinematicBody.prefab b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Prefabs/FingerTipKinematicBody.prefab
new file mode 100644
index 000000000..0af7a36b2
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Prefabs/FingerTipKinematicBody.prefab
@@ -0,0 +1,76 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &6269093343897851288
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 7470735479925094020}
+ - component: {fileID: 2711858983775193253}
+ - component: {fileID: 1070695537054411645}
+ - component: {fileID: 38851717526184557}
+ m_Layer: 8
+ m_Name: FingerTipKinematicBody
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &7470735479925094020
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6269093343897851288}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &2711858983775193253
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6269093343897851288}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: e6dfca575b8c4854f9598ca4e1971e37, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+--- !u!54 &1070695537054411645
+Rigidbody:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6269093343897851288}
+ serializedVersion: 2
+ m_Mass: 1
+ m_Drag: 0
+ m_AngularDrag: 0.05
+ m_UseGravity: 0
+ m_IsKinematic: 1
+ m_Interpolate: 0
+ m_Constraints: 0
+ m_CollisionDetection: 3
+--- !u!135 &38851717526184557
+SphereCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6269093343897851288}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Radius: 0.01
+ m_Center: {x: 0, y: 0, z: 0}
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Prefabs/FingerTipKinematicBody.prefab.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Prefabs/FingerTipKinematicBody.prefab.meta
new file mode 100644
index 000000000..4831a6f1c
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Prefabs/FingerTipKinematicBody.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: f3b3591b938890745b0e96406eca7a80
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Prefabs/PalmKinematicBody.prefab b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Prefabs/PalmKinematicBody.prefab
new file mode 100644
index 000000000..ef89d7c19
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Prefabs/PalmKinematicBody.prefab
@@ -0,0 +1,76 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &7890367414255737973
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 6714055757351649129}
+ - component: {fileID: 2243365551929065800}
+ - component: {fileID: 3772789015417365136}
+ - component: {fileID: 7967104691868737989}
+ m_Layer: 8
+ m_Name: PalmKinematicBody
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &6714055757351649129
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7890367414255737973}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0.08, y: 0.03, z: 0.12}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &2243365551929065800
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7890367414255737973}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: e6dfca575b8c4854f9598ca4e1971e37, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+--- !u!54 &3772789015417365136
+Rigidbody:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7890367414255737973}
+ serializedVersion: 2
+ m_Mass: 1
+ m_Drag: 0
+ m_AngularDrag: 0.05
+ m_UseGravity: 0
+ m_IsKinematic: 1
+ m_Interpolate: 0
+ m_Constraints: 0
+ m_CollisionDetection: 3
+--- !u!65 &7967104691868737989
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7890367414255737973}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Size: {x: 1, y: 1, z: 1}
+ m_Center: {x: 0, y: 0, z: -0.08}
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Prefabs/PalmKinematicBody.prefab.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Prefabs/PalmKinematicBody.prefab.meta
new file mode 100644
index 000000000..afb0cde27
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Prefabs/PalmKinematicBody.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: b949bdbb320c0f046a0189c3c867b380
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Profiles.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Profiles.meta
new file mode 100644
index 000000000..102591704
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Profiles.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 72f3f20bcc74ac34c9e2d302529a8967
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Profiles/DefaultHandPhysicsServiceProfile.asset b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Profiles/DefaultHandPhysicsServiceProfile.asset
new file mode 100644
index 000000000..6e3e155f5
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Profiles/DefaultHandPhysicsServiceProfile.asset
@@ -0,0 +1,20 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: c6a7cd77bc44d654182d0fde9d267aee, type: 3}
+ m_Name: DefaultHandPhysicsServiceProfile
+ m_EditorClassIdentifier:
+ isCustomProfile: 0
+ handPhysicsLayer: 0
+ fingerTipKinematicBodyPrefab: {fileID: 6269093343897851288, guid: f3b3591b938890745b0e96406eca7a80,
+ type: 3}
+ usePalmKinematicBody: 0
+ palmKinematicBodyPrefab: {fileID: 0}
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Profiles/DefaultHandPhysicsServiceProfile.asset.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Profiles/DefaultHandPhysicsServiceProfile.asset.meta
new file mode 100644
index 000000000..e7564c687
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Profiles/DefaultHandPhysicsServiceProfile.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 236baf35803f73342b69c842fe4afb1c
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Profiles/HandPhysicsMixedRealityRegisteredServiceProvidersProfile.asset b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Profiles/HandPhysicsMixedRealityRegisteredServiceProvidersProfile.asset
new file mode 100644
index 000000000..b432490a3
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Profiles/HandPhysicsMixedRealityRegisteredServiceProvidersProfile.asset
@@ -0,0 +1,24 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: eebbca41bb0b40d298ef201735d08616, type: 3}
+ m_Name: HandPhysicsMixedRealityRegisteredServiceProvidersProfile
+ m_EditorClassIdentifier:
+ isCustomProfile: 0
+ configurations:
+ - componentType:
+ reference: Microsoft.MixedReality.Toolkit.Extensions.HandPhysics.HandPhysicsService,
+ Microsoft.MixedReality.Toolkit.Extensions.HandPhysics
+ componentName: HandPhysicsService
+ priority: 10
+ runtimePlatform: 8
+ configurationProfile: {fileID: 11400000, guid: 236baf35803f73342b69c842fe4afb1c,
+ type: 2}
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Profiles/HandPhysicsMixedRealityRegisteredServiceProvidersProfile.asset.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Profiles/HandPhysicsMixedRealityRegisteredServiceProvidersProfile.asset.meta
new file mode 100644
index 000000000..fcaa1c518
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Profiles/HandPhysicsMixedRealityRegisteredServiceProvidersProfile.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 17db2de733b4d014e86d40cca58df36d
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Profiles/HandPhysicsMixedRealityToolkitConfigurationProfile.asset b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Profiles/HandPhysicsMixedRealityToolkitConfigurationProfile.asset
new file mode 100644
index 000000000..9e36b0ec2
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Profiles/HandPhysicsMixedRealityToolkitConfigurationProfile.asset
@@ -0,0 +1,55 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 7612acbc1a4a4ed0afa5f4ccbe42bee4, type: 3}
+ m_Name: HandPhysicsMixedRealityToolkitConfigurationProfile
+ m_EditorClassIdentifier:
+ isCustomProfile: 0
+ targetExperienceScale: 3
+ enableCameraSystem: 1
+ cameraProfile: {fileID: 11400000, guid: 0447581e7bd59f64fbb28151c65a3dc4, type: 2}
+ cameraSystemType:
+ reference: Microsoft.MixedReality.Toolkit.CameraSystem.MixedRealityCameraSystem,
+ Microsoft.MixedReality.Toolkit.Services.CameraSystem
+ enableInputSystem: 1
+ inputSystemProfile: {fileID: 11400000, guid: bec5ceabcd10992439d51532332137f9, type: 2}
+ inputSystemType:
+ reference: Microsoft.MixedReality.Toolkit.Input.MixedRealityInputSystem, Microsoft.MixedReality.Toolkit.Services.InputSystem
+ enableBoundarySystem: 0
+ boundarySystemType:
+ reference: Microsoft.MixedReality.Toolkit.Boundary.MixedRealityBoundarySystem,
+ Microsoft.MixedReality.Toolkit.Services.BoundarySystem
+ boundaryVisualizationProfile: {fileID: 11400000, guid: 6d28cce596b44bd3897ca86f8b24e076,
+ type: 2}
+ enableTeleportSystem: 0
+ teleportSystemType:
+ reference: Microsoft.MixedReality.Toolkit.Teleport.MixedRealityTeleportSystem,
+ Microsoft.MixedReality.Toolkit.Services.TeleportSystem
+ enableSpatialAwarenessSystem: 0
+ spatialAwarenessSystemType:
+ reference: Microsoft.MixedReality.Toolkit.SpatialAwareness.MixedRealitySpatialAwarenessSystem,
+ Microsoft.MixedReality.Toolkit.Services.SpatialAwarenessSystem
+ spatialAwarenessSystemProfile: {fileID: 11400000, guid: 97da727944a3d7b4caf42d2273271a24,
+ type: 2}
+ diagnosticsSystemProfile: {fileID: 11400000, guid: 478436bd1083882479a52d067e98e537,
+ type: 2}
+ enableDiagnosticsSystem: 1
+ diagnosticsSystemType:
+ reference: Microsoft.MixedReality.Toolkit.Diagnostics.MixedRealityDiagnosticsSystem,
+ Microsoft.MixedReality.Toolkit.Services.DiagnosticsSystem
+ sceneSystemProfile: {fileID: 0}
+ enableSceneSystem: 0
+ sceneSystemType:
+ reference:
+ registeredServiceProvidersProfile: {fileID: 11400000, guid: 17db2de733b4d014e86d40cca58df36d,
+ type: 2}
+ useServiceInspectors: 1
+ renderDepthBuffer: 0
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Profiles/HandPhysicsMixedRealityToolkitConfigurationProfile.asset.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Profiles/HandPhysicsMixedRealityToolkitConfigurationProfile.asset.meta
new file mode 100644
index 000000000..08128e63b
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/Profiles/HandPhysicsMixedRealityToolkitConfigurationProfile.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ec6c5962fb980c041854a25f84d6f2e6
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/README.md b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/README.md
new file mode 100644
index 000000000..dec0fc7ef
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/README.md
@@ -0,0 +1,19 @@
+# Hand physics extension service
+![Hand Physics Extension Service](../../../../Documentation/Images/HandPhysics/MRTK_UX_HandPhysics_Main.jpg)
+
+The hand physics service enables rigid body collision events and interactions with articulated hands.
+
+## Getting started with hand physics extension service
+
+Add the hand physics service to the list of extension services and use the default profile.
+
+Once enabled, use any collider's IsTrigger property to receive collision events from all 10 digits (and palms if they're enabled).
+
+### Prerequisites
+
+- Enabled the extension service
+- Assign an appropriate prefab to the finger/palm joint.
+
+## Recommendations
+
+While the service defaults to the "default" layer, it is recommended to use a separate layer for HandPhysics objects. Otherwise there may be unwanted collisions and/or inaccurate raycasts.
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/README.md.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/README.md.meta
new file mode 100644
index 000000000..b703854fb
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/HandPhysicsService/README.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 296595791c004a44daf66aa23dea5cb5
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/License.txt b/Frontend/VIAProMa/Assets/MRTK/Extensions/License.txt
new file mode 100644
index 000000000..63447fd8b
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/License.txt
@@ -0,0 +1,21 @@
+Copyright (c) Microsoft Corporation.
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/License.txt.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/License.txt.meta
new file mode 100644
index 000000000..a63e2b345
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/License.txt.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 3f32f95fe02109049a6e6fd201e81368
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService.meta
new file mode 100644
index 000000000..ab27ddbbe
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 688bc206a2b15ad4f98f63fb1d1d10e4
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/AssemblyInfo.cs b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/AssemblyInfo.cs
new file mode 100644
index 000000000..211928fad
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/AssemblyInfo.cs
@@ -0,0 +1,10 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See LICENSE in the project root for license information.
+
+using System.Reflection;
+
+[assembly: AssemblyVersion("2.4.0.0")]
+[assembly: AssemblyFileVersion("2.4.0.0")]
+
+[assembly: AssemblyProduct("Microsoft® Mixed Reality Toolkit Extensions")]
+[assembly: AssemblyCopyright("Copyright © Microsoft Corporation")]
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/AssemblyInfo.cs.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/AssemblyInfo.cs.meta
new file mode 100644
index 000000000..708bcc56d
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/AssemblyInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fd6296fbffb45df41828ffa0d5e5ecfd
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets.meta
new file mode 100644
index 000000000..6ade57f6d
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8034b9a52f1848546a66eb4f824a21a1
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/LostTrackingVisualPrefab.prefab b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/LostTrackingVisualPrefab.prefab
new file mode 100644
index 000000000..f3a5ad44e
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/LostTrackingVisualPrefab.prefab
@@ -0,0 +1,552 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &3020011822869161386
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 3020011822869161387}
+ - component: {fileID: 1797417809900342204}
+ - component: {fileID: 2190822873648424094}
+ m_Layer: 29
+ m_Name: LostTrackingVisualPrefab
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &3020011822869161387
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3020011822869161386}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 3020011823097077415}
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1797417809900342204
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3020011822869161386}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: d166f51ac592f1d49962a799f331adad, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ gridRenderer: {fileID: 5438758763433720000}
+ loopClip: {fileID: 8300000, guid: 3e31be11b607dfd4d84a1313922956b4, type: 3}
+ audioSource: {fileID: 2190822873648424094}
+ pulseTimer: 0
+ pulseDuration: 2
+--- !u!82 &2190822873648424094
+AudioSource:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3020011822869161386}
+ m_Enabled: 1
+ serializedVersion: 4
+ OutputAudioMixerGroup: {fileID: 0}
+ m_audioClip: {fileID: 0}
+ m_PlayOnAwake: 0
+ m_Volume: 1
+ m_Pitch: 1
+ Loop: 1
+ Mute: 0
+ Spatialize: 0
+ SpatializePostEffects: 0
+ Priority: 128
+ DopplerLevel: 1
+ MinDistance: 1
+ MaxDistance: 500
+ Pan2D: 0
+ rolloffMode: 0
+ BypassEffects: 0
+ BypassListenerEffects: 0
+ BypassReverbZones: 0
+ rolloffCustomCurve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 1
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0.33333334
+ outWeight: 0.33333334
+ - serializedVersion: 3
+ time: 1
+ value: 0
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0.33333334
+ outWeight: 0.33333334
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ panLevelCustomCurve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 0
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0.33333334
+ outWeight: 0.33333334
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ spreadCustomCurve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 0
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0.33333334
+ outWeight: 0.33333334
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ reverbZoneMixCustomCurve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 1
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0.33333334
+ outWeight: 0.33333334
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+--- !u!1 &3020011823097077412
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 3020011823097077415}
+ - component: {fileID: 3020011823097077414}
+ - component: {fileID: 3020011823097077413}
+ m_Layer: 29
+ m_Name: Solver
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &3020011823097077415
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3020011823097077412}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 5438758763436145188}
+ - {fileID: 3020011823763761788}
+ m_Father: {fileID: 3020011822869161387}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &3020011823097077414
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3020011823097077412}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b55691ad5b034fe6966763a6e23818d2, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ trackedTargetType: 0
+ trackedHandness: 3
+ trackedHandJoint: 2
+ transformOverride: {fileID: 0}
+ additionalOffset: {x: 0, y: 0, z: 0}
+ additionalRotation: {x: 0, y: 0, z: 0}
+ updateSolvers: 1
+--- !u!114 &3020011823097077413
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3020011823097077412}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4684083f6dff4a1d8a790bccc354fcf4, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ updateLinkedTransform: 0
+ moveLerpTime: 0.2
+ rotateLerpTime: 0.2
+ scaleLerpTime: 0
+ maintainScale: 1
+ smoothing: 1
+ lifetime: 0
+ referenceDirection: 1
+ minDistance: 0.4
+ maxDistance: 0.5
+ minViewDegrees: -5
+ maxViewDegrees: 5
+ aspectV: 2
+ ignoreAngleClamp: 0
+ ignoreDistanceClamp: 0
+ useFixedVerticalPosition: 0
+ fixedVerticalPosition: -0.4
+ orientToReferenceDirection: 0
+--- !u!1 &3020011823763761667
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 3020011823763761788}
+ - component: {fileID: 3020011823763761785}
+ - component: {fileID: 3020011823763761784}
+ - component: {fileID: 3020011823763761791}
+ - component: {fileID: 3020011823763761790}
+ m_Layer: 29
+ m_Name: Lost Tracking Text
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &3020011823763761788
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3020011823763761667}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 1}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 3020011823097077415}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: -0.2, y: -0.12}
+ m_SizeDelta: {x: 0.4, y: 0.05}
+ m_Pivot: {x: 0, y: 0}
+--- !u!33 &3020011823763761785
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3020011823763761667}
+ m_Mesh: {fileID: 0}
+--- !u!23 &3020011823763761784
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3020011823763761667}
+ m_Enabled: 1
+ m_CastShadows: 0
+ m_ReceiveShadows: 0
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RenderingLayerMask: 4294967295
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 21184075213967186, guid: cf40b52fb3478de4ea4adf277e3b75ef, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!114 &3020011823763761791
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3020011823763761667}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+ Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+ m_text: Finding your space...
+ m_isRightToLeft: 0
+ m_fontAsset: {fileID: 11400000, guid: cf40b52fb3478de4ea4adf277e3b75ef, type: 2}
+ m_sharedMaterial: {fileID: 21184075213967186, guid: cf40b52fb3478de4ea4adf277e3b75ef,
+ type: 2}
+ m_fontSharedMaterials: []
+ m_fontMaterial: {fileID: 0}
+ m_fontMaterials: []
+ m_fontColor32:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+ m_enableVertexGradient: 0
+ m_colorMode: 3
+ m_fontColorGradient:
+ topLeft: {r: 1, g: 1, b: 1, a: 1}
+ topRight: {r: 1, g: 1, b: 1, a: 1}
+ bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+ bottomRight: {r: 1, g: 1, b: 1, a: 1}
+ m_fontColorGradientPreset: {fileID: 0}
+ m_spriteAsset: {fileID: 0}
+ m_tintAllSprites: 0
+ m_overrideHtmlColors: 0
+ m_faceColor:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_outlineColor:
+ serializedVersion: 2
+ rgba: 4278190080
+ m_fontSize: 0.24
+ m_fontSizeBase: 0.24
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 1
+ m_fontSizeMax: 72
+ m_fontStyle: 0
+ m_textAlignment: 258
+ m_characterSpacing: 0
+ m_wordSpacing: 0
+ m_lineSpacing: 0
+ m_lineSpacingMax: 0
+ m_paragraphSpacing: 0
+ m_charWidthMaxAdj: 0
+ m_enableWordWrapping: 1
+ m_wordWrappingRatios: 0.4
+ m_overflowMode: 0
+ m_firstOverflowCharacterIndex: -1
+ m_linkedTextComponent: {fileID: 0}
+ m_isLinkedTextComponent: 0
+ m_isTextTruncated: 0
+ m_enableKerning: 0
+ m_enableExtraPadding: 0
+ checkPaddingRequired: 0
+ m_isRichText: 1
+ m_parseCtrlCharacters: 1
+ m_isOrthographic: 0
+ m_isCullingEnabled: 0
+ m_ignoreRectMaskCulling: 0
+ m_ignoreCulling: 1
+ m_horizontalMapping: 0
+ m_verticalMapping: 0
+ m_uvLineOffset: 0.3
+ m_geometrySortingOrder: 0
+ m_VertexBufferAutoSizeReduction: 1
+ m_firstVisibleCharacter: 0
+ m_useMaxVisibleDescender: 1
+ m_pageToDisplay: 0
+ m_margin: {x: 0, y: 0, z: 0, w: 0}
+ m_textInfo:
+ textComponent: {fileID: 3020011823763761791}
+ characterCount: 21
+ spriteCount: 0
+ spaceCount: 2
+ wordCount: 3
+ linkCount: 0
+ lineCount: 1
+ pageCount: 1
+ materialCount: 1
+ m_isUsingLegacyAnimationComponent: 0
+ m_isVolumetricText: 0
+ m_spriteAnimator: {fileID: 0}
+ m_hasFontAssetChanged: 0
+ m_renderer: {fileID: 3020011823763761784}
+ m_subTextObjects:
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ - {fileID: 0}
+ m_maskType: 0
+--- !u!222 &3020011823763761790
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3020011823763761667}
+ m_CullTransparentMesh: 0
+--- !u!1 &5438758763435714050
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 5438758763436145186}
+ - component: {fileID: 5438758763434818048}
+ - component: {fileID: 5438758763433720000}
+ m_Layer: 29
+ m_Name: Tracking Loss Visual
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &5438758763436145186
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5438758763435714050}
+ m_LocalRotation: {x: 0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: -0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 5438758763436145188}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &5438758763434818048
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5438758763435714050}
+ m_Mesh: {fileID: 4300000, guid: d7bd8013cf7ac614a8f6931ec08169d8, type: 3}
+--- !u!23 &5438758763433720000
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5438758763435714050}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 2cc790f865f335a4bb8864404764bae8, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!1 &5438758763435714052
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 5438758763436145188}
+ m_Layer: 29
+ m_Name: scanning_terrain
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &5438758763436145188
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5438758763435714052}
+ m_LocalRotation: {x: -0.258819, y: -0, z: -0, w: 0.9659259}
+ m_LocalPosition: {x: 0, y: 0.1, z: 1}
+ m_LocalScale: {x: 0.4, y: 0.40000007, z: 0.40000007}
+ m_Children:
+ - {fileID: 5438758763436145186}
+ m_Father: {fileID: 3020011823097077415}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: -30, y: 0, z: 0}
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/LostTrackingVisualPrefab.prefab.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/LostTrackingVisualPrefab.prefab.meta
new file mode 100644
index 000000000..11901a37d
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/LostTrackingVisualPrefab.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: ac9d662b5ab57dc489e1ea86933f2faa
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/SR_Triangles.shader b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/SR_Triangles.shader
new file mode 100644
index 000000000..8de9266be
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/SR_Triangles.shader
@@ -0,0 +1,564 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+Shader "SR_Triangles" {
+ Properties {
+ [Header(Fill)]
+ _Intensity_("Intensity", Range(0,5)) = 3
+ _Fill_Color_("Fill Color", Color) = (0.004,0.004,0.004,1)
+ _Vary_Color_("Vary Color", Range(0,1)) = 0.75
+ [Toggle(_COLOR_MAP_ENABLE_)] _Color_Map_Enable_("Color Map Enable", Float) = 1
+ [NoScaleOffset] _Color_Map_("Color Map", 2D) = "" {}
+ _Vary_UV_("Vary UV", Range(0,1)) = 1
+ _Fill_Start_Time_("Fill Start Time", Range(0,1)) = 0.5
+
+ [Header(Lines)]
+ _Line_Color_("Line Color", Color) = (0.639,0.639,0.639,1)
+ _Line_Width_("Line Width", Range(0,10)) = 0.5
+ _Line_Width_Fade_("Line Width Fade", Range(0,1)) = 0.25
+ _Line_Width_Fade_Far_("Line Width Fade Far", Range(0,30)) = 5
+ _Filter_Width_("Filter Width", Range(1,5)) = 1.5
+ _Draw_Fuzz_("Draw Fuzz", Range(0,1)) = 0.2
+ _Draw_End_Time_("Draw End Time", Range(0,1)) = 0.5
+
+ [Header(Pulse Driver)]
+ _Pulse_("Pulse", Range(0,1)) = 0
+ _Pulse_Origin_("Pulse Origin", Vector) = (0, 0, 0, 1)
+ [Toggle] _Auto_Pulse_("Auto Pulse", Float) = 0
+ _Period_("Period", Float) = 3.5
+
+ [Header(Pulse)]
+ [Toggle] _Pulse_Enabled_("Pulse Enabled", Float) = 1
+ _Pulse_Outer_Size_("Pulse Outer Size", Range(0,30)) = 10
+ _Pulse_Outer_Fuzz_("Pulse Outer Fuzz", Range(0,5)) = 1
+ _Pulse_Lead_Fuzz_("Pulse Lead Fuzz", Range(0,5)) = 1.2
+ _Pulse_Middle_("Pulse Middle", Range(0,5)) = 0
+ _Pulse_Tail_Fuzz_("Pulse Tail Fuzz", Range(0,5)) = 2.4
+ _Pulse_Vary_("Pulse Vary", Range(0,1)) = 0
+
+ [Header(Color Pulse)]
+ _Color_Center_("Color Center", Range(0,1)) = 0.4
+ _Color_Leading_Fuzz_("Color Leading Fuzz", Range(0,1)) = 1
+ _Color_Trailing_Fuzz_("Color Trailing Fuzz", Range(0,1)) = 1
+
+ [Header(Noise)]
+ _Noise_Frequency_("Noise Frequency", Range(0,1000)) = 40.5
+ }
+
+ SubShader {
+ Tags{ "RenderType" = "Opaque" }
+ Blend Off
+ Tags {"DisableBatching" = "True"}
+
+ LOD 100
+
+ Pass {
+ CGPROGRAM
+
+ #pragma vertex vertex_main
+ #pragma fragment fragment_main
+ #pragma geometry geometry_main
+ #pragma multi_compile _ _COLOR_MAP_ENABLE_
+
+ #include "UnityCG.cginc"
+
+ float _Noise_Frequency_;
+ float _Intensity_;
+ float4 _Fill_Color_;
+ float _Vary_Color_;
+ sampler2D _Color_Map_;
+ float _Vary_UV_;
+ float _Fill_Start_Time_;
+ bool _Pulse_Enabled_;
+ float _Pulse_Outer_Size_;
+ float _Pulse_Outer_Fuzz_;
+ float _Pulse_Lead_Fuzz_;
+ float _Pulse_Middle_;
+ float _Pulse_Tail_Fuzz_;
+ float _Pulse_Vary_;
+ float _Color_Center_;
+ float _Color_Leading_Fuzz_;
+ float _Color_Trailing_Fuzz_;
+ float4 _Line_Color_;
+ float _Line_Width_;
+ float _Line_Width_Fade_;
+ float _Line_Width_Fade_Far_;
+ float _Filter_Width_;
+ float _Draw_Fuzz_;
+ float _Draw_End_Time_;
+ float _Pulse_;
+ float3 _Pulse_Origin_;
+ bool _Auto_Pulse_;
+ float _Period_;
+
+ struct VertexInput {
+ float4 vertex : POSITION;
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ };
+
+ struct VertexOutput {
+ float4 pos : SV_POSITION;
+ float3 posWorld : TEXCOORD8;
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ UNITY_VERTEX_OUTPUT_STEREO
+ };
+
+ struct FragmentInput {
+ float4 pos : SV_POSITION;
+ float3 posWorld : TEXCOORD8;
+ float4 extra1 : TEXCOORD4;
+ float4 extra2 : TEXCOORD5;
+ float4 extra3 : TEXCOORD2;
+ UNITY_VERTEX_OUTPUT_STEREO
+ };
+
+ #define Alpha_Blend 0
+ #define No_Depth_Write 0
+ #define Double_Sided 0
+ #define Geo_Max_Out_Vertices 3
+
+ #ifndef Geo_Max_Out_Vertices
+ #define Geo_Max_Out_Vertices 16
+ #endif
+
+ FragmentInput vxOut[Geo_Max_Out_Vertices];
+ int stripVxCount;
+ int vxOutCount;
+ int stripCount;
+
+ #define HUX_VIEW_TO_WORLD_DIR(V) (mul(transpose(UNITY_MATRIX_V), float4(V,0)).xyz)
+
+ VertexOutput vertex_main(VertexInput v)
+ {
+ VertexOutput o;
+ UNITY_SETUP_INSTANCE_ID(v);
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
+ UNITY_TRANSFER_INSTANCE_ID(v, o);
+
+ o.pos = UnityObjectToClipPos(v.vertex);
+ float4 posWorld = mul(unity_ObjectToWorld, v.vertex);
+ o.posWorld = posWorld.xyz;
+
+ return o;
+ }
+
+ #ifndef HUX_GEO_SET_UV
+ #define HUX_GEO_SET_UV(A)
+ #endif
+
+ #ifndef HUX_GEO_SET_NORMAL
+ #define HUX_GEO_SET_NORMAL(A)
+ #endif
+
+ #ifndef HUX_GEO_SET_TANGENT
+ #define HUX_GEO_SET_TANGENT(A)
+ #endif
+
+ #ifndef HUX_GEO_SET_COLOR
+ #define HUX_GEO_SET_COLOR(A)
+ #endif
+
+ #define HUX_GEO_SET_EXTRA1(A) vxOut[vxOutCount].extra1=A;
+ #ifndef HUX_GEO_SET_EXTRA1
+ #define HUX_GEO_SET_EXTRA1(A)
+ #endif
+
+ #define HUX_GEO_SET_EXTRA2(A) vxOut[vxOutCount].extra2=A;
+ #ifndef HUX_GEO_SET_EXTRA2
+ #define HUX_GEO_SET_EXTRA2(A)
+ #endif
+
+ #define HUX_GEO_SET_EXTRA3(A) vxOut[vxOutCount].extra3=A;
+ #ifndef HUX_GEO_SET_EXTRA3
+ #define HUX_GEO_SET_EXTRA3(A)
+ #endif
+
+ //BLOCK_BEGIN Emit_Triangle 25
+
+ void emitVertex_Bid25(float3 P, float4 Extra1, float4 Extra2, float4 Extra3)
+ {
+ vxOut[vxOutCount].posWorld = P; vxOut[vxOutCount].pos = mul(unity_MatrixVP, float4(P,1.0f));;
+ HUX_GEO_SET_EXTRA1(Extra1);
+ HUX_GEO_SET_EXTRA2(Extra2);
+ HUX_GEO_SET_EXTRA3(Extra3);
+ vxOutCount += 1;
+ stripVxCount += 1;
+ }
+
+ void Emit_Triangle_B25(
+ bool Previous,
+ float3 P1,
+ float3 P2,
+ float3 P3,
+ float4 Extra1_1,
+ float4 Extra1_2,
+ float4 Extra1_3,
+ float4 Color,
+ float Width,
+ out bool Next)
+ {
+ // This function can be called at most once per geometry_main invocation.
+ // If this is called multiple times, stripVxCount must be augmented as an
+ // array (see https://github.com/microsoft/MixedRealityToolkit-Unity/issues/6609
+ // for more details).
+ emitVertex_Bid25(P1,Extra1_1,Color,float4(1.0,0.0,0.0,Width));
+ emitVertex_Bid25(P2,Extra1_2,Color,float4(0.0,1.0,0.0,Width));
+ emitVertex_Bid25(P3,Extra1_3,Color,float4(0.0,0.0,1.0,Width));
+ Next = Previous;
+ }
+
+ //BLOCK_END Emit_Triangle
+
+ //BLOCK_BEGIN Find_Nearest 34
+
+ void Find_Nearest_B34(
+ float3 P1,
+ float3 P2,
+ float3 P3,
+ float Transition,
+ bool FadingOut,
+ float3 Distances,
+ out float3 Nearest,
+ out float4 Extra2_1,
+ out float4 Extra2_2,
+ out float4 Extra2_3)
+ {
+ if (FadingOut) {
+ if (Distances.x > Distances.y&& Distances.x > Distances.z) {
+ Extra2_1 = float4(1.0,0.0,0.0,0.0);
+ Extra2_2 = float4(0.0,0.0,0.0,0.0);
+ Extra2_3 = float4(0.0,0.0,0.0,0.0);
+ Nearest = P1;
+ }
+ else if (Distances.y > Distances.z) {
+ Extra2_1 = float4(0.0,0.0,0.0,0.0);
+ Extra2_2 = float4(1.0,0.0,0.0,0.0);
+ Extra2_3 = float4(0.0,0.0,0.0,0.0);
+ Nearest = P2;
+ }
+ else {
+ Extra2_1 = float4(0.0,0.0,0.0,0.0);
+ Extra2_2 = float4(0.0,0.0,0.0,0.0);
+ Extra2_3 = float4(1.0,0.0,0.0,0.0);
+ Nearest = P3;
+ }
+ }
+ else {
+ if (Distances.x < Distances.y && Distances.x < Distances.z) {
+ Extra2_1 = float4(1.0,0.0,0.0,0.0);
+ Extra2_2 = float4(0.0,0.0,0.0,0.0);
+ Extra2_3 = float4(0.0,0.0,0.0,0.0);
+ Nearest = P1;
+ }
+ else if (Distances.y < Distances.z) {
+ Extra2_1 = float4(0.0,0.0,0.0,0.0);
+ Extra2_2 = float4(1.0,0.0,0.0,0.0);
+ Extra2_3 = float4(0.0,0.0,0.0,0.0);
+ Nearest = P2;
+ }
+ else {
+ Extra2_1 = float4(0.0,0.0,0.0,0.0);
+ Extra2_2 = float4(0.0,0.0,0.0,0.0);
+ Extra2_3 = float4(1.0,0.0,0.0,0.0);
+ Nearest = P3;
+ }
+ }
+
+ Extra2_1.a = Transition;
+ Extra2_2.a = Transition;
+ Extra2_3.a = Transition;
+ }
+
+ //BLOCK_END Find_Nearest
+
+ //BLOCK_BEGIN Calc_Width 29
+
+ void Calc_Width_B29(
+ float3 Eye,
+ float3 Position,
+ float Base_Width,
+ float Width_Fade,
+ float Fade_Far_Distance,
+ out float Width)
+ {
+ float d = saturate(distance(Eye,Position) / Fade_Far_Distance);
+ Width = Base_Width * (1.0 - d + d * Width_Fade);
+ }
+
+ //BLOCK_END Calc_Width
+
+ //BLOCK_BEGIN Pulse 28
+
+ float ramp_Bid28(float start, float end, float x)
+ {
+ return saturate((x - start) / (end - start));
+ }
+
+ void Pulse_B28(
+ float Distance,
+ float Noise,
+ bool Pulse_Enabled,
+ float Pulse,
+ float Pulse_Middle,
+ float Pulse_Outer_Size,
+ float Pulse_Lead_Fuzz,
+ float Pulse_Tail_Fuzz,
+ float Pulse_Vary,
+ float Pulse_Outer_Fuzz,
+ float Color_Center,
+ float Color_Leading_Fuzz,
+ float Color_Trailing_Fuzz,
+ out float Transition,
+ out bool FadingOut,
+ out float Fade_Color,
+ out float Colorize)
+ {
+ Transition = 1.0;
+ Fade_Color = 1.0;
+ Colorize = 0.0;
+ FadingOut = false;
+ if (Pulse_Enabled) {
+ float d = Distance + Pulse_Vary * Noise;
+
+ float Pulse_Width = Pulse_Lead_Fuzz + Pulse_Middle + Pulse_Tail_Fuzz;
+ float totalSize = Pulse_Outer_Size + Pulse_Vary + Pulse_Width;
+ float pulseFront = Pulse * totalSize;
+
+ float edge1 = pulseFront - Pulse_Lead_Fuzz;
+ float fadeIn = ramp_Bid28(pulseFront,edge1,d);
+ float fadeOut = ramp_Bid28(pulseFront - Pulse_Width + Pulse_Tail_Fuzz,pulseFront - Pulse_Width,d);
+ float outerFade = 1.0 - ramp_Bid28(Pulse_Outer_Size - Pulse_Outer_Fuzz,Pulse_Outer_Size,d);
+
+ float colorCenter = pulseFront - Pulse_Width * Color_Center;
+ Colorize = (ramp_Bid28(colorCenter - Pulse_Width * Color_Trailing_Fuzz,colorCenter,d)) - ramp_Bid28(colorCenter,colorCenter + Pulse_Width * Color_Leading_Fuzz,d);
+
+ Transition = saturate(fadeIn * (1.0 - fadeOut)) * outerFade;
+ FadingOut = fadeOut > 0.0;
+ Fade_Color = (1.0 - fadeOut) * outerFade;
+ }
+ }
+
+ //BLOCK_END Pulse
+
+ //BLOCK_BEGIN Pick_Reference 33
+
+ void Pick_Reference_B33(
+ float3 VA,
+ float3 VB,
+ float3 VC,
+ float3 Pulse_Origin,
+ out float3 Reference,
+ out float Distance,
+ out float3 Distances_Sqrd)
+ {
+ Distances_Sqrd.x = dot(VA - Pulse_Origin,VA - Pulse_Origin);
+ Distances_Sqrd.y = dot(VB - Pulse_Origin,VB - Pulse_Origin);
+ Distances_Sqrd.z = dot(VC - Pulse_Origin,VC - Pulse_Origin);
+
+ if (Distances_Sqrd.x < Distances_Sqrd.y && Distances_Sqrd.x < Distances_Sqrd.z) {
+ Reference = VA;
+ Distance = sqrt(Distances_Sqrd.x);
+ }
+ else if (Distances_Sqrd.y < Distances_Sqrd.z) {
+ Reference = VB;
+ Distance = sqrt(Distances_Sqrd.y);
+ }
+ else {
+ Reference = VC;
+ Distance = sqrt(Distances_Sqrd.z);
+ }
+ }
+
+ //BLOCK_END Pick_Reference
+
+ //BLOCK_BEGIN Noise 24
+
+ void Noise_B24(
+ float3 P,
+ float Frequency,
+ out float Noise1,
+ out float Noise2)
+ {
+ float3 P1 = P * Frequency;
+ float3 P2 = P1 * float3(-1.0,2.0,3.0);
+ Noise1 = frac(P1.x + P1.y + P1.z);
+ Noise2 = frac(P2.x + P2.y + P2.z);
+
+ }
+
+ //BLOCK_END Noise
+
+ //BLOCK_BEGIN Pt_Sample_Texture 21
+
+ void Pt_Sample_Texture_B21(
+ float Noise,
+ sampler2D Texture,
+ float Vary_UV,
+ float Map_Intensity,
+ out float4 Color)
+ {
+ float2 xy = float2(0.5,0.5) + float2(Noise - 0.5,Noise - 0.5) * Vary_UV;
+ Color = tex2D(Texture,xy,float2(0,0),float2(0,0));
+ }
+
+ //BLOCK_END Pt_Sample_Texture
+
+ //BLOCK_BEGIN AutoPulse 17
+
+ void AutoPulse_B17(
+ float Pulse,
+ bool Auto_Pulse,
+ float Period,
+ float Time,
+ out float Result)
+ {
+
+ if (Auto_Pulse) {
+ Result = frac(Time / Period);
+ }
+ else {
+ Result = Pulse;
+ }
+ }
+
+ //BLOCK_END AutoPulse
+
+ [maxvertexcount(Geo_Max_Out_Vertices)]
+ void geometry_main(triangle VertexOutput vxIn[3], inout TriangleStream triStream)
+ {
+ UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(vxIn[0]);
+ vxOutCount = 0;
+ stripVxCount = 0;
+
+ float3 Reference_Q33;
+ float Distance_Q33;
+ float3 Distances_Sqrd_Q33;
+ Pick_Reference_B33(vxIn[0].posWorld,vxIn[1].posWorld,vxIn[2].posWorld,_Pulse_Origin_,Reference_Q33,Distance_Q33,Distances_Sqrd_Q33);
+
+ float Noise1_Q24;
+ float Noise2_Q24;
+ Noise_B24(Reference_Q33,_Noise_Frequency_,Noise1_Q24,Noise2_Q24);
+
+ float4 Color_Q21;
+ #if defined(_COLOR_MAP_ENABLE_)
+ Pt_Sample_Texture_B21(Noise2_Q24,_Color_Map_,_Vary_UV_,1,Color_Q21);
+ #else
+ Color_Q21 = float4(1,1,1,1);
+ #endif
+
+ float Result_Q17;
+ AutoPulse_B17(_Pulse_,_Auto_Pulse_,_Period_,_Time.y,Result_Q17);
+
+ float Width_Q29;
+ Calc_Width_B29(_WorldSpaceCameraPos,Reference_Q33,_Line_Width_,_Line_Width_Fade_,_Line_Width_Fade_Far_,Width_Q29);
+
+ float Transition_Q28;
+ bool FadingOut_Q28;
+ float Fade_Color_Q28;
+ float Colorize_Q28;
+ Pulse_B28(Distance_Q33,Noise1_Q24,_Pulse_Enabled_,Result_Q17,_Pulse_Middle_,_Pulse_Outer_Size_,_Pulse_Lead_Fuzz_,_Pulse_Tail_Fuzz_,_Pulse_Vary_,_Pulse_Outer_Fuzz_,_Color_Center_,_Color_Leading_Fuzz_,_Color_Trailing_Fuzz_,Transition_Q28,FadingOut_Q28,Fade_Color_Q28,Colorize_Q28);
+
+ float3 Nearest_Q34;
+ float4 Extra2_1_Q34;
+ float4 Extra2_2_Q34;
+ float4 Extra2_3_Q34;
+ Find_Nearest_B34(vxIn[0].posWorld,vxIn[1].posWorld,vxIn[2].posWorld,Transition_Q28,FadingOut_Q28,Distances_Sqrd_Q33,Nearest_Q34,Extra2_1_Q34,Extra2_2_Q34,Extra2_3_Q34);
+
+ // Color
+ float4 Result_Q26;
+ Result_Q26 = lerp(_Fill_Color_,Color_Q21 * _Intensity_,float4(Colorize_Q28,Colorize_Q28,Colorize_Q28,Colorize_Q28)) * (1.0 - _Vary_Color_ * Noise1_Q24) * Fade_Color_Q28;
+ Result_Q26.a = Fade_Color_Q28;
+
+ bool Next_Q25;
+ Emit_Triangle_B25(false,vxIn[0].posWorld,vxIn[1].posWorld,vxIn[2].posWorld,Extra2_1_Q34,Extra2_2_Q34,Extra2_3_Q34,Result_Q26,Width_Q29,Next_Q25);
+
+ bool Root = Next_Q25;
+
+ int vxix = 0;
+ int i = 0;
+ while (i < stripVxCount) {
+ UNITY_TRANSFER_VERTEX_OUTPUT_STEREO(vxIn[0],vxOut[vxix]);
+ triStream.Append(vxOut[vxix]);
+ i += 1; vxix += 1;
+ }
+ triStream.RestartStrip();
+ }
+
+ //BLOCK_BEGIN Main_Fragment 38
+
+ void Main_Fragment_B38(
+ float Fill_Start_Time,
+ float4 Line_Color_Base,
+ float Fuzz,
+ float Line_End_Time,
+ float4 Transition,
+ float4 Fill_Color_In,
+ float4 V,
+ float In_Line,
+ out float4 Fill_Color,
+ out float4 Line_Color,
+ out float4 Final_Color)
+ {
+ half fillProgress = saturate((Transition.w - Fill_Start_Time) / (1.0 - Fill_Start_Time));
+
+ Fill_Color.rgb = Fill_Color_In.rgb * fillProgress;
+ Fill_Color.a = fillProgress;
+
+ half lineProgress = saturate(Transition.w / Line_End_Time);
+ half Edge = 1.0 - lineProgress;
+ half k = Edge * (1.0 + Fuzz) - Fuzz;
+ half kk = saturate(Transition.x);
+ half lineFade = saturate(smoothstep(k, k + Fuzz, kk));
+ Line_Color = Line_Color_Base * lineFade * Fill_Color_In.w;
+
+ Final_Color = lerp(Fill_Color, Line_Color,float4(In_Line, In_Line, In_Line, In_Line));
+ }
+
+ //BLOCK_END Main_Fragment
+
+ //BLOCK_BEGIN Edges 30
+
+ float3 FilterStep_Bid30(float3 edge, float3 x, float3 dx)
+ {
+ return (x + dx * 0.5 - max(edge,x - dx * 0.5)) / max(dx,1.0E-8);
+ }
+
+ void Edges_B30(
+ float Edge_Width,
+ float Filter_Width,
+ float4 Edges,
+ out half inLine)
+ {
+ float3 fw = fwidth(Edges.xyz);
+ float3 a = FilterStep_Bid30(fw * Edges.w,Edges.xyz,fw * Filter_Width);
+ inLine = saturate((1.0 - min(a.x,min(a.y,a.z))));
+ }
+
+ //BLOCK_END Edges
+
+ fixed4 fragment_main(FragmentInput fragInput) : SV_Target
+ {
+ UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(fragInput);
+ float4 result;
+
+ half inLine_Q30;
+ Edges_B30(_Line_Width_,_Filter_Width_,fragInput.extra3,inLine_Q30);
+
+ float4 Fill_Color_Q38;
+ float4 Line_Color_Q38;
+ float4 Final_Color_Q38;
+ Main_Fragment_B38(_Fill_Start_Time_,_Line_Color_,_Draw_Fuzz_,_Draw_End_Time_,fragInput.extra1,fragInput.extra2,fragInput.extra3,inLine_Q30,Fill_Color_Q38,Line_Color_Q38,Final_Color_Q38);
+
+ float4 Out_Color = Final_Color_Q38;
+ float Clip_Threshold = 0.00;
+ bool To_sRGB = false;
+
+ result = Out_Color;
+
+ return result;
+ }
+
+ ENDCG
+ }
+ }
+}
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/SR_Triangles.shader.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/SR_Triangles.shader.meta
new file mode 100644
index 000000000..bcda05487
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/SR_Triangles.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: c31d23be78a0c7d438feb3d0305a7707
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/SR_Triangles_Lost_Tracking.mat b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/SR_Triangles_Lost_Tracking.mat
new file mode 100644
index 000000000..016362dd4
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/SR_Triangles_Lost_Tracking.mat
@@ -0,0 +1,128 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: SR_Triangles_Lost_Tracking
+ m_Shader: {fileID: 4800000, guid: 328d97e479ecdff41a40e36724da6158, type: 3}
+ m_ShaderKeywords: _COLOR_MAP_ENABLE_ _PULSE_ENABLED__ON
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _Color_Map_:
+ m_Texture: {fileID: 2800000, guid: 565e74aa212ee274b990133c5808e9de, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - USE_ALBEDO_TEXTURE: 1
+ - _Auto_Pulse_: 0
+ - _BumpScale: 1
+ - _Color_Center_: 0.5
+ - _Color_Leading_Fuzz_: 0.05
+ - _Color_Map_Enable_: 1
+ - _Color_Trailing_Fuzz_: 0.5
+ - _Cutoff: 0.5
+ - _Desaturated_Intensity_: 0.27
+ - _DetailNormalMapScale: 1
+ - _Draw_End_Time_: 0.5
+ - _Draw_Fuzz_: 0.2
+ - _DstBlend: 0
+ - _Edge_Width_: 1
+ - _Fill_Start_Time_: 0.5
+ - _Filter_Width_: 1.5
+ - _Flip_V_: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Intensity_: 3
+ - _Line_End_Time_: 0.5
+ - _Line_Width_: 0.5
+ - _Line_Width_Fade_: 0.25
+ - _Line_Width_Fade_Far_: 5
+ - _Max_In_Angle_: 0.007
+ - _Max_In_Hover_: 0.001
+ - _Max_Out_Angle_: 0.001
+ - _Max_Out_Hover_: 0
+ - _Metallic: 0
+ - _Mode: 0
+ - _Noise_Frequency_: 40.5
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _Period_: 2
+ - _Pulse_: 0
+ - _Pulse_Amplify_Leading_: 2
+ - _Pulse_Color_Width_: 0.28
+ - _Pulse_Enabled_: 1
+ - _Pulse_Lead_Fuzz_: 0.05
+ - _Pulse_Line_Fuzz_: 0.18
+ - _Pulse_Middle_: 0.14
+ - _Pulse_Noise_Frequency_: 777
+ - _Pulse_Outer_Fuzz_: 0
+ - _Pulse_Outer_Size_: 0.2
+ - _Pulse_Tail_Fuzz_: 0.08
+ - _Pulse_Vary_: 0
+ - _Pulse_Width_: 1.16
+ - _Reverse_: 1
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _Unity_To_sRGB_: 1
+ - _Vary_Color_: 0.75
+ - _Vary_UV_: 1
+ - _Wrist_Cutoff_: 0.1
+ - _Wrist_Fade_End_: 0.16
+ - _Wrist_Fade_Start_: 0.1
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ - _Fill_Color_: {r: 0.004, g: 0.004, b: 0.004, a: 1}
+ - _Line_Color_: {r: 0.639, g: 0.639, b: 0.639, a: 1}
+ - _Pulse_Origin_: {r: 0.103329025, g: -0.020448571, b: 1.47864, a: 0}
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/SR_Triangles_Lost_Tracking.mat.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/SR_Triangles_Lost_Tracking.mat.meta
new file mode 100644
index 000000000..af0f91ae9
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/SR_Triangles_Lost_Tracking.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2cc790f865f335a4bb8864404764bae8
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/SR_Triangles_Object_Space.shader b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/SR_Triangles_Object_Space.shader
new file mode 100644
index 000000000..45bc91f5b
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/SR_Triangles_Object_Space.shader
@@ -0,0 +1,608 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+Shader "SR_Triangles_Object_Space" {
+ Properties {
+ [Header(Fill)]
+ _Intensity_("Intensity", Range(0,5)) = 3
+ _Fill_Color_("Fill Color", Color) = (0.004,0.004,0.004,1)
+ _Vary_Color_("Vary Color", Range(0,1)) = 0.75
+ [Toggle(_COLOR_MAP_ENABLE_)] _Color_Map_Enable_("Color Map Enable", Float) = 1
+ [NoScaleOffset] _Color_Map_("Color Map", 2D) = "" {}
+ _Vary_UV_("Vary UV", Range(0,1)) = 1
+ _Fill_Start_Time_("Fill Start Time", Range(0,1)) = 0.5
+
+ [Header(Lines)]
+ _Line_Color_("Line Color", Color) = (0.639,0.639,0.639,1)
+ _Line_Width_("Line Width", Range(0,10)) = 0.5
+ _Line_Width_Fade_("Line Width Fade", Range(0,1)) = 0.25
+ _Line_Width_Fade_Far_("Line Width Fade Far", Range(0,30)) = 5
+ _Filter_Width_("Filter Width", Range(1,5)) = 1.5
+ _Draw_Fuzz_("Draw Fuzz", Range(0,1)) = 0.2
+ _Draw_End_Time_("Draw End Time", Range(0,1)) = 0.5
+
+ [Header(Pulse Driver)]
+ _Pulse_("Pulse", Range(0,1)) = 0.103
+ _Pulse_Origin_("Pulse Origin", Vector) = (0, 0, 0, 1)
+ [Toggle] _Auto_Pulse_("Auto Pulse", Float) = 0
+ _Period_("Period", Float) = 3.5
+
+ [Header(Pulse)]
+ [Toggle] _Pulse_Enabled_("Pulse Enabled", Float) = 1
+ _Pulse_Outer_Size_("Pulse Outer Size", Range(0,30)) = 10
+ _Pulse_Outer_Fuzz_("Pulse Outer Fuzz", Range(0,5)) = 1
+ _Pulse_Lead_Fuzz_("Pulse Lead Fuzz", Range(0,5)) = 1.2
+ _Pulse_Middle_("Pulse Middle", Range(0,5)) = 0
+ _Pulse_Tail_Fuzz_("Pulse Tail Fuzz", Range(0,5)) = 2.4
+ _Pulse_Vary_("Pulse Vary", Range(0,1)) = 0
+
+ [Header(Color Pulse)]
+ _Color_Center_("Color Center", Range(0,1)) = 0.4
+ _Color_Leading_Fuzz_("Color Leading Fuzz", Range(0,1)) = 1
+ _Color_Trailing_Fuzz_("Color Trailing Fuzz", Range(0,1)) = 1
+
+ [Header(Noise)]
+ _Noise_Frequency_("Noise Frequency", Range(0,1000)) = 40.5
+ }
+
+ SubShader {
+ Tags{ "RenderType" = "Opaque" }
+ Blend Off
+ Tags {"DisableBatching" = "True"}
+
+ LOD 100
+
+ Pass {
+ CGPROGRAM
+
+ #pragma vertex vertex_main
+ #pragma fragment fragment_main
+ #pragma geometry geometry_main
+ #pragma multi_compile_instancing
+ #pragma multi_compile _ _COLOR_MAP_ENABLE_
+
+ #include "UnityCG.cginc"
+
+ float _Noise_Frequency_;
+ float _Intensity_;
+ float4 _Fill_Color_;
+ float _Vary_Color_;
+ sampler2D _Color_Map_;
+ float _Vary_UV_;
+ float _Fill_Start_Time_;
+ bool _Pulse_Enabled_;
+ float _Pulse_Outer_Size_;
+ float _Pulse_Outer_Fuzz_;
+ float _Pulse_Lead_Fuzz_;
+ float _Pulse_Middle_;
+ float _Pulse_Tail_Fuzz_;
+ float _Pulse_Vary_;
+ float _Color_Center_;
+ float _Color_Leading_Fuzz_;
+ float _Color_Trailing_Fuzz_;
+ float4 _Line_Color_;
+ float _Line_Width_;
+ float _Line_Width_Fade_;
+ float _Line_Width_Fade_Far_;
+ float _Filter_Width_;
+ float _Draw_Fuzz_;
+ float _Draw_End_Time_;
+ float _Pulse_;
+ float3 _Pulse_Origin_;
+ bool _Auto_Pulse_;
+ float _Period_;
+
+ struct VertexInput {
+ float4 vertex : POSITION;
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ };
+
+ struct VertexOutput {
+ float4 pos : SV_POSITION;
+ float3 posWorld : TEXCOORD8;
+ float4 extra1 : TEXCOORD4;
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ UNITY_VERTEX_OUTPUT_STEREO
+ };
+
+ struct FragmentInput {
+ float4 pos : SV_POSITION;
+ float3 posWorld : TEXCOORD8;
+ float4 extra1 : TEXCOORD4;
+ float4 extra2 : TEXCOORD5;
+ float4 extra3 : TEXCOORD2;
+ UNITY_VERTEX_OUTPUT_STEREO
+ };
+
+ #define Alpha_Blend 0
+ #define No_Depth_Write 0
+ #define Double_Sided 0
+ #define Geo_Max_Out_Vertices 3
+
+ FragmentInput vxOut[Geo_Max_Out_Vertices];
+ int stripVxCount;
+ int vxOutCount;
+
+ //BLOCK_BEGIN Object_To_World_Pos 144
+
+ void Object_To_World_Pos_B144(
+ float3 Pos_Object,
+ out float3 Pos_World)
+ {
+ Pos_World = (mul(unity_ObjectToWorld, float4(Pos_Object, 1)));
+ }
+
+ //BLOCK_END Object_To_World_Pos
+
+ //BLOCK_BEGIN To_XYZ 149
+
+ void To_XYZ_B149(
+ float3 Vec3,
+ out float X,
+ out float Y,
+ out float Z)
+ {
+ X = Vec3.x;
+ Y = Vec3.y;
+ Z = Vec3.z;
+ }
+
+ //BLOCK_END To_XYZ
+
+ #define HUX_VIEW_TO_WORLD_DIR(V) (mul(transpose(UNITY_MATRIX_V), float4(V,0)).xyz)
+
+ VertexOutput vertex_main(VertexInput vertInput)
+ {
+ UNITY_SETUP_INSTANCE_ID(vertInput);
+ VertexOutput o;
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
+ UNITY_TRANSFER_INSTANCE_ID(vertInput, o);
+
+ float3 Pos_World_Q144;
+ Object_To_World_Pos_B144(vertInput.vertex.xyz,Pos_World_Q144);
+
+ float X_Q149;
+ float Y_Q149;
+ float Z_Q149;
+ To_XYZ_B149(vertInput.vertex.xyz,X_Q149,Y_Q149,Z_Q149);
+
+ // From_XYZW
+ float4 Vec4_Q148 = float4(X_Q149, Y_Q149, Z_Q149, 0);
+
+ float3 Position = Pos_World_Q144;
+ float3 Normal = float3(0,0,0);
+ float2 UV = float2(0,0);
+ float3 Tangent = float3(0,0,0);
+ float3 Binormal = float3(0,0,0);
+ float4 Color = float4(1,1,1,1);
+ float4 Extra1 = Vec4_Q148;
+ float4 Extra2 = float4(0,0,0,0);
+
+ o.pos = mul(UNITY_MATRIX_VP, float4(Position,1));
+ o.posWorld = Position;
+ o.extra1 = Extra1;
+ return o;
+ }
+
+ #ifndef HUX_GEO_SET_UV
+ #define HUX_GEO_SET_UV(A)
+ #endif
+
+ #ifndef HUX_GEO_SET_NORMAL
+ #define HUX_GEO_SET_NORMAL(A)
+ #endif
+
+ #ifndef HUX_GEO_SET_TANGENT
+ #define HUX_GEO_SET_TANGENT(A)
+ #endif
+
+ #ifndef HUX_GEO_SET_COLOR
+ #define HUX_GEO_SET_COLOR(A)
+ #endif
+
+ #define HUX_GEO_SET_EXTRA1(A) vxOut[vxOutCount].extra1=A;
+ #ifndef HUX_GEO_SET_EXTRA1
+ #define HUX_GEO_SET_EXTRA1(A)
+ #endif
+
+ #define HUX_GEO_SET_EXTRA2(A) vxOut[vxOutCount].extra2=A;
+ #ifndef HUX_GEO_SET_EXTRA2
+ #define HUX_GEO_SET_EXTRA2(A)
+ #endif
+
+ #define HUX_GEO_SET_EXTRA3(A) vxOut[vxOutCount].extra3=A;
+ #ifndef HUX_GEO_SET_EXTRA3
+ #define HUX_GEO_SET_EXTRA3(A)
+ #endif
+
+ //BLOCK_BEGIN Emit_Triangle 121
+
+ void emitVertex_Bid121(float3 P, float4 Extra1, float4 Extra2, float4 Extra3)
+ {
+ vxOut[vxOutCount].posWorld = P; vxOut[vxOutCount].pos = mul(unity_MatrixVP, float4(P,1.0f));;
+ HUX_GEO_SET_EXTRA1(Extra1);
+ HUX_GEO_SET_EXTRA2(Extra2);
+ HUX_GEO_SET_EXTRA3(Extra3);
+ vxOutCount += 1; stripVxCount += 1;
+ }
+
+ void Emit_Triangle_B121(
+ bool Previous,
+ float3 P1,
+ float3 P2,
+ float3 P3,
+ float4 Extra1_1,
+ float4 Extra1_2,
+ float4 Extra1_3,
+ float4 Color,
+ float Width,
+ out bool Next)
+ {
+ // This function can be called at most once per geometry_main invocation.
+ // If this is called multiple times, stripVxCount must be augmented as an
+ // array (see https://github.com/microsoft/MixedRealityToolkit-Unity/issues/6609
+ // for more details).
+ emitVertex_Bid121(P1,Extra1_1,Color,float4(1.0,0.0,0.0,Width));
+ emitVertex_Bid121(P2,Extra1_2,Color,float4(0.0,1.0,0.0,Width));
+ emitVertex_Bid121(P3,Extra1_3,Color,float4(0.0,0.0,1.0,Width));
+ Next = Previous;
+ }
+
+ //BLOCK_END Emit_Triangle
+
+ //BLOCK_BEGIN Find_Nearest 130
+
+ void Find_Nearest_B130(
+ float3 P1,
+ float3 P2,
+ float3 P3,
+ float Transition,
+ bool FadingOut,
+ float3 Distances,
+ out float3 Nearest,
+ out float4 Extra2_1,
+ out float4 Extra2_2,
+ out float4 Extra2_3)
+ {
+ if (FadingOut) {
+ if (Distances.x > Distances.y&& Distances.x > Distances.z) {
+ Extra2_1 = float4(1.0,0.0,0.0,0.0);
+ Extra2_2 = float4(0.0,0.0,0.0,0.0);
+ Extra2_3 = float4(0.0,0.0,0.0,0.0);
+ Nearest = P1;
+ }
+ else if (Distances.y > Distances.z) {
+ Extra2_1 = float4(0.0,0.0,0.0,0.0);
+ Extra2_2 = float4(1.0,0.0,0.0,0.0);
+ Extra2_3 = float4(0.0,0.0,0.0,0.0);
+ Nearest = P2;
+ }
+ else {
+ Extra2_1 = float4(0.0,0.0,0.0,0.0);
+ Extra2_2 = float4(0.0,0.0,0.0,0.0);
+ Extra2_3 = float4(1.0,0.0,0.0,0.0);
+ Nearest = P3;
+ }
+ }
+ else {
+ if (Distances.x < Distances.y && Distances.x < Distances.z) {
+ Extra2_1 = float4(1.0,0.0,0.0,0.0);
+ Extra2_2 = float4(0.0,0.0,0.0,0.0);
+ Extra2_3 = float4(0.0,0.0,0.0,0.0);
+ Nearest = P1;
+ }
+ else if (Distances.y < Distances.z) {
+ Extra2_1 = float4(0.0,0.0,0.0,0.0);
+ Extra2_2 = float4(1.0,0.0,0.0,0.0);
+ Extra2_3 = float4(0.0,0.0,0.0,0.0);
+ Nearest = P2;
+ }
+ else {
+ Extra2_1 = float4(0.0,0.0,0.0,0.0);
+ Extra2_2 = float4(0.0,0.0,0.0,0.0);
+ Extra2_3 = float4(1.0,0.0,0.0,0.0);
+ Nearest = P3;
+ }
+ }
+
+ Extra2_1.a = Transition;
+ Extra2_2.a = Transition;
+ Extra2_3.a = Transition;
+ }
+
+ //BLOCK_END Find_Nearest
+
+ //BLOCK_BEGIN Calc_Width 125
+
+ void Calc_Width_B125(
+ float3 Eye,
+ float3 Position,
+ float Base_Width,
+ float Width_Fade,
+ float Fade_Far_Distance,
+ out float Width)
+ {
+
+ float d = saturate(distance(Eye,Position) / Fade_Far_Distance);
+ Width = Base_Width * (1.0 - d + d * Width_Fade);
+
+ }
+
+ //BLOCK_END Calc_Width
+
+ //BLOCK_BEGIN Pulse 124
+
+ float ramp_Bid124(float start, float end, float x)
+ {
+ return saturate((x - start) / (end - start));
+ }
+
+ void Pulse_B124(
+ float Distance,
+ float Noise,
+ bool Pulse_Enabled,
+ float Pulse,
+ float Pulse_Middle,
+ float Pulse_Outer_Size,
+ float Pulse_Lead_Fuzz,
+ float Pulse_Tail_Fuzz,
+ float Pulse_Vary,
+ float Pulse_Outer_Fuzz,
+ float Color_Center,
+ float Color_Leading_Fuzz,
+ float Color_Trailing_Fuzz,
+ out float Transition,
+ out bool FadingOut,
+ out float Fade_Color,
+ out float Colorize)
+ {
+ Transition = 1.0;
+ Fade_Color = 1.0;
+ Colorize = 0.0;
+ FadingOut = false;
+ if (Pulse_Enabled) {
+ float d = Distance + Pulse_Vary * Noise;
+
+ float Pulse_Width = Pulse_Lead_Fuzz + Pulse_Middle + Pulse_Tail_Fuzz;
+ float totalSize = Pulse_Outer_Size + Pulse_Vary + Pulse_Width;
+ float pulseFront = Pulse * totalSize;
+
+ float edge1 = pulseFront - Pulse_Lead_Fuzz;
+ float fadeIn = ramp_Bid124(pulseFront,edge1,d);
+ float fadeOut = ramp_Bid124(pulseFront - Pulse_Width + Pulse_Tail_Fuzz,pulseFront - Pulse_Width,d);
+ float outerFade = 1.0 - ramp_Bid124(Pulse_Outer_Size - Pulse_Outer_Fuzz,Pulse_Outer_Size,d);
+
+ float colorCenter = pulseFront - Pulse_Width * Color_Center;
+ Colorize = (ramp_Bid124(colorCenter - Pulse_Width * Color_Trailing_Fuzz,colorCenter,d)) - ramp_Bid124(colorCenter,colorCenter + Pulse_Width * Color_Leading_Fuzz,d);
+
+ Transition = saturate(fadeIn * (1.0 - fadeOut)) * outerFade;
+ FadingOut = fadeOut > 0.0;
+ Fade_Color = (1.0 - fadeOut) * outerFade;
+ }
+ }
+
+ //BLOCK_END Pulse
+
+ //BLOCK_BEGIN Pick_Reference 129
+
+ void Pick_Reference_B129(
+ float3 VA,
+ float3 VB,
+ float3 VC,
+ float3 Pulse_Origin,
+ float4 Extra1_1,
+ float4 Extra1_2,
+ float4 Extra1_3,
+ out float3 Reference,
+ out float Distance,
+ out float3 Distances_Sqrd)
+ {
+ Distances_Sqrd.x = dot(VA - Pulse_Origin,VA - Pulse_Origin);
+ Distances_Sqrd.y = dot(VB - Pulse_Origin,VB - Pulse_Origin);
+ Distances_Sqrd.z = dot(VC - Pulse_Origin,VC - Pulse_Origin);
+
+ if (Distances_Sqrd.x < Distances_Sqrd.y && Distances_Sqrd.x < Distances_Sqrd.z) {
+ Reference = Extra1_1.xyz;
+ Distance = sqrt(Distances_Sqrd.x);
+ }
+ else if (Distances_Sqrd.y < Distances_Sqrd.z) {
+ Reference = Extra1_2.xyz;
+ Distance = sqrt(Distances_Sqrd.y);
+ }
+ else {
+ Reference = Extra1_3.xyz;
+ Distance = sqrt(Distances_Sqrd.z);
+ }
+ }
+
+ //BLOCK_END Pick_Reference
+
+ //BLOCK_BEGIN Noise 120
+
+ void Noise_B120(
+ float3 P,
+ float Frequency,
+ out float Noise1,
+ out float Noise2)
+ {
+ float3 P1 = P * Frequency;
+ float3 P2 = P1 * float3(-1.0,2.0,3.0);
+ Noise1 = frac(P1.x + P1.y + P1.z);
+ Noise2 = frac(P2.x + P2.y + P2.z);
+ }
+
+ //BLOCK_END Noise
+
+ //BLOCK_BEGIN Pt_Sample_Texture 117
+
+ void Pt_Sample_Texture_B117(
+ float Noise,
+ sampler2D Texture,
+ float Vary_UV,
+ float Map_Intensity,
+ out float4 Color)
+ {
+ float2 xy = float2(0.5,0.5) + float2(Noise - 0.5,Noise - 0.5) * Vary_UV;
+ Color = tex2Dlod(Texture,float4(xy.x,xy.y,0.0,0.0));
+ }
+
+ //BLOCK_END Pt_Sample_Texture
+
+ //BLOCK_BEGIN AutoPulse 113
+
+ void AutoPulse_B113(
+ float Pulse,
+ bool Auto_Pulse,
+ float Period,
+ float Time,
+ out float Result)
+ {
+
+ if (Auto_Pulse) {
+ Result = frac(Time / Period);
+ }
+ else {
+ Result = Pulse;
+ }
+ }
+
+ //BLOCK_END AutoPulse
+
+ [maxvertexcount(Geo_Max_Out_Vertices)]
+ void geometry_main(triangle VertexOutput vxIn[3], inout TriangleStream triStream)
+ {
+ UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(vxIn[0]);
+ vxOutCount = 0;
+ stripVxCount = 0;
+
+ float3 Reference_Q129;
+ float Distance_Q129;
+ float3 Distances_Sqrd_Q129;
+ Pick_Reference_B129(vxIn[0].posWorld,vxIn[1].posWorld,vxIn[2].posWorld,_Pulse_Origin_,vxIn[0].extra1,vxIn[1].extra1,vxIn[2].extra1,Reference_Q129,Distance_Q129,Distances_Sqrd_Q129);
+
+ float Noise1_Q120;
+ float Noise2_Q120;
+ Noise_B120(Reference_Q129,_Noise_Frequency_,Noise1_Q120,Noise2_Q120);
+
+ float4 Color_Q117;
+ #if defined(_COLOR_MAP_ENABLE_)
+ Pt_Sample_Texture_B117(Noise2_Q120,_Color_Map_,_Vary_UV_,1,Color_Q117);
+ #else
+ Color_Q117 = float4(1,1,1,1);
+ #endif
+
+ float Result_Q113;
+ AutoPulse_B113(_Pulse_,_Auto_Pulse_,_Period_,_Time.y,Result_Q113);
+
+ float Width_Q125;
+ Calc_Width_B125(_WorldSpaceCameraPos,Reference_Q129,_Line_Width_,_Line_Width_Fade_,_Line_Width_Fade_Far_,Width_Q125);
+
+ float Transition_Q124;
+ bool FadingOut_Q124;
+ float Fade_Color_Q124;
+ float Colorize_Q124;
+ Pulse_B124(Distance_Q129,Noise1_Q120,_Pulse_Enabled_,Result_Q113,_Pulse_Middle_,_Pulse_Outer_Size_,_Pulse_Lead_Fuzz_,_Pulse_Tail_Fuzz_,_Pulse_Vary_,_Pulse_Outer_Fuzz_,_Color_Center_,_Color_Leading_Fuzz_,_Color_Trailing_Fuzz_,Transition_Q124,FadingOut_Q124,Fade_Color_Q124,Colorize_Q124);
+
+ float3 Nearest_Q130;
+ float4 Extra2_1_Q130;
+ float4 Extra2_2_Q130;
+ float4 Extra2_3_Q130;
+ Find_Nearest_B130(vxIn[0].posWorld,vxIn[1].posWorld,vxIn[2].posWorld,Transition_Q124,FadingOut_Q124,Distances_Sqrd_Q129,Nearest_Q130,Extra2_1_Q130,Extra2_2_Q130,Extra2_3_Q130);
+
+ // Color
+ float4 Result_Q122;
+ Result_Q122 = lerp(_Fill_Color_,Color_Q117 * _Intensity_,float4(Colorize_Q124,Colorize_Q124,Colorize_Q124,Colorize_Q124)) * (1.0 - _Vary_Color_ * Noise1_Q120) * Fade_Color_Q124;
+ Result_Q122.a = Fade_Color_Q124;
+
+ bool Next_Q121;
+ Emit_Triangle_B121(false,vxIn[0].posWorld,vxIn[1].posWorld,vxIn[2].posWorld,Extra2_1_Q130,Extra2_2_Q130,Extra2_3_Q130,Result_Q122,Width_Q125,Next_Q121);
+
+ bool Root = Next_Q121;
+
+ int vxix = 0;
+ int i = 0;
+ while (i < stripVxCount) {
+ UNITY_TRANSFER_VERTEX_OUTPUT_STEREO(vxIn[0],vxOut[vxix]);
+ triStream.Append(vxOut[vxix]);
+ i += 1; vxix += 1;
+ }
+ triStream.RestartStrip();
+ }
+
+ //BLOCK_BEGIN Main_Fragment 134
+
+ void Main_Fragment_B134(
+ float Fill_Start_Time,
+ float4 Line_Color_Base,
+ float Fuzz,
+ float Line_End_Time,
+ float4 Transition,
+ float4 Fill_Color_In,
+ float4 V,
+ float In_Line,
+ out float4 Fill_Color,
+ out float4 Line_Color,
+ out float4 Final_Color)
+ {
+ half fillProgress = saturate((Transition.w - Fill_Start_Time) / (1.0 - Fill_Start_Time));
+
+ Fill_Color.rgb = Fill_Color_In.rgb * fillProgress;
+ Fill_Color.a = fillProgress;
+
+ half lineProgress = saturate(Transition.w / Line_End_Time);
+ half Edge = 1.0 - lineProgress;
+ half k = Edge * (1.0 + Fuzz) - Fuzz;
+ half kk = saturate(Transition.x);
+ half lineFade = saturate(smoothstep(k, k + Fuzz, kk));
+ Line_Color = Line_Color_Base * lineFade * Fill_Color_In.w;
+
+ Final_Color = lerp(Fill_Color, Line_Color,float4(In_Line, In_Line, In_Line, In_Line));
+ }
+
+ //BLOCK_END Main_Fragment
+
+ //BLOCK_BEGIN Edges 126
+
+ float3 FilterStep_Bid126(float3 edge, float3 x, float3 dx)
+ {
+ return (x + dx * 0.5 - max(edge,x - dx * 0.5)) / max(dx,1.0E-8);
+ }
+
+ void Edges_B126(
+ float Edge_Width,
+ float Filter_Width,
+ float4 Edges,
+ out half inLine)
+ {
+ float3 fw = fwidth(Edges.xyz);
+ float3 a = FilterStep_Bid126(fw * Edges.w,Edges.xyz,fw * Filter_Width);
+ inLine = saturate((1.0 - min(a.x,min(a.y,a.z))));
+ }
+
+ //BLOCK_END Edges
+
+ fixed4 fragment_main(FragmentInput fragInput) : SV_Target
+ {
+ UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(fragInput);
+ float4 result;
+
+ half inLine_Q126;
+ Edges_B126(_Line_Width_,_Filter_Width_,fragInput.extra3,inLine_Q126);
+
+ float4 Fill_Color_Q134;
+ float4 Line_Color_Q134;
+ float4 Final_Color_Q134;
+ Main_Fragment_B134(_Fill_Start_Time_,_Line_Color_,_Draw_Fuzz_,_Draw_End_Time_,fragInput.extra1,fragInput.extra2,fragInput.extra3,inLine_Q126,Fill_Color_Q134,Line_Color_Q134,Final_Color_Q134);
+
+ float4 Out_Color = Final_Color_Q134;
+ float Clip_Threshold = 0;
+
+ result = Out_Color;
+
+ return result;
+ }
+
+ ENDCG
+ }
+ }
+}
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/SR_Triangles_Object_Space.shader.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/SR_Triangles_Object_Space.shader.meta
new file mode 100644
index 000000000..805fcb498
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/SR_Triangles_Object_Space.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 328d97e479ecdff41a40e36724da6158
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/Sydney_Sounds_SignalLost_Loop.wav b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/Sydney_Sounds_SignalLost_Loop.wav
new file mode 100644
index 000000000..66b593c27
Binary files /dev/null and b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/Sydney_Sounds_SignalLost_Loop.wav differ
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/Sydney_Sounds_SignalLost_Loop.wav.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/Sydney_Sounds_SignalLost_Loop.wav.meta
new file mode 100644
index 000000000..bb3150854
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/Sydney_Sounds_SignalLost_Loop.wav.meta
@@ -0,0 +1,22 @@
+fileFormatVersion: 2
+guid: 3e31be11b607dfd4d84a1313922956b4
+AudioImporter:
+ externalObjects: {}
+ serializedVersion: 6
+ defaultSettings:
+ loadType: 0
+ sampleRateSetting: 0
+ sampleRateOverride: 44100
+ compressionFormat: 1
+ quality: 1
+ conversionMode: 0
+ platformSettingOverrides: {}
+ forceToMono: 0
+ normalize: 1
+ preloadAudioData: 1
+ loadInBackground: 0
+ ambisonic: 0
+ 3D: 1
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/color_palette.png b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/color_palette.png
new file mode 100644
index 000000000..abaabad6c
Binary files /dev/null and b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/color_palette.png differ
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/color_palette.png.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/color_palette.png.meta
new file mode 100644
index 000000000..d1ec5d0a5
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/color_palette.png.meta
@@ -0,0 +1,110 @@
+fileFormatVersion: 2
+guid: 565e74aa212ee274b990133c5808e9de
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 9
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: 0
+ wrapV: 0
+ wrapW: 0
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ - serializedVersion: 2
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ - serializedVersion: 2
+ buildTarget: Windows Store Apps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/scanning_terrain.fbx b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/scanning_terrain.fbx
new file mode 100644
index 000000000..bb6c16cec
Binary files /dev/null and b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/scanning_terrain.fbx differ
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/scanning_terrain.fbx.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/scanning_terrain.fbx.meta
new file mode 100644
index 000000000..7d46a746c
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Assets/scanning_terrain.fbx.meta
@@ -0,0 +1,102 @@
+fileFormatVersion: 2
+guid: d7bd8013cf7ac614a8f6931ec08169d8
+ModelImporter:
+ serializedVersion: 23
+ fileIDToRecycleName:
+ 100000: CINEMA_4D_Editor
+ 100002: Null
+ 100004: //RootNode
+ 400000: CINEMA_4D_Editor
+ 400002: Null
+ 400004: //RootNode
+ 2000000: CINEMA_4D_Editor
+ 2100000: Mat.3
+ 2300000: Null
+ 3300000: Null
+ 4300000: Null
+ externalObjects: {}
+ materials:
+ importMaterials: 1
+ materialName: 0
+ materialSearch: 1
+ materialLocation: 1
+ animations:
+ legacyGenerateAnimations: 4
+ bakeSimulation: 0
+ resampleCurves: 1
+ optimizeGameObjects: 0
+ motionNodeName:
+ rigImportErrors:
+ rigImportWarnings:
+ animationImportErrors:
+ animationImportWarnings:
+ animationRetargetingWarnings:
+ animationDoRetargetingWarnings: 0
+ importAnimatedCustomProperties: 0
+ importConstraints: 0
+ animationCompression: 1
+ animationRotationError: 0.5
+ animationPositionError: 0.5
+ animationScaleError: 0.5
+ animationWrapMode: 0
+ extraExposedTransformPaths: []
+ extraUserProperties: []
+ clipAnimations: []
+ isReadable: 1
+ meshes:
+ lODScreenPercentages: []
+ globalScale: 1
+ meshCompression: 0
+ addColliders: 0
+ useSRGBMaterialColor: 1
+ importVisibility: 1
+ importBlendShapes: 1
+ importCameras: 1
+ importLights: 1
+ swapUVChannels: 0
+ generateSecondaryUV: 0
+ useFileUnits: 1
+ optimizeMeshForGPU: 1
+ keepQuads: 0
+ weldVertices: 1
+ preserveHierarchy: 0
+ indexFormat: 0
+ secondaryUVAngleDistortion: 8
+ secondaryUVAreaDistortion: 15.000001
+ secondaryUVHardAngle: 88
+ secondaryUVPackMargin: 4
+ useFileScale: 1
+ previousCalculatedGlobalScale: 1
+ hasPreviousCalculatedGlobalScale: 0
+ tangentSpace:
+ normalSmoothAngle: 60
+ normalImportMode: 0
+ tangentImportMode: 3
+ normalCalculationMode: 4
+ legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
+ blendShapeNormalImportMode: 1
+ normalSmoothingSource: 0
+ importAnimation: 1
+ copyAvatar: 0
+ humanDescription:
+ serializedVersion: 2
+ human: []
+ skeleton: []
+ armTwist: 0.5
+ foreArmTwist: 0.5
+ upperLegTwist: 0.5
+ legTwist: 0.5
+ armStretch: 0.05
+ legStretch: 0.05
+ feetSpacing: 0
+ rootMotionBoneName:
+ hasTranslationDoF: 0
+ hasExtraRoot: 0
+ skeletonHasParents: 1
+ lastHumanDescriptionAvatarSource: {instanceID: 0}
+ animationType: 0
+ humanoidOversampling: 1
+ additionalBone: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/BasicLostTrackingVisual.cs b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/BasicLostTrackingVisual.cs
new file mode 100644
index 000000000..3e0c5dca8
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/BasicLostTrackingVisual.cs
@@ -0,0 +1,86 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See LICENSE in the project root for license information.
+
+using UnityEngine;
+
+namespace Microsoft.MixedReality.Toolkit.Extensions.Tracking
+{
+ ///
+ /// A basic lost tracking visual for HoloLens devices.
+ ///
+ [AddComponentMenu("Scripts/MRTK/Extensions/BasicLostTrackingVisual")]
+ public class BasicLostTrackingVisual : MonoBehaviour, ILostTrackingVisual
+ {
+ [SerializeField]
+ [Tooltip("The renderer for this lost tracking visual.")]
+ private MeshRenderer gridRenderer = null;
+
+ [SerializeField]
+ [Tooltip("The audio to play while the lost tracking visual is active.")]
+ private AudioClip loopClip = null;
+
+ [SerializeField]
+ [Tooltip("The AudioSource to play from while the lost tracking visual is active.")]
+ private AudioSource audioSource = null;
+
+ [SerializeField]
+ [Tooltip("How long the lost tracking visual's pulse has been running (up to Pulse Duration).")]
+ private float pulseTimer = 0.0f;
+
+ [SerializeField]
+ [Tooltip("How long the lost tracking visual's pulse runs.")]
+ private float pulseDuration = 2.0f;
+
+ ///
+ public bool Enabled
+ {
+ get { return gameObject.activeSelf; }
+ set { gameObject.SetActive(value); }
+ }
+
+ ///
+ public void ResetVisual()
+ {
+ if (audioSource != null && loopClip != null)
+ {
+ audioSource.clip = loopClip;
+ audioSource.loop = true;
+ audioSource.Play();
+ }
+
+ pulseTimer = 0.0f;
+
+ if (gridRenderer != null)
+ {
+ gridRenderer.material.SetFloat("_Pulse_", 0.0f);
+ }
+ }
+
+ ///
+ public void SetLayer(int layer)
+ {
+ foreach (Transform child in transform.GetComponentsInChildren())
+ {
+ child.gameObject.layer = layer;
+ }
+ }
+
+ private void Update()
+ {
+ // Using unscaled delta time is necessary to avoid the effect pausing when Timescale is set to 0.0f
+ pulseTimer += Time.unscaledDeltaTime;
+ float normalizedPulseValue = Mathf.Clamp01(pulseTimer / pulseDuration);
+
+ if (pulseTimer >= pulseDuration)
+ {
+ pulseTimer = 0;
+ }
+
+ if (gridRenderer != null)
+ {
+ gridRenderer.material.SetFloat("_Pulse_", normalizedPulseValue);
+ gridRenderer.material.SetVector("_Pulse_Origin_", gridRenderer.transform.position);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/BasicLostTrackingVisual.cs.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/BasicLostTrackingVisual.cs.meta
new file mode 100644
index 000000000..e1ccff295
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/BasicLostTrackingVisual.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d166f51ac592f1d49962a799f331adad
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Editor.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Editor.meta
new file mode 100644
index 000000000..523a07a15
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 059f01e93d486a64db0b91868ec5ad26
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Editor/AssemblyInfo.cs b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Editor/AssemblyInfo.cs
new file mode 100644
index 000000000..211928fad
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Editor/AssemblyInfo.cs
@@ -0,0 +1,10 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See LICENSE in the project root for license information.
+
+using System.Reflection;
+
+[assembly: AssemblyVersion("2.4.0.0")]
+[assembly: AssemblyFileVersion("2.4.0.0")]
+
+[assembly: AssemblyProduct("Microsoft® Mixed Reality Toolkit Extensions")]
+[assembly: AssemblyCopyright("Copyright © Microsoft Corporation")]
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Editor/AssemblyInfo.cs.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Editor/AssemblyInfo.cs.meta
new file mode 100644
index 000000000..ec4a3c6ff
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Editor/AssemblyInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 696b8e16824353040915ba83dc825585
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Editor/LostTrackingServiceInspector.cs b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Editor/LostTrackingServiceInspector.cs
new file mode 100644
index 000000000..9d3b926cb
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Editor/LostTrackingServiceInspector.cs
@@ -0,0 +1,43 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See LICENSE in the project root for license information.
+
+#if UNITY_EDITOR
+using Microsoft.MixedReality.Toolkit.Editor;
+using UnityEditor;
+using UnityEngine;
+
+namespace Microsoft.MixedReality.Toolkit.Extensions.Tracking.Editor
+{
+ ///
+ /// The custom inspector for an .
+ ///
+ [MixedRealityServiceInspector(typeof(ILostTrackingService))]
+ public class LostTrackingServiceInspector : BaseMixedRealityServiceInspector
+ {
+ public override void DrawInspectorGUI(object target)
+ {
+ LostTrackingService service = (LostTrackingService)target;
+
+ EditorGUI.BeginDisabledGroup(!Application.isPlaying);
+ EditorGUILayout.Toggle("Tracking Lost", service.TrackingLost);
+
+ EditorGUILayout.LabelField("Editor Testing", EditorStyles.boldLabel);
+ if (service.TrackingLost)
+ {
+ if (GUILayout.Button("Set Tracking Restored"))
+ {
+ service.EditorSetTrackingLost(false);
+ }
+ }
+ else
+ {
+ if (GUILayout.Button("Set Tracking Lost"))
+ {
+ service.EditorSetTrackingLost(true);
+ }
+ }
+ EditorGUI.EndDisabledGroup();
+ }
+ }
+}
+#endif
\ No newline at end of file
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Editor/LostTrackingServiceInspector.cs.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Editor/LostTrackingServiceInspector.cs.meta
new file mode 100644
index 000000000..30b6859d0
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Editor/LostTrackingServiceInspector.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: de40b37f5d4ceeb4582c4cb9ffa3eb97
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Editor/Microsoft.MixedReality.Toolkit.Extensions.Tracking.Editor.asmdef b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Editor/Microsoft.MixedReality.Toolkit.Extensions.Tracking.Editor.asmdef
new file mode 100644
index 000000000..70d7506c7
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Editor/Microsoft.MixedReality.Toolkit.Extensions.Tracking.Editor.asmdef
@@ -0,0 +1,18 @@
+{
+ "name": "Microsoft.MixedReality.Toolkit.Extensions.Tracking.Editor",
+ "references": [
+ "Microsoft.MixedReality.Toolkit",
+ "Microsoft.MixedReality.Toolkit.Editor.ServiceInspectors",
+ "Microsoft.MixedReality.Toolkit.Extensions.Tracking"
+ ],
+ "optionalUnityReferences": [],
+ "includePlatforms": [
+ "Editor"
+ ],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": false,
+ "precompiledReferences": [],
+ "autoReferenced": true,
+ "defineConstraints": []
+}
\ No newline at end of file
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Editor/Microsoft.MixedReality.Toolkit.Extensions.Tracking.Editor.asmdef.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Editor/Microsoft.MixedReality.Toolkit.Extensions.Tracking.Editor.asmdef.meta
new file mode 100644
index 000000000..04b2eb4a2
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Editor/Microsoft.MixedReality.Toolkit.Extensions.Tracking.Editor.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 3ff76c2f5e38489459ad67c29ccb9185
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Interfaces.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Interfaces.meta
new file mode 100644
index 000000000..c699769c3
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Interfaces.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f4d19d4674f2fe941aea157bad109d4b
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Interfaces/ILostTrackingService.cs b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Interfaces/ILostTrackingService.cs
new file mode 100644
index 000000000..41e4b522e
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Interfaces/ILostTrackingService.cs
@@ -0,0 +1,40 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See LICENSE in the project root for license information.
+
+using System;
+
+namespace Microsoft.MixedReality.Toolkit.Extensions.Tracking
+{
+ ///
+ /// A service that detects when tracking is lost on WSA devices.
+ /// When tracking is lost, the service displays a visual indicator and sets the main camera's culling mask to hide all other objects.
+ /// When tracking is restored, the camera mask is restored and the visual indicator is hidden.
+ ///
+ public interface ILostTrackingService : IMixedRealityExtensionService
+ {
+ ///
+ /// True if tracking is lost, false if tracking is present.
+ ///
+ bool TrackingLost { get; }
+
+ ///
+ /// Called when tracking is lost.
+ /// (When UnityEngine.VR.WSA.PositionalLocatorState is Inhibited.)
+ ///
+ Action OnTrackingLost { get; set; }
+
+ ///
+ /// Called when tracking is stored
+ /// (UnityEngine.VR.WSA.PositionalLocatorState is anything other than Inhibited.)
+ ///
+ Action OnTrackingRestored { get; set; }
+
+#if UNITY_EDITOR
+ ///
+ /// Editor-only method to test lost tracking visual.
+ ///
+ /// If true, sets tracking to be lost. If false, sets tracking to be found.
+ void EditorSetTrackingLost(bool trackingLost);
+#endif
+ }
+}
\ No newline at end of file
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Interfaces/ILostTrackingService.cs.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Interfaces/ILostTrackingService.cs.meta
new file mode 100644
index 000000000..1418cbcdc
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Interfaces/ILostTrackingService.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: da2001cea4f08f149a9fd786f11b8370
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Interfaces/ILostTrackingVisual.cs b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Interfaces/ILostTrackingVisual.cs
new file mode 100644
index 000000000..1dda50208
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Interfaces/ILostTrackingVisual.cs
@@ -0,0 +1,27 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See LICENSE in the project root for license information.
+
+namespace Microsoft.MixedReality.Toolkit.Extensions.Tracking
+{
+ ///
+ /// Interface for a lost tracking visual. Used by the ILostTrackingService extension.
+ ///
+ public interface ILostTrackingVisual
+ {
+ ///
+ /// Completely enables or disables the visual. Should probably be linked to the root game object's active value.
+ ///
+ bool Enabled { get; set; }
+
+ ///
+ /// Sets all visual components to the layer provided.
+ ///
+ /// The layer to set for the visual components.
+ void SetLayer(int layer);
+
+ ///
+ /// Resets the visual state to default.
+ ///
+ void ResetVisual();
+ }
+}
\ No newline at end of file
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Interfaces/ILostTrackingVisual.cs.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Interfaces/ILostTrackingVisual.cs.meta
new file mode 100644
index 000000000..42a2bc0af
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Interfaces/ILostTrackingVisual.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f44bd9069aa7cf54eb0271177da5f963
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/LostTrackingService.cs b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/LostTrackingService.cs
new file mode 100644
index 000000000..b31ebea53
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/LostTrackingService.cs
@@ -0,0 +1,207 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See LICENSE in the project root for license information.
+
+using System;
+using Unity.Profiling;
+using UnityEngine;
+using Microsoft.MixedReality.Toolkit.Utilities;
+
+#if UNITY_WSA
+using UnityEngine.XR.WSA;
+#endif
+
+namespace Microsoft.MixedReality.Toolkit.Extensions.Tracking
+{
+ ///
+ /// A service that detects when tracking is lost on WSA devices.
+ /// When tracking is lost, the service displays a visual indicator and sets the main camera's culling mask to hide all other objects.
+ /// When tracking is restored, the camera mask is restored and the visual indicator is hidden.
+ ///
+ [MixedRealityExtensionService(
+ SupportedPlatforms.WindowsUniversal,
+ "Tracking Lost Service",
+ "LostTrackingService/Profiles/DefaultLostTrackingServiceProfile.asset",
+ "MixedRealityToolkit.Extensions")]
+ public class LostTrackingService : BaseExtensionService, ILostTrackingService, IMixedRealityExtensionService
+ {
+ ///
+ public bool TrackingLost { get; private set; } = false;
+
+ ///
+ public Action OnTrackingLost { get; set; }
+
+ ///
+ public Action OnTrackingRestored { get; set; }
+
+ private readonly LostTrackingServiceProfile profile;
+ private ILostTrackingVisual visual;
+ private int cullingMaskOnTrackingLost;
+ private float timeScaleOnTrackingLost;
+
+ ///
+ /// Constructor.
+ ///
+ /// The instance that loaded the service.
+ /// Friendly name of the service.
+ /// Service priority. Used to determine order of instantiation.
+ /// The service's configuration profile.
+ [Obsolete("This constructor is obsolete (registrar parameter is no longer required) and will be removed in a future version of the Microsoft Mixed Reality Toolkit.")]
+ public LostTrackingService(
+ IMixedRealityServiceRegistrar registrar,
+ string name,
+ uint priority,
+ BaseMixedRealityProfile profile) : this(name, priority, profile)
+ {
+ Registrar = registrar;
+ }
+
+ ///
+ /// Constructor.
+ ///
+ /// Friendly name of the service.
+ /// Service priority. Used to determine order of instantiation.
+ /// The service's configuration profile.
+ public LostTrackingService(
+ string name,
+ uint priority,
+ BaseMixedRealityProfile profile) : base(name, priority, profile)
+ {
+ this.profile = profile as LostTrackingServiceProfile;
+ }
+
+ ///
+ public override void Initialize()
+ {
+#if UNITY_WSA
+ WorldManager.OnPositionalLocatorStateChanged += OnPositionalLocatorStateChanged;
+#else
+ Debug.LogWarning("This service is not supported on this platform.");
+#endif
+ }
+
+#if UNITY_EDITOR
+ ///
+ public void EditorSetTrackingLost(bool trackingLost)
+ {
+ SetTrackingLost(trackingLost);
+ }
+#endif
+
+ private static readonly ProfilerMarker DisableTrackingLostVisualPerfMarker = new ProfilerMarker("[MRTK] LostTrackingService.DisableTrackingLostVisual");
+
+ private void DisableTrackingLostVisual()
+ {
+ using (DisableTrackingLostVisualPerfMarker.Auto())
+ {
+ if (visual != null && visual.Enabled)
+ {
+ CameraCache.Main.cullingMask = cullingMaskOnTrackingLost;
+
+ if (profile.HaltTimeWhileTrackingLost)
+ {
+ Time.timeScale = timeScaleOnTrackingLost;
+ }
+
+ if (profile.HaltAudioOnTrackingLost)
+ {
+ AudioListener.pause = false;
+ }
+
+ visual.Enabled = false;
+ }
+ }
+ }
+
+ private static readonly ProfilerMarker EnableTrackingLostVisualPerfMarker = new ProfilerMarker("[MRTK] LostTrackingService.EnableTrackingLostVisual");
+
+ private void EnableTrackingLostVisual()
+ {
+ using (EnableTrackingLostVisualPerfMarker.Auto())
+ {
+ if (visual == null)
+ {
+ GameObject visualObject = UnityEngine.Object.Instantiate(profile.TrackingLostVisualPrefab);
+
+ if (visualObject != null)
+ {
+ visual = visualObject.GetComponentInChildren();
+ }
+
+ if (visual == null)
+ {
+ Debug.LogError("No ILostTrackingVisual found on prefab supplied by LostTrackingServiceProfile.");
+ return;
+ }
+
+ visual.Enabled = false;
+ }
+
+ if (!visual.Enabled)
+ {
+ // Store these settings for later when tracking is regained
+ cullingMaskOnTrackingLost = CameraCache.Main.cullingMask;
+ timeScaleOnTrackingLost = Time.timeScale;
+ CameraCache.Main.cullingMask = profile.TrackingLostCullingMask;
+
+ if (profile.HaltTimeWhileTrackingLost)
+ {
+ Time.timeScale = 0.0f;
+ }
+
+ if (profile.HaltAudioOnTrackingLost)
+ {
+ AudioListener.pause = true;
+ }
+
+ visual.Enabled = true;
+ visual.SetLayer(profile.TrackingLostVisualLayer);
+ visual.ResetVisual();
+ }
+ }
+ }
+
+ private static readonly ProfilerMarker SetTrackingLostPerfMarker = new ProfilerMarker("[MRTK] LostTrackingService.SetTrackingLost");
+
+ private void SetTrackingLost(bool trackingLost)
+ {
+ using (SetTrackingLostPerfMarker.Auto())
+ {
+ if (TrackingLost != trackingLost)
+ {
+ TrackingLost = trackingLost;
+ if (TrackingLost)
+ {
+ OnTrackingLost?.Invoke();
+ EnableTrackingLostVisual();
+ }
+ else
+ {
+ OnTrackingRestored?.Invoke();
+ DisableTrackingLostVisual();
+ }
+ }
+ }
+ }
+
+#if UNITY_WSA
+ private static readonly ProfilerMarker OnPositionLocatorStateChangedPerfMarker = new ProfilerMarker("[MRTK] LostTrackingService.OnPositionalLocatorStateChanged");
+
+ private void OnPositionalLocatorStateChanged(PositionalLocatorState oldState, PositionalLocatorState newState)
+ {
+ using (OnPositionLocatorStateChangedPerfMarker.Auto())
+ {
+ switch (newState)
+ {
+ case PositionalLocatorState.Inhibited:
+ SetTrackingLost(true);
+ break;
+
+ default:
+ SetTrackingLost(false);
+ break;
+ }
+ }
+ }
+#endif
+ }
+}
\ No newline at end of file
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/LostTrackingService.cs.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/LostTrackingService.cs.meta
new file mode 100644
index 000000000..611b21fb0
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/LostTrackingService.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 109ad19a45c7d6d4ba6fd4a5f29bee62
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/LostTrackingServiceProfile.cs b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/LostTrackingServiceProfile.cs
new file mode 100644
index 000000000..82397713c
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/LostTrackingServiceProfile.cs
@@ -0,0 +1,70 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See LICENSE in the project root for license information.
+
+using Microsoft.MixedReality.Toolkit.Physics;
+using UnityEngine;
+
+namespace Microsoft.MixedReality.Toolkit.Extensions.Tracking
+{
+ ///
+ /// The profile definition for an .
+ ///
+ [MixedRealityServiceProfile(typeof(ILostTrackingService))]
+ [CreateAssetMenu(fileName = "LostTrackingServiceProfile", menuName = "Mixed Reality Toolkit/Extensions/Lost Tracking Service/Mixed Reality Lost Tracking Service Profile")]
+ public class LostTrackingServiceProfile : BaseMixedRealityProfile
+ {
+ ///
+ /// Prefab for the lost tracking visual. Must include a component that implements ILostTrackingVisual.
+ /// A radial solver or tagalong script is recommended as well.
+ ///
+ public GameObject TrackingLostVisualPrefab => trackingLostVisualPrefab;
+
+ ///
+ /// The layer used to display the lost tracking visual.
+ ///
+ public int TrackingLostVisualLayer => trackingLostVisualLayer;
+
+ ///
+ /// The culling mask to use when tracking is lost. The tracking lost visual layer is automatically included.
+ ///
+ public LayerMask TrackingLostCullingMask => trackingLostCullingMask;
+
+ ///
+ /// If true, the service will set timescale to 0 while tracking is lost.
+ ///
+ public bool HaltTimeWhileTrackingLost => haltTimeWhileTrackingLost;
+
+ ///
+ /// If true, the service will pause audio while tracking is lost.
+ ///
+ public bool HaltAudioOnTrackingLost => haltAudioWhileTrackingLost;
+
+ [SerializeField]
+ [Tooltip("Prefab for the lost tracking visual. Must include a component that implements ILostTrackingVisual. A radial solver or tagalong script is recommended as well.")]
+ private GameObject trackingLostVisualPrefab = null;
+
+ [SerializeField]
+ [PhysicsLayer]
+ [Tooltip("The layer used to display the lost tracking visual.")]
+ private int trackingLostVisualLayer = 31;
+
+ [SerializeField]
+ [Tooltip("The culling mask to use when tracking is lost. The tracking lost visual layer is automatically included.")]
+ private LayerMask trackingLostCullingMask = new LayerMask();
+
+ [SerializeField]
+ [Tooltip("If true, the service will set timescale to 0 while tracking is lost.")]
+ private bool haltTimeWhileTrackingLost = true;
+
+ [SerializeField]
+ [Tooltip("If true, the service will pause audio while tracking is lost.")]
+ private bool haltAudioWhileTrackingLost = true;
+
+ private void OnValidate()
+ {
+ // Ensure that the tracking lost culling mask contains the visual's layer
+ // Otherwise it won't be visible when tracking is lost
+ trackingLostCullingMask.value |= 1 << trackingLostVisualLayer;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/LostTrackingServiceProfile.cs.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/LostTrackingServiceProfile.cs.meta
new file mode 100644
index 000000000..c9c8f1153
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/LostTrackingServiceProfile.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7d016382d6dbecc4fa2928ffe6a94cf0
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: 4f9f54f9478441228dea18a2c828cfc6, type: 3}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Microsoft.MixedReality.Toolkit.Extensions.Tracking.asmdef b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Microsoft.MixedReality.Toolkit.Extensions.Tracking.asmdef
new file mode 100644
index 000000000..19022c2ff
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Microsoft.MixedReality.Toolkit.Extensions.Tracking.asmdef
@@ -0,0 +1,14 @@
+{
+ "name": "Microsoft.MixedReality.Toolkit.Extensions.Tracking",
+ "references": [
+ "Microsoft.MixedReality.Toolkit"
+ ],
+ "optionalUnityReferences": [],
+ "includePlatforms": [],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": false,
+ "precompiledReferences": [],
+ "autoReferenced": true,
+ "defineConstraints": []
+}
\ No newline at end of file
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Microsoft.MixedReality.Toolkit.Extensions.Tracking.asmdef.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Microsoft.MixedReality.Toolkit.Extensions.Tracking.asmdef.meta
new file mode 100644
index 000000000..afb9dc921
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Microsoft.MixedReality.Toolkit.Extensions.Tracking.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 0e5be6e5014a6c94faf57295051b2ab3
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Profiles.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Profiles.meta
new file mode 100644
index 000000000..4ab94cab1
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Profiles.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 29aaebffd30667b4eae80f0c73fdf0d6
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Profiles/DefaultLostTrackingServiceProfile.asset b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Profiles/DefaultLostTrackingServiceProfile.asset
new file mode 100644
index 000000000..e7f3beea9
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Profiles/DefaultLostTrackingServiceProfile.asset
@@ -0,0 +1,23 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 7d016382d6dbecc4fa2928ffe6a94cf0, type: 3}
+ m_Name: DefaultLostTrackingServiceProfile
+ m_EditorClassIdentifier:
+ isCustomProfile: 0
+ trackingLostVisualPrefab: {fileID: 3020011822869161386, guid: ac9d662b5ab57dc489e1ea86933f2faa,
+ type: 3}
+ trackingLostVisualLayer: 31
+ trackingLostCullingMask:
+ serializedVersion: 2
+ m_Bits: 2147483648
+ haltTimeWhileTrackingLost: 1
+ haltAudioWhileTrackingLost: 1
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Profiles/DefaultLostTrackingServiceProfile.asset.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Profiles/DefaultLostTrackingServiceProfile.asset.meta
new file mode 100644
index 000000000..1434c449d
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/LostTrackingService/Profiles/DefaultLostTrackingServiceProfile.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c125a4d83782591409c32ca4d9cc2de5
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/MRTK.Extensions.sentinel b/Frontend/VIAProMa/Assets/MRTK/Extensions/MRTK.Extensions.sentinel
new file mode 100644
index 000000000..e69de29bb
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/MRTK.Extensions.sentinel.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/MRTK.Extensions.sentinel.meta
new file mode 100644
index 000000000..a89b3c0d7
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/MRTK.Extensions.sentinel.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 354da3282d4f2d3449f6145955984ed5
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/MixedReality.Toolkit.Extensions.nuspec b/Frontend/VIAProMa/Assets/MRTK/Extensions/MixedReality.Toolkit.Extensions.nuspec
new file mode 100644
index 000000000..b84c3c9e1
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/MixedReality.Toolkit.Extensions.nuspec
@@ -0,0 +1,32 @@
+
+
+
+ Microsoft.MixedReality.Toolkit.Extensions
+ $version$
+ Microsoft
+ Microsoft,MixedReality
+ https://github.com/Microsoft/MixedRealityToolkit-Unity/blob/mrtk_development/License.txt
+ https://aka.ms/MRTK
+ https://microsoft.github.io/MixedRealityToolkit-Unity/Documentation/Images/MRTK_Logo_NuGet.png
+ true
+ Extension services and components for the Mixed Reality Toolkit
+ © Microsoft Corporation. All rights reserved.
+ $releaseNotes$
+ Unity MixedReality MixedRealityToolkit MRTK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/MixedReality.Toolkit.Extensions.nuspec.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/MixedReality.Toolkit.Extensions.nuspec.meta
new file mode 100644
index 000000000..130ade5ea
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/MixedReality.Toolkit.Extensions.nuspec.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 81a8f8b24c6b26b458376b7f421856f5
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService.meta
new file mode 100644
index 000000000..859c733b7
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: bde689f5af9f3174983a61c3bc9a1cee
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/AssemblyInfo.cs b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/AssemblyInfo.cs
new file mode 100644
index 000000000..211928fad
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/AssemblyInfo.cs
@@ -0,0 +1,10 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See LICENSE in the project root for license information.
+
+using System.Reflection;
+
+[assembly: AssemblyVersion("2.4.0.0")]
+[assembly: AssemblyFileVersion("2.4.0.0")]
+
+[assembly: AssemblyProduct("Microsoft® Mixed Reality Toolkit Extensions")]
+[assembly: AssemblyCopyright("Copyright © Microsoft Corporation")]
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/AssemblyInfo.cs.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/AssemblyInfo.cs.meta
new file mode 100644
index 000000000..39df4cfc2
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/AssemblyInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6f091e100aa062247a8e111d5ee0dff0
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Assets.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Assets.meta
new file mode 100644
index 000000000..1e05a86c8
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Assets.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 53b9adb75463ba3489e8c98a9755e444
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Assets/CameraFaderMaterial.mat b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Assets/CameraFaderMaterial.mat
new file mode 100644
index 000000000..987869b1b
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Assets/CameraFaderMaterial.mat
@@ -0,0 +1,98 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: CameraFaderMaterial
+ m_Shader: {fileID: 211, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords: _ALPHABLEND_ON
+ m_LightmapFlags: 0
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: 3000
+ stringTagMap:
+ RenderType: Transparent
+ disabledShaderPasses:
+ - ALWAYS
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BlendOp: 0
+ - _BumpScale: 1
+ - _CameraFadingEnabled: 0
+ - _CameraFarFadeDistance: 2
+ - _CameraNearFadeDistance: 1
+ - _ColorMode: 0
+ - _Cull: 2
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DistortionBlend: 0.5
+ - _DistortionEnabled: 0
+ - _DistortionStrength: 1
+ - _DistortionStrengthScaled: 0
+ - _DstBlend: 10
+ - _EmissionEnabled: 0
+ - _FlipbookMode: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _LightingEnabled: 0
+ - _Metallic: 0
+ - _Mode: 2
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SoftParticlesEnabled: 0
+ - _SoftParticlesFarFadeDistance: 1
+ - _SoftParticlesNearFadeDistance: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 5
+ - _UVSec: 0
+ - _ZWrite: 0
+ m_Colors:
+ - _CameraFadeParams: {r: 0, g: Infinity, b: 0, a: 0}
+ - _Color: {r: 0, g: 0, b: 0, a: 1}
+ - _ColorAddSubDiff: {r: 0, g: 0, b: 0, a: 0}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ - _SoftParticleFadeParams: {r: 0, g: 0, b: 0, a: 0}
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Assets/CameraFaderMaterial.mat.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Assets/CameraFaderMaterial.mat.meta
new file mode 100644
index 000000000..e79d2c1c9
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Assets/CameraFaderMaterial.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 625ee7fe9fc9cb549b4f5ee443687d00
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/CameraFaderQuad.cs b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/CameraFaderQuad.cs
new file mode 100644
index 000000000..efbd17b7a
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/CameraFaderQuad.cs
@@ -0,0 +1,241 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See LICENSE in the project root for license information.
+
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Unity.Profiling;
+using UnityEngine;
+
+namespace Microsoft.MixedReality.Toolkit.Extensions.SceneTransitions
+{
+ ///
+ /// Quad-based implementation if ICameraFader. Instantiates quads in front of cameras to achieve fade out / in effect.
+ ///
+ public class CameraFaderQuad : ICameraFader
+ {
+ const string QuadMaterialShaderName = "Particles/Standard Unlit";
+ const string QuadMaterialColorName = "_Color";
+
+ ///
+ /// Simple struct for keeping track of quad properties
+ ///
+ private struct Quad
+ {
+ public Renderer Renderer;
+ // Eventually we want to be able to have different quads use different colors
+ // Using property blocks now keeps our options open
+ public MaterialPropertyBlock PropertyBlock;
+ }
+
+ ///
+ public CameraFaderState State { get; private set; }
+
+ private Dictionary quads = new Dictionary();
+ private Color fadeOutColor;
+ private Color fadeInColor;
+ private Color currentColor;
+ private Material quadMaterial;
+ private Material quadMaterialTemplate;
+
+ ///
+ public void Initialize(SceneTransitionServiceProfile profile)
+ {
+ // If the profile includes a camera fader material, use that
+ quadMaterialTemplate = profile.CameraFaderMaterial;
+ }
+
+ private static readonly ProfilerMarker FadeOutAsyncPerfMarker = new ProfilerMarker("[MRTK] CameraFaderQuad.FadeOutAsync");
+
+ ///
+ public async Task FadeOutAsync(float fadeOutTime, Color color, IEnumerable targets)
+ {
+ using (FadeOutAsyncPerfMarker.Auto())
+ {
+ switch (State)
+ {
+ case CameraFaderState.Clear:
+ break;
+
+ default:
+ Debug.LogWarning("Can't fade out in state " + State + " - not proceeding.");
+ return;
+ }
+
+ State = CameraFaderState.FadingOut;
+
+ fadeOutColor = color;
+ fadeInColor = fadeOutColor;
+ fadeInColor.a = 0;
+
+ if (fadeOutColor.a < 1)
+ {
+ Debug.LogWarning("Target color is not fully opaque.");
+ }
+
+ // Create our material
+ if (quadMaterial == null)
+ {
+ try
+ {
+ if (quadMaterialTemplate != null)
+ { // If we have a template, use the template
+ quadMaterial = new Material(quadMaterialTemplate);
+ }
+ else
+ { // Otherwise, create a material from scratch
+ // These keyword variants may not be available depending on what materials were included in the build
+ // If quad material does not display correctly, try setting the profile's CameraFaderMaterial with a template material
+ quadMaterial = new Material(Shader.Find(QuadMaterialShaderName));
+ // Set to fade
+ quadMaterial.SetInt("_Mode", 2);
+ quadMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
+ quadMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
+ quadMaterial.SetInt("_ZWrite", 0);
+ quadMaterial.DisableKeyword("_ALPHATEST_ON");
+ quadMaterial.EnableKeyword("_ALPHABLEND_ON");
+ quadMaterial.DisableKeyword("_ALPHAPREMULTIPLY_ON");
+ quadMaterial.renderQueue = 3000;
+
+ }
+ }
+ catch (Exception e)
+ {
+ Debug.LogError("Error when trying to create quad material in CameraFaderQuad");
+ Debug.LogException(e);
+ return;
+ }
+ }
+
+ quadMaterial.enableInstancing = true;
+ quadMaterial.SetColor(QuadMaterialColorName, currentColor);
+
+ // Create our quads
+ foreach (Camera camera in targets)
+ {
+ // Can't target the same camera twice
+ if (quads.ContainsKey(camera))
+ continue;
+
+ Quad quad = new Quad();
+ quad.PropertyBlock = new MaterialPropertyBlock();
+ quad.Renderer = GameObject.CreatePrimitive(PrimitiveType.Quad).GetComponent();
+ quad.Renderer.sharedMaterial = quadMaterial;
+ // Parent the quad under the camera
+ quad.Renderer.transform.parent = camera.transform;
+ quad.Renderer.transform.localScale = camera.orthographic ? Vector3.one * camera.orthographicSize : Vector3.one * camera.fieldOfView;
+ quad.Renderer.transform.localPosition = Vector3.forward * camera.nearClipPlane * 1.01f;
+ quad.Renderer.transform.localRotation = Quaternion.identity;
+
+ // Set the quad's layer to something the camera sees
+ for (int layer = 0; layer < 32; layer++)
+ {
+ if (camera.cullingMask == (camera.cullingMask | (1 << layer)))
+ {
+ quad.Renderer.gameObject.layer = layer;
+ break;
+ }
+ }
+
+ quads.Add(camera, quad);
+ }
+
+ // Perform our fade
+ float fadeAmount = 0;
+ while (fadeAmount < 1)
+ {
+ fadeAmount += Time.unscaledDeltaTime;
+ currentColor = Color.Lerp(fadeInColor, fadeOutColor, fadeAmount);
+
+ foreach (Quad quad in quads.Values)
+ {
+ // Must have been destroyed - just continue
+ if (quad.Renderer == null)
+ continue;
+
+ quad.PropertyBlock.SetColor(QuadMaterialColorName, currentColor);
+ quad.Renderer.SetPropertyBlock(quad.PropertyBlock);
+ }
+
+ await Task.Yield();
+ }
+
+ await Task.Yield();
+
+ State = CameraFaderState.Opaque;
+ }
+ }
+
+ private static readonly ProfilerMarker FadeInAsyncPerfMarker = new ProfilerMarker("[MRTK] CameraFaderQuad.FadeInAsync");
+
+ ///
+ public async Task FadeInAsync(float fadeInTime)
+ {
+ using (FadeInAsyncPerfMarker.Auto())
+ {
+ if (quads.Count == 0)
+ {
+ Debug.LogError("No camera targets found - are you trying to fade in before you've faded out?");
+ return;
+ }
+
+ switch (State)
+ {
+ case CameraFaderState.Opaque:
+ break;
+
+ default:
+ Debug.LogWarning("Can't fade in in state " + State + " - not proceeding.");
+ break;
+ }
+
+ State = CameraFaderState.FadingIn;
+
+ // Perform our fade
+ float fadeAmount = 0;
+ while (fadeAmount < 1)
+ {
+ fadeAmount += Time.unscaledDeltaTime;
+ currentColor = Color.Lerp(fadeOutColor, fadeInColor, fadeAmount);
+
+ foreach (Quad quad in quads.Values)
+ {
+ // Must have been destroyed - just continue
+ if (quad.Renderer == null)
+ continue;
+
+ quad.PropertyBlock.SetColor(QuadMaterialColorName, currentColor);
+ quad.Renderer.SetPropertyBlock(quad.PropertyBlock);
+ }
+
+ await Task.Yield();
+ }
+
+ await Task.Yield();
+
+ DestroyQuads();
+
+ State = CameraFaderState.Clear;
+ }
+ }
+
+ ///
+ public void OnDestroy()
+ {
+ DestroyQuads();
+ }
+
+ private void DestroyQuads()
+ {
+ foreach (Quad quad in quads.Values)
+ {
+ if (quad.Renderer != null)
+ {
+ GameObjectExtensions.DestroyGameObject(quad.Renderer.gameObject);
+ }
+ }
+
+ quads.Clear();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/CameraFaderQuad.cs.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/CameraFaderQuad.cs.meta
new file mode 100644
index 000000000..5de770d0d
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/CameraFaderQuad.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 75d5d471fafff614996cd5671e45477b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Definitions.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Definitions.meta
new file mode 100644
index 000000000..961dac5bf
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Definitions.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c0bd2180d666be74fafeef1311e06446
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Definitions/CameraFaderState.cs b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Definitions/CameraFaderState.cs
new file mode 100644
index 000000000..ef3196ece
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Definitions/CameraFaderState.cs
@@ -0,0 +1,13 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See LICENSE in the project root for license information.
+
+namespace Microsoft.MixedReality.Toolkit.Extensions.SceneTransitions
+{
+ public enum CameraFaderState
+ {
+ Clear, // No fade active
+ FadingIn,
+ Opaque, // Fade has completed, color covers entire screen
+ FadingOut,
+ }
+}
\ No newline at end of file
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Definitions/CameraFaderState.cs.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Definitions/CameraFaderState.cs.meta
new file mode 100644
index 000000000..1de3c7ef3
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Definitions/CameraFaderState.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9848473e60c547a4fa51c1126e223a16
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Definitions/CameraFaderTargets.cs b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Definitions/CameraFaderTargets.cs
new file mode 100644
index 000000000..e329792e8
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Definitions/CameraFaderTargets.cs
@@ -0,0 +1,13 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See LICENSE in the project root for license information.
+
+namespace Microsoft.MixedReality.Toolkit.Extensions.SceneTransitions
+{
+ public enum CameraFaderTargets
+ {
+ Main, // Only target the main camera
+ UI, // Only target UI cameras (cameras that are used by canvases)
+ All, // Target ALL cameras in the scene
+ Custom, // Target a custom set of cameras provided by user
+ }
+}
\ No newline at end of file
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Definitions/CameraFaderTargets.cs.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Definitions/CameraFaderTargets.cs.meta
new file mode 100644
index 000000000..9a51cfdca
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Definitions/CameraFaderTargets.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 797cd6e206b68844ba8c2f9038b7d7a2
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Interfaces.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Interfaces.meta
new file mode 100644
index 000000000..a80243d92
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Interfaces.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 060289a74cda60043b5d4ed9ffcb4f83
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Interfaces/ICameraFader.cs b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Interfaces/ICameraFader.cs
new file mode 100644
index 000000000..e3a678eaf
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Interfaces/ICameraFader.cs
@@ -0,0 +1,43 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See LICENSE in the project root for license information.
+
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using UnityEngine;
+
+namespace Microsoft.MixedReality.Toolkit.Extensions.SceneTransitions
+{
+ ///
+ /// Basic interface for fading in / out a color on a camera.
+ ///
+ public interface ICameraFader
+ {
+ CameraFaderState State { get; }
+
+ ///
+ /// Initializes the camera fader class with a transition profile.
+ ///
+ /// The scene transition service profile.
+ void Initialize(SceneTransitionServiceProfile profile);
+
+ ///
+ /// Applies a fade-out effect over time.
+ ///
+ /// The duration of the fade
+ /// The color of the fade
+ /// Which cameras will receive the effect
+ Task FadeOutAsync(float fadeOutTime, Color color, IEnumerable targets);
+
+ ///
+ /// Applies a fade-in effect over time. Must be called after FadeOutAsync has completed.
+ ///
+ /// The duration of the fade
+ Task FadeInAsync(float fadeInTime);
+
+ ///
+ /// Used to destroy any assets created.
+ /// May be called in middle of a transition.
+ ///
+ void OnDestroy();
+ }
+}
\ No newline at end of file
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Interfaces/ICameraFader.cs.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Interfaces/ICameraFader.cs.meta
new file mode 100644
index 000000000..248e43ff8
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Interfaces/ICameraFader.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: be3fdc3e05095ee4d8bb096412a697d8
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Interfaces/ISceneTransitionService.cs b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Interfaces/ISceneTransitionService.cs
new file mode 100644
index 000000000..d64898855
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Interfaces/ISceneTransitionService.cs
@@ -0,0 +1,137 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See LICENSE in the project root for license information.
+
+using Microsoft.MixedReality.Toolkit.UI;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using UnityEngine;
+
+namespace Microsoft.MixedReality.Toolkit.Extensions.SceneTransitions
+{
+ public interface ISceneTransitionService : IMixedRealityExtensionService
+ {
+ ///
+ /// Called when transition starts.
+ /// This is called at the beginning of a transition, not at the beginning of a scene load.
+ /// For scene load events, we recommend using IMixedRealitySceneSystem.
+ ///
+ Action OnTransitionStarted { get; set; }
+
+ ///
+ /// Called when transition ends.
+ /// This is called at the end of a transition, not at the end of a scene load.
+ /// For scene load events, we recommend using IMixedRealitySceneSystem.
+ ///
+ Action OnTransitionCompleted { get; set; }
+
+ ///
+ /// Whether to use a fade color during transitions.
+ ///
+ bool UseFadeColor { get; set; }
+
+ ///
+ /// The color to use when fading out.
+ ///
+ Color FadeColor { get; set; }
+
+ ///
+ /// The default time in seconds for fade in to complete.
+ ///
+ float FadeInTime { get; set; }
+
+ ///
+ /// The default time in seconds for fade out to complete.
+ ///
+ float FadeOutTime { get; set; }
+
+ ///
+ /// Which cameras to target when fading.
+ ///
+ CameraFaderTargets FadeTargets { get; set; }
+
+ ///
+ /// True when a scene transition is in progress.
+ ///
+ bool TransitionInProgress { get; }
+
+ ///
+ /// From 0 to 1
+ ///
+ float TransitionProgress { get; }
+
+ ///
+ /// Fades out, enables progress indicator, execute scene operations in order, disables progress indicator, fades back in
+ ///
+ /// A set of tasks from the Scene System.
+ /// Overrides the default FadeOutTIme value.
+ /// Overrides the default FadeInTime value.
+ /// If null, default progress indicator prefab will be used (or none if default is disabled in profile)
+ Task DoSceneTransition(IEnumerable> sceneOperations, float fadeOutTime, float fadeInTime, IProgressIndicator progressIndicator = null);
+
+ ///
+ /// Fades out, enables progress indicator, execute scene operations in order, disables progress indicator, fades back in
+ ///
+ /// A set of tasks from the Scene System.
+ /// If null, default progress indicator prefab will be used (or none if default is disabled in profile)
+ Task DoSceneTransition(IEnumerable> sceneOperations, IProgressIndicator progressIndicator = null);
+
+ ///
+ /// Fades out, enables progress indicator, executes scene op 1, executes scene op 2, disables progress indicator, fades back in
+ ///
+ Task DoSceneTransition(Func sceneOp1, Func sceneOp2, IProgressIndicator progressIndicator = null);
+
+ ///
+ /// Fades out, enables progress indicator, execute scene operation, disables progress indicator, fades back in
+ ///
+ /// A set of tasks from the Scene System.
+ /// If null, default progress indicator prefab will be used (or none if default is disabled in profile)
+ Task DoSceneTransition(Func sceneOperation, IProgressIndicator progressIndicator = null);
+
+ ///
+ /// If FadeTargets is set to custom, you will need to provide a custom set of cameras for fading using this function PRIOR to calling DoSceneTransition.
+ ///
+ void SetCustomFadeTargetCameras(IEnumerable customFadeTargetCameras);
+
+ ///
+ /// Fades target cameras out to color. Can be used independently of scene transitions provided no transition is taking place. Uses default FadeOutTime.
+ ///
+ Task FadeOut();
+
+ ///
+ /// Fades target cameras in. Instant fade-out will occur if fade state is not opaque. Can be used independently of scene transitions provided no transition is taking place. Uses default FadeInTime.
+ ///
+ Task FadeIn();
+
+ ///
+ /// Fades target cameras out to color. Can be used independently of scene transitions provided no transition is taking place.
+ ///
+ Task FadeOut(float fadeOutTime);
+
+ ///
+ /// Fades target cameras in. Instant fade-out will occur if fade state is not opaque. Can be used independently of scene transitions provided no transition is taking place.
+ ///
+ Task FadeIn(float fadeInTime);
+
+ ///
+ /// Instantiates the default progress indicator and returns its main transform. Can be used independently of scene transitions provided no transition is taking place.
+ ///
+ Transform ShowDefaultProgressIndicator();
+
+ ///
+ /// Hides the default progress indicator. Task completes when hide animation is done. Can be used independently of scene transitions provided no transition is taking place.
+ ///
+ Task HideProgressIndicator();
+
+ ///
+ /// Sets progress to value from 0-1. If no progress indicator exists, has no effect.
+ ///
+ void SetProgressValue(float progress);
+
+ ///
+ /// Sets the message on displayed progress indicator. If no progress indicator exists, has no effect.
+ ///
+ void SetProgressMessage(string message);
+ }
+}
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Interfaces/ISceneTransitionService.cs.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Interfaces/ISceneTransitionService.cs.meta
new file mode 100644
index 000000000..ab9a311d3
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Interfaces/ISceneTransitionService.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 283659120cc67d4498dd74cf6592671b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/LoadContentScene.cs b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/LoadContentScene.cs
new file mode 100644
index 000000000..f066fca95
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/LoadContentScene.cs
@@ -0,0 +1,51 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+using Microsoft.MixedReality.Toolkit.SceneSystem;
+using Unity.Profiling;
+using UnityEngine;
+using UnityEngine.SceneManagement;
+
+namespace Microsoft.MixedReality.Toolkit.Extensions.SceneTransitions
+{
+ ///
+ /// Utility class to load scenes through MRTK Scene System using a scene transition.
+ /// Otherwise, it uses Scene System's LoadContent()
+ ///
+ [AddComponentMenu("Scripts/MRTK/Extensions/LoadContentScene")]
+ public class LoadContentScene : MonoBehaviour
+ {
+ [SerializeField]
+ private LoadSceneMode loadSceneMode = LoadSceneMode.Single;
+ [SerializeField]
+ private SceneInfo contentScene = SceneInfo.Empty;
+ [SerializeField]
+ private bool loadOnStartup = false;
+
+ private void Start()
+ {
+ if (loadOnStartup)
+ {
+ LoadContent();
+ }
+ }
+
+ private static readonly ProfilerMarker LoadContentPerfMarker = new ProfilerMarker("[MRTK] LoadContentScene.LoadContent");
+
+ ///
+ /// Load a scene with contentScene.Name
+ ///
+ public void LoadContent()
+ {
+ using (LoadContentPerfMarker.Auto())
+ {
+ ISceneTransitionService transitions = MixedRealityToolkit.Instance.GetService();
+ if (transitions.TransitionInProgress)
+ {
+ return;
+ }
+ transitions.DoSceneTransition(() => CoreServices.SceneSystem.LoadContent(contentScene.Name, loadSceneMode));
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/LoadContentScene.cs.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/LoadContentScene.cs.meta
new file mode 100644
index 000000000..a6b8e3537
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/LoadContentScene.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ae67cd8a02f7ce94e9565614536df803
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Microsoft.MixedReality.Toolkit.Extensions.SceneTransitionService.asmdef b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Microsoft.MixedReality.Toolkit.Extensions.SceneTransitionService.asmdef
new file mode 100644
index 000000000..0b80fa3b8
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Microsoft.MixedReality.Toolkit.Extensions.SceneTransitionService.asmdef
@@ -0,0 +1,15 @@
+{
+ "name": "Microsoft.MixedReality.Toolkit.Extensions.SceneTransitionService",
+ "references": [
+ "Microsoft.MixedReality.Toolkit",
+ "Microsoft.MixedReality.Toolkit.SDK"
+ ],
+ "optionalUnityReferences": [],
+ "includePlatforms": [],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": false,
+ "precompiledReferences": [],
+ "autoReferenced": true,
+ "defineConstraints": []
+}
\ No newline at end of file
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Microsoft.MixedReality.Toolkit.Extensions.SceneTransitionService.asmdef.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Microsoft.MixedReality.Toolkit.Extensions.SceneTransitionService.asmdef.meta
new file mode 100644
index 000000000..c943f5ae4
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Microsoft.MixedReality.Toolkit.Extensions.SceneTransitionService.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: e2b0b6c0ecf327644894f4e4edaa96f8
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Profiles.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Profiles.meta
new file mode 100644
index 000000000..2ab800df0
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Profiles.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7212007ca6ecafd4797e4add9a3cf8a2
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Profiles/DefaultSceneTransitionServiceProfile.asset b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Profiles/DefaultSceneTransitionServiceProfile.asset
new file mode 100644
index 000000000..ca9622e4d
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Profiles/DefaultSceneTransitionServiceProfile.asset
@@ -0,0 +1,27 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 8d8965cb7573e04429e22a5a476b4703, type: 3}
+ m_Name: DefaultSceneTransitionServiceProfile
+ m_EditorClassIdentifier:
+ isCustomProfile: 0
+ useDefaultProgressIndicator: 1
+ defaultProgressIndicatorPrefab: {fileID: 1993071269674472, guid: 57d2436112e7d424da7e9a8e41c608dc,
+ type: 3}
+ useFadeColor: 1
+ fadeColor: {r: 0, g: 0, b: 0, a: 1}
+ fadeOutTime: 1
+ fadeInTime: 0.5
+ fadeTargets: 0
+ cameraFaderType:
+ reference: Microsoft.MixedReality.Toolkit.Extensions.SceneTransitions.CameraFaderQuad,
+ Microsoft.MixedReality.Toolkit.Extensions.SceneTransitionService
+ cameraFaderMaterial: {fileID: 2100000, guid: 625ee7fe9fc9cb549b4f5ee443687d00, type: 2}
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Profiles/DefaultSceneTransitionServiceProfile.asset.meta b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Profiles/DefaultSceneTransitionServiceProfile.asset.meta
new file mode 100644
index 000000000..3ed2e789d
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/Profiles/DefaultSceneTransitionServiceProfile.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 45c20fade71a3ec418860b757ff5a5ce
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/SceneTransitionService.cs b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/SceneTransitionService.cs
new file mode 100644
index 000000000..edf6c6955
--- /dev/null
+++ b/Frontend/VIAProMa/Assets/MRTK/Extensions/SceneTransitionService/SceneTransitionService.cs
@@ -0,0 +1,514 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See LICENSE in the project root for license information.
+
+using Microsoft.MixedReality.Toolkit.UI;
+using Microsoft.MixedReality.Toolkit.Utilities;
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Unity.Profiling;
+using UnityEngine;
+
+namespace Microsoft.MixedReality.Toolkit.Extensions.SceneTransitions
+{
+ [MixedRealityExtensionService(
+ SupportedPlatforms.WindowsStandalone | SupportedPlatforms.MacStandalone |
+ SupportedPlatforms.LinuxStandalone | SupportedPlatforms.WindowsUniversal,
+ "Scene Transition Service",
+ "SceneTransitionService/Profiles/DefaultSceneTransitionServiceProfile.asset",
+ "MixedRealityToolkit.Extensions",
+ true)]
+ [HelpURL("https://microsoft.github.io/MixedRealityToolkit-Unity/Documentation/Extensions/SceneTransitionService/SceneTransitionServiceOverview.html")]
+ public class SceneTransitionService : BaseExtensionService, ISceneTransitionService, IMixedRealityExtensionService
+ {
+ ///
+ /// Constructor.
+ ///
+ /// The instance that loaded the service.
+ /// Friendly name of the service.
+ /// Service priority. Used to determine order of instantiation.
+ /// The service's configuration profile.
+ [Obsolete("This constructor is obsolete (registrar parameter is no longer required) and will be removed in a future version of the Microsoft Mixed Reality Toolkit.")]
+ public SceneTransitionService(
+ IMixedRealityServiceRegistrar registrar,
+ string name,
+ uint priority,
+ BaseMixedRealityProfile profile) : this(name, priority, profile)
+ {
+ Registrar = registrar;
+ }
+
+ ///
+ /// Constructor.
+ ///
+ /// Friendly name of the service.
+ /// Service priority. Used to determine order of instantiation.
+ /// The service's configuration profile.
+ public SceneTransitionService(
+ string name,
+ uint priority,
+ BaseMixedRealityProfile profile) : base(name, priority, profile)
+ {
+ sceneTransitionServiceProfile = profile as SceneTransitionServiceProfile;
+ }
+
+ private const float maxFadeOutTime = 30;
+ private const float maxFadeInTime = 30;
+
+ ///
+ public bool UseFadeColor { get; set; }
+
+ ///
+ public Color FadeColor { get; set; }
+
+ ///
+ public float FadeInTime { get; set; }
+
+ ///
+ public float FadeOutTime { get; set; }
+
+ ///
+ public CameraFaderTargets FadeTargets { get; set; }
+
+ ///
+ public Action OnTransitionStarted { get; set; }
+
+ ///
+ public Action OnTransitionCompleted { get; set; }
+
+ ///
+ public bool TransitionInProgress { get; set; }
+
+ ///
+ public float TransitionProgress { get; set; }
+
+ private SceneTransitionServiceProfile sceneTransitionServiceProfile;
+ private GameObject progressIndicatorObject;
+ private IProgressIndicator defaultProgressIndicator;
+ private ICameraFader cameraFader;
+ private List customFadeTargetCameras = new List();
+
+ #region public methods
+
+ ///
+ public override void Initialize()
+ {
+ UseFadeColor = sceneTransitionServiceProfile.UseFadeColor;
+ FadeColor = sceneTransitionServiceProfile.FadeColor;
+ FadeInTime = sceneTransitionServiceProfile.FadeInTime;
+ FadeOutTime = sceneTransitionServiceProfile.FadeOutTime;
+ FadeTargets = sceneTransitionServiceProfile.FadeTargets;
+ }
+
+ ///
+ public override void Enable()
+ {
+ if (!MixedRealityToolkit.IsSceneSystemEnabled)
+ {
+ Debug.LogError("This extension requires an active IMixedRealitySceneService.");
+ }
+ }
+
+ ///
+ public override void Destroy()
+ {
+ CleanUpDefaultProgressIndicator();
+ CleanUpCameraFader();
+ }
+
+ #endregion
+
+ #region ISceneTransitionService implementation
+
+ ///
+ public async Task DoSceneTransition(Func sceneOperation, IProgressIndicator progressIndicator = null)
+ {
+ await DoSceneTransition(new Func[] { sceneOperation }, FadeOutTime, FadeInTime, progressIndicator);
+ }
+
+ ///
+ public async Task DoSceneTransition(Func sceneOp1, Func sceneOp2, IProgressIndicator progressIndicator = null)
+ {
+ await DoSceneTransition(new Func[] { sceneOp1, sceneOp2 }, FadeOutTime, FadeInTime, progressIndicator);
+ }
+
+ ///
+ public async Task DoSceneTransition(IEnumerable> sceneOperations, IProgressIndicator progressIndicator = null)
+ {
+ await DoSceneTransition(sceneOperations, FadeOutTime, FadeInTime, progressIndicator);
+ }
+
+ private static readonly ProfilerMarker DoSceneTransitionPerfMarker = new ProfilerMarker("[MRTK] SceneTransitionService.DoSceneTransition");
+
+ ///
+ public async Task DoSceneTransition(IEnumerable> sceneOperations, float fadeOutTime, float fadeInTime, IProgressIndicator progressIndicator = null)
+ {
+ using (DoSceneTransitionPerfMarker.Auto())
+ {
+ fadeOutTime = Mathf.Clamp(fadeOutTime, 0, maxFadeOutTime);
+ fadeInTime = Mathf.Clamp(fadeInTime, 0, maxFadeInTime);
+
+ if (TransitionInProgress)
+ {
+ throw new Exception("Attempting to do a transition while one is already in progress.");
+ }
+
+ #region Transition begin
+
+ TransitionInProgress = true;
+ OnTransitionStarted?.Invoke();
+
+ if (progressIndicator == null && sceneTransitionServiceProfile.UseDefaultProgressIndicator)
+ { // If we haven't been given a progress indicator, and we're supposed to use a default
+ // find / create the default progress indicator
+ CreateDefaultProgressIndicator();
+ progressIndicator = defaultProgressIndicator;
+ }
+
+ if (UseFadeColor)
+ {
+ await FadeOut(fadeOutTime);
+ }
+
+ if (progressIndicator != null)
+ {
+ await progressIndicator.OpenAsync();
+ }
+
+ #endregion
+
+ #region Task execution
+
+ // Make sure we're on the main thread
+
+ foreach (Func sceneOperation in sceneOperations)
+ {
+ await sceneOperation();
+ }
+
+ #endregion
+
+ #region Transition end
+
+ // If we used a progress indicator, close it
+ if (progressIndicator != null)
+ {
+ await progressIndicator.CloseAsync();
+ }
+
+
+ if (UseFadeColor)
+ {
+ await FadeIn(fadeInTime);
+ }
+
+ TransitionInProgress = false;
+ OnTransitionCompleted?.Invoke();
+
+ #endregion
+ }
+ }
+
+ ///
+ public void SetCustomFadeTargetCameras(IEnumerable customFadeTargetCameras)
+ {
+ this.customFadeTargetCameras.Clear();
+ this.customFadeTargetCameras.AddRange(customFadeTargetCameras);
+ }
+
+ ///
+ public async Task FadeOut()
+ {
+ await FadeOut(FadeOutTime);
+ }
+
+ ///
+ public async Task FadeIn()
+ {
+ await FadeIn(FadeInTime);
+ }
+
+ private static readonly ProfilerMarker FadeOutPerfMarker = new ProfilerMarker("[MRTK] SceneTransitionService.FadeOut");
+
+ ///
+ public async Task FadeOut(float fadeOutTime)
+ {
+ using (FadeOutPerfMarker.Auto())
+ {
+ CreateCameraFader();
+
+ switch (cameraFader.State)
+ {
+ case CameraFaderState.Clear:
+ // Ready to go!
+ break;
+
+ case CameraFaderState.FadingOut:
+ Debug.LogWarning("Already fading out. Taking no action.");
+ break;
+
+ case CameraFaderState.Opaque:
+ Debug.LogWarning("Already faded out. Taking no action.");
+ break;
+
+ case CameraFaderState.FadingIn:
+ while (cameraFader.State == CameraFaderState.FadingIn)
+ { // Wait until we're done fading in to fade back in
+ await Task.Yield();
+ }
+ break;
+ }
+
+ await cameraFader.FadeOutAsync(fadeOutTime, FadeColor, GatherFadeTargetCameras());
+ }
+ }
+
+ private static readonly ProfilerMarker FadeInPerfMarker = new ProfilerMarker("[MRTK] SceneTransitionService.FadeIn");
+
+ ///
+ public async Task FadeIn(float fadeInTime)
+ {
+ using (FadeInPerfMarker.Auto())
+ {
+ CreateCameraFader();
+
+ switch (cameraFader.State)
+ {
+ case CameraFaderState.Opaque:
+ // Ready to go!
+ break;
+
+ case CameraFaderState.FadingOut:
+ while (cameraFader.State == CameraFaderState.FadingOut)
+ { // Wait until we're done fading out to fade back in
+ await Task.Yield();
+ }
+ break;
+
+ case CameraFaderState.FadingIn:
+ Debug.LogWarning("Already fading in. Taking no action.");
+ return;
+
+ case CameraFaderState.Clear:
+ // If we haven't faded out yet, do so now - make it instantaneous
+ await cameraFader.FadeOutAsync(0, FadeColor, GatherFadeTargetCameras());
+ break;
+ }
+
+ await cameraFader.FadeInAsync(fadeInTime);
+ }
+ }
+
+ private static readonly ProfilerMarker ShowDefaultProgressIndicatorPerfMarker = new ProfilerMarker("[MRTK] SceneTransitionService.ShowDefaultProgressIndicator");
+
+ ///
+ public Transform ShowDefaultProgressIndicator()
+ {
+ using (ShowDefaultProgressIndicatorPerfMarker.Auto())
+ {
+ CreateDefaultProgressIndicator();
+
+ switch (defaultProgressIndicator.State)
+ {
+ case ProgressIndicatorState.Open:
+ case ProgressIndicatorState.Opening:
+ // If it's already open / opening, don't bother to open again
+ break;
+
+ case ProgressIndicatorState.Closed:
+ // Open it now - don't await result, we want to return the transform promptly
+ defaultProgressIndicator.OpenAsync();
+ break;
+
+ case ProgressIndicatorState.Closing:
+ default:
+ // Open it now - don't await result, we want to return the transform promptly
+ defaultProgressIndicator.OpenAsync();
+ break;
+ }
+
+ return defaultProgressIndicator.MainTransform;
+ }
+ }
+
+ private static readonly ProfilerMarker HideProgressIndicatorPerfMarker = new ProfilerMarker("[MRTK] SceneTransitionService.HideProgressIndicator");
+
+ ///
+ public async Task HideProgressIndicator()
+ {
+ if (TransitionInProgress)
+ {
+ Debug.LogWarning("A scene transition is already in progress. This would interrupt that transition. Taking no action.");
+ return;
+ }
+
+ if (defaultProgressIndicator == null)
+ {
+ // No need to do anything.
+ return;
+ }
+
+ using (HideProgressIndicatorPerfMarker.Auto())
+ {
+ switch (defaultProgressIndicator.State)
+ {
+ case ProgressIndicatorState.Closed:
+ // No need to do anything.
+ return;
+
+ case ProgressIndicatorState.Closing:
+ while (defaultProgressIndicator.State == ProgressIndicatorState.Closing)
+ { // Wait for progress indicator to be done closing
+ await Task.Yield();
+ }
+ return;
+
+ case ProgressIndicatorState.Open:
+ await defaultProgressIndicator.CloseAsync();
+ return;
+
+ case ProgressIndicatorState.Opening:
+ while (defaultProgressIndicator.State == ProgressIndicatorState.Opening)
+ { // Wait for it to be done opening, then close it
+ await Task.Yield();
+ }
+ await defaultProgressIndicator.CloseAsync();
+ return;
+ }
+ }
+ }
+
+ ///
+ public void SetProgressMessage(string message)
+ {
+ if (defaultProgressIndicator == null)
+ {
+ Debug.LogWarning("Progress Indicator has not been launched. Taking no action.");
+ }
+
+ defaultProgressIndicator.Message = message;
+ }
+
+ ///
+ public void SetProgressValue(float progress)
+ {
+ if (defaultProgressIndicator == null)
+ {
+ Debug.LogWarning("Progress Indicator has not been launched. Taking no action.");
+ }
+
+ defaultProgressIndicator.Progress = progress;
+ }
+
+ #endregion
+
+ #region private methods
+
+ private static readonly ProfilerMarker GatherFadeTargetCamerasPerfMarker = new ProfilerMarker("[MRTK] SceneTransitionService.GatherFrameTargetCameras");
+
+ private List GatherFadeTargetCameras()
+ {
+ using (GatherFadeTargetCamerasPerfMarker.Auto())
+ {
+ List targetCameras = new List();
+
+ switch (FadeTargets)
+ {
+ case CameraFaderTargets.All:
+ // Add every single camera in all scenes
+ targetCameras.AddRange(GameObject.FindObjectsOfType());
+ break;
+
+ case CameraFaderTargets.Main:
+ targetCameras.Add(CameraCache.Main);
+ break;
+
+ case CameraFaderTargets.UI:
+ foreach (Canvas canvas in GameObject.FindObjectsOfType