diff --git a/.gitignore b/.gitignore index 940794e..595a0b9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,80 @@ +# Unity3D Autogenerated VS/MD solution and project files +/**/Unity/**/UWP +/**/Unity/**/Unprocessed +/**/Unity/Tools/ + +# Unity3D Player Binaries +Unity*.dll +WinRTLegacy.dll + +# Unity3D C# Project Binaries +Assembly-CSharp*.dll + +# Unity3D Autogenerated Player files +Players/ + +# Unity3D Exported Data files +Data/ + +# UWP Exported Binaries +/**/UWP/**/*.dll +/**/UWP/**/*.exe + +# HoloLens Binaries +SharingClient.dll +PlaneFinding.dll + +# Unity3D Generated File On Crash Reports +sysinfo.txt +Lib/*.suo + +# NuGet Files +project.lock.json + +# Built application files +/*/build/ + +# Crashlytics configuations +com_crashlytics_export_strings.xml + +# Local configuration file (sdk path, etc) +local.properties + +# Gradle generated files +.gradle/ + +# Signing files +.signing/ + +# User-specific configurations +.idea/libraries/ +.idea/workspace.xml +.idea/tasks.xml +.idea/.name +.idea/compiler.xml +.idea/copyright/profiles_settings.xml +.idea/encodings.xml +.idea/misc.xml +.idea/modules.xml +.idea/scopes/scope_settings.xml +.idea/vcs.xml +*.iml + +# OS-specific files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + + + + + ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # User-specific files *.suo @@ -17,17 +90,30 @@ [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/ +[Rr]ef/ x64/ x86/ +build/ bld/ [Bb]in/ [Oo]bj/ -[Ll]og/ -# Visual Studio 2015 cache/options directory +# Packaging libraries +[Pp]ackaging/Builds/* +[Pp]ackaging/Packages/* + +# Packaging content OK +![Pp]ackaging/Content/** + +# Always get Unity root tools +![U]nity/** + +# Always ignore Unity Library and Temp folders +**/[Ll]ibrary/* +**/[Tt]emp/ + +# Visual Studo 2015 cache/options directory .vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ # MSTest test Results [Tt]est[Rr]esult*/ @@ -42,18 +128,10 @@ TestResult.xml [Rr]eleasePS/ dlldata.c -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ -**/Properties/launchSettings.json - *_i.c *_p.c *_i.h *.ilk -*.meta -*.obj *.pch *.pdb *.pgc @@ -80,18 +158,14 @@ _Chutzpah* ipch/ *.aps *.ncb -*.opendb *.opensdf *.sdf *.cachefile -*.VC.db -*.VC.VC.opendb # Visual Studio profiler *.psess *.vsp *.vspx -*.sap # TFS 2012 Local Workspace $tf/ @@ -104,7 +178,7 @@ _ReSharper*/ *.[Rr]e[Ss]harper *.DotSettings.user -# JustCode is a .NET coding add-in +# JustCode is a .NET coding addin-in .JustCode # TeamCity is a build add-in @@ -113,14 +187,9 @@ _TeamCity* # DotCover is a Code Coverage Tool *.dotCover -# Visual Studio code coverage results -*.coverage -*.coveragexml - # NCrunch _NCrunch_* .*crunch*.local.xml -nCrunchTemp_* # MightyMoose *.mm.* @@ -148,16 +217,11 @@ publish/ # Publish Web Output *.[Pp]ublish.xml *.azurePubxml -# TODO: Comment the next line if you want to checkin your web deploy settings +# TODO: Comment the next line if you want to checkin your web deploy settings # but database connection strings (with potential passwords) will be unencrypted *.pubxml *.publishproj -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - # NuGet Packages *.nupkg # The packages folder can be ignored because of Package Restore @@ -166,44 +230,30 @@ PublishScripts/ !**/packages/build/ # Uncomment if necessary however generally it will be regenerated when needed #!**/packages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets +# VSIX Packages OK +!**/VisualStudio/VSFeatureEngine/Packages/* +# Lock files +**/project.lock.json -# Microsoft Azure Build Output +# Windows Azure Build Output csx/ *.build.csdef -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files +# Windows Store app package directory AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ # Others +*.[Cc]ache ClientBin/ +[Ss]tyle[Cc]op.* ~$* *~ *.dbmdl *.dbproj.schemaview -*.jfm -*.pfx +# *.pfx // Allowing PFX because all PFX files are for samples *.publishsettings -orleans.codegen.cs - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ +node_modules/ +bower_components/ # RIA/Silverlight projects Generated_Code/ @@ -219,7 +269,6 @@ UpgradeLog*.htm # SQL Server files *.mdf *.ldf -*.ndf # Business Intelligence projects *.rdl.data @@ -229,60 +278,14 @@ UpgradeLog*.htm # Microsoft Fakes FakesAssemblies/ -# GhostDoc plugin setting file -*.GhostDoc.xml - # Node.js Tools for Visual Studio .ntvs_analysis.dat -node_modules/ - -# Typescript v1 declaration files -typings/ # Visual Studio 6 build log *.plg # Visual Studio 6 workspace options file *.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# JetBrains Rider -.idea/ -*.sln.iml - -# CodeRush -.cr/ - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs +mixedreality-azure-samples.sln +mixedreality-azure-samples.csproj +mixedreality-azure-samples.Player.csproj diff --git a/LICENSE.licenseheader b/LICENSE.licenseheader new file mode 100644 index 0000000..eb185de --- /dev/null +++ b/LICENSE.licenseheader @@ -0,0 +1,37 @@ +extensions: designer.cs generated.cs +extensions: .cs .cpp .h +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. +// +// 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. +// + +extensions: .aspx .ascx +<%-- +Copyright (c) Microsoft. All rights reserved. +--%> +extensions: .vb +'Sample license text. +extensions: .xml .config .xsd + \ No newline at end of file diff --git a/README.md b/README.md index 72f1506..92e865a 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,31 @@ +# MixedReality Azure Samples -# Contributing +**MixedReality Azure Samples** is a collection of samples and reference implementations for using Azure services in simulations. Though "Mixed Reality" is mentioned throughout the project, the vast majority of resources here are not exclusive to Windows Mixed Reality devices. Each sample or reference includes a **System Requirements** section that clearly explains where the code can run. -This project welcomes contributions and suggestions. Most contributions require you to agree to a -Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us -the rights to use your contribution. For details, visit https://cla.microsoft.com. -When you submit a pull request, a CLA-bot will automatically determine whether you need to provide -a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions -provided by the bot. You will only need to do this once across all repos using our CLA. +## Organization -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). -For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or -contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. +This project is organized into 3 key areas: + +### Standalone Samples (Coming soon) +Concise projects that demonstrate a capability quickly and don't have external dependencies. These samples can be downloaded independently and tested quickly with little or no server setup. + + +### Solutions (Coming soon) +Also demonstrate a capability but require additional setup. Solutions, for example, may require deploying an Azure workload like a bot, a function, or a database. + + +### Reference Architectures ### +Are a *set of capabilities* that have all been designed to work together. For example, Speech Recognition may be used on its own but it is also designed to work with Language Understanding. + +**Modules** +- [LUIS for XR](Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS) - A powerful Natural Language replacement for voice commands. + + +## Contributing + +This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.microsoft.com. + +When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA. + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure-Examples.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure-Examples.meta new file mode 100644 index 0000000..8b6a954 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure-Examples.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 60025ef4870efbf4a9081116dec980e5 +folderAsset: yes +timeCreated: 1518194984 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure-Examples/LUIS.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure-Examples/LUIS.meta new file mode 100644 index 0000000..c82302e --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure-Examples/LUIS.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a6f7954a60840974cbd54c6553a7f2a4 +folderAsset: yes +timeCreated: 1518220169 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure-Examples/LUIS/Scenes.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure-Examples/LUIS/Scenes.meta new file mode 100644 index 0000000..4c7a1ef --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure-Examples/LUIS/Scenes.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: fdfdc99caa9e2b541940730810385761 +folderAsset: yes +timeCreated: 1518220179 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure-Examples/LUIS/Scenes/LuisTest.unity b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure-Examples/LUIS/Scenes/LuisTest.unity new file mode 100644 index 0000000..acc3c5f --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure-Examples/LUIS/Scenes/LuisTest.unity @@ -0,0 +1,1009 @@ +%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: 8 + 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} +--- !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_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 9 + m_Resolution: 2 + m_BakeResolution: 40 + m_TextureWidth: 1024 + m_TextureHeight: 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: 0 + 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 &393811213 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 393811217} + - component: {fileID: 393811216} + - component: {fileID: 393811215} + - component: {fileID: 393811214} + - component: {fileID: 393811218} + - component: {fileID: 393811219} + - component: {fileID: 393811220} + m_Layer: 0 + m_Name: Cylinder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &393811214 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 393811213} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + 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!136 &393811215 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 393811213} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &393811216 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 393811213} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &393811217 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 393811213} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -2, y: 1, z: 2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &393811218 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 393811213} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 191a39b4e52ca2042b4d6913e578660c, type: 3} + m_Name: + m_EditorClassIdentifier: + EntityName: Test Tube + EntityType: Cylinder +--- !u!114 &393811219 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 393811213} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 36a05a97b4eeab348b969b19722c8ab7, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &393811220 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 393811213} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1bcce45eed8650e41a20b77fb255c5e0, type: 3} + m_Name: + m_EditorClassIdentifier: + unspecifiedRotateAmount: 45 + unspecifiedScaleAmount: 0.25 +--- !u!1 &664368916 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 664368920} + - component: {fileID: 664368919} + - component: {fileID: 664368918} + - component: {fileID: 664368917} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &664368917 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 664368916} + m_Enabled: 1 +--- !u!124 &664368918 +Behaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 664368916} + m_Enabled: 1 +--- !u!20 &664368919 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 664368916} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + 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_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &664368920 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 664368916} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -1.82} + 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!1 &1043997299 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1043997303} + - component: {fileID: 1043997302} + - component: {fileID: 1043997301} + - component: {fileID: 1043997300} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1043997300 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1043997299} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + 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!64 &1043997301 +MeshCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1043997299} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Convex: 0 + m_InflateMesh: 0 + m_SkinWidth: 0.01 + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &1043997302 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1043997299} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1043997303 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1043997299} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: -1, z: 0} + m_LocalScale: {x: 100, y: 100, z: 100} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!1 &1082056800 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1082056802} + - component: {fileID: 1082056801} + 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 &1082056801 +Light: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1082056800} + 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_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1082056802 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1082056800} + 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: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1086835818 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1086835822} + - component: {fileID: 1086835821} + - component: {fileID: 1086835820} + - component: {fileID: 1086835819} + - component: {fileID: 1086835823} + - component: {fileID: 1086835824} + - component: {fileID: 1086835825} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1086835819 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1086835818} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + 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!65 &1086835820 +BoxCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1086835818} + 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!33 &1086835821 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1086835818} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1086835822 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1086835818} + m_LocalRotation: {x: 0.35355338, y: 0.35355338, z: -0.1464466, w: 0.8535535} + m_LocalPosition: {x: 0, y: 1, z: 4} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 45, y: 45, z: 0} +--- !u!114 &1086835823 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1086835818} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 191a39b4e52ca2042b4d6913e578660c, type: 3} + m_Name: + m_EditorClassIdentifier: + EntityName: Boxey + EntityType: Cube +--- !u!114 &1086835824 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1086835818} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 36a05a97b4eeab348b969b19722c8ab7, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1086835825 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1086835818} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1bcce45eed8650e41a20b77fb255c5e0, type: 3} + m_Name: + m_EditorClassIdentifier: + unspecifiedRotateAmount: 45 + unspecifiedScaleAmount: 0.25 +--- !u!1 &1622662001 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1622662007} + - component: {fileID: 1622662006} + - component: {fileID: 1622662005} + - component: {fileID: 1622662004} + - component: {fileID: 1622662003} + - component: {fileID: 1622662002} + - component: {fileID: 1622662008} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1622662002 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1622662001} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 36a05a97b4eeab348b969b19722c8ab7, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1622662003 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1622662001} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 191a39b4e52ca2042b4d6913e578660c, type: 3} + m_Name: + m_EditorClassIdentifier: + EntityName: George + EntityType: Cube +--- !u!23 &1622662004 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1622662001} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + 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!65 &1622662005 +BoxCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1622662001} + 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!33 &1622662006 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1622662001} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1622662007 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1622662001} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1.85, z: 2.09} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1622662008 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1622662001} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1bcce45eed8650e41a20b77fb255c5e0, type: 3} + m_Name: + m_EditorClassIdentifier: + unspecifiedRotateAmount: 45 + unspecifiedScaleAmount: 0.25 +--- !u!1 &1730099933 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1730099937} + - component: {fileID: 1730099936} + - component: {fileID: 1730099935} + - component: {fileID: 1730099934} + - component: {fileID: 1730099938} + - component: {fileID: 1730099939} + - component: {fileID: 1730099940} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1730099934 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1730099933} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + 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!135 &1730099935 +SphereCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1730099933} + 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!33 &1730099936 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1730099933} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1730099937 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1730099933} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2, y: 1, z: 2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1730099938 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1730099933} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 191a39b4e52ca2042b4d6913e578660c, type: 3} + m_Name: + m_EditorClassIdentifier: + EntityName: Bouncy Ball + EntityType: Sphere +--- !u!114 &1730099939 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1730099933} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 36a05a97b4eeab348b969b19722c8ab7, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1730099940 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1730099933} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1bcce45eed8650e41a20b77fb255c5e0, type: 3} + m_Name: + m_EditorClassIdentifier: + unspecifiedRotateAmount: 45 + unspecifiedScaleAmount: 0.25 +--- !u!1 &1764009440 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1764009443} + - component: {fileID: 1764009442} + - component: {fileID: 1764009441} + m_Layer: 0 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!102 &1764009441 +TextMesh: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1764009440} + m_Text: Hello World + m_OffsetZ: 0 + m_CharacterSize: 1 + m_LineSpacing: 1 + m_Anchor: 4 + m_Alignment: 0 + m_TabSize: 4 + m_FontSize: 50 + m_FontStyle: 0 + m_RichText: 1 + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_Color: + serializedVersion: 2 + rgba: 4294967295 +--- !u!23 &1764009442 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1764009440} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0} + 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!4 &1764009443 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1764009440} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -2, y: 6, z: 9} + m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1776187684 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1776187686} + - component: {fileID: 1776187685} + - component: {fileID: 1776187687} + - component: {fileID: 1776187688} + m_Layer: 0 + m_Name: LUIS + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1776187685 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1776187684} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9d268b595133a624f8d05847a7d3ef36, type: 3} + m_Name: + m_EditorClassIdentifier: + AppId: + AppKey: + Domain: + MinimumIntentScore: 0.5 + Verbose: 1 +--- !u!4 &1776187686 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1776187684} + 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: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1776187687 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1776187684} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 49d7cd01fd87922428af51ee39a56761, type: 3} + m_Name: + m_EditorClassIdentifier: + EnableDebugging: 1 + LuisManager: {fileID: 0} + PredictOnStart: 1 + TestUtterance: make the cube bigger +--- !u!114 &1776187688 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1776187684} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3abd7ed5b00ba0042800ddd8d0014fd3, type: 3} + m_Name: + m_EditorClassIdentifier: + autoSilenceTimeout: 20 + autoStartListening: 1 + continuousRecognition: 1 + debugOutput: {fileID: 1764009441} + initialSilenceTimeout: 5 + luisManager: {fileID: 0} + minimumConfidenceLevel: 1 + recordingTime: 10 diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure-Examples/LUIS/Scenes/LuisTest.unity.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure-Examples/LUIS/Scenes/LuisTest.unity.meta new file mode 100644 index 0000000..6732ebd --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure-Examples/LUIS/Scenes/LuisTest.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 017fcfbfe9263b1459783ab0eed8f7f4 +timeCreated: 1518220199 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure-Examples/LUIS/Scripts.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure-Examples/LUIS/Scripts.meta new file mode 100644 index 0000000..fa5fb1e --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure-Examples/LUIS/Scripts.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: e6f9b6b57836c3f4e80f354bc2c675d5 +folderAsset: yes +timeCreated: 1518568465 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure-Examples/LUIS/Scripts/GenericEntityIntentHandler.cs b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure-Examples/LUIS/Scripts/GenericEntityIntentHandler.cs new file mode 100644 index 0000000..d79075e --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure-Examples/LUIS/Scripts/GenericEntityIntentHandler.cs @@ -0,0 +1,78 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. +// +// 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. +// + +using Microsoft.Cognitive.LUIS; +using Microsoft.MR.LUIS; +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +public class GenericEntityIntentHandler : MonoBehaviour, IIntentHandler +{ + [Serializable] + public struct IntentAction + { + public string entityValueTrigger; + public List actions; + } + + public string intentName; + public string entityTypeName; + public IntentAction[] handledIntents; + + Dictionary> activateValues = new Dictionary>(); + + void Start() + { + foreach (IntentAction intentAction in handledIntents) + { + if(!activateValues.ContainsKey(intentAction.entityValueTrigger)) + activateValues.Add(intentAction.entityValueTrigger, intentAction.actions); + else + activateValues[intentAction.entityValueTrigger].AddRange(intentAction.actions); + } + } + + public bool CanHandle(string intentName) + { + return intentName.Equals(intentName); + } + + public void Handle(Intent intent, LuisMRResult result) + { + if (!result.PredictionResult.Entities.ContainsKey(entityTypeName)) + return; + + foreach (Entity entity in result.PredictionResult.Entities[entityTypeName]) + { + if (activateValues.ContainsKey(entity.Value)) + { + foreach(UnityEvent uEvent in activateValues[entity.Value]) + uEvent.Invoke(); + } + } + } +} \ No newline at end of file diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure-Examples/LUIS/Scripts/GenericEntityIntentHandler.cs.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure-Examples/LUIS/Scripts/GenericEntityIntentHandler.cs.meta new file mode 100644 index 0000000..398a5ce --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure-Examples/LUIS/Scripts/GenericEntityIntentHandler.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 483a07b36eeff064c81164cce49f3279 +timeCreated: 1518664928 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure.meta new file mode 100644 index 0000000..bc2228d --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9568e7e427cbc4244848e4698efd172a +folderAsset: yes +timeCreated: 1518194984 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/Common.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/Common.meta new file mode 100644 index 0000000..2aeae09 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/Common.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5022ba4cc73cf234da706daa44c288d0 +folderAsset: yes +timeCreated: 1518192936 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/Common/Scripts.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/Common/Scripts.meta new file mode 100644 index 0000000..de07fcb --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/Common/Scripts.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3e75a259c0673f4419257951c28a8de1 +folderAsset: yes +timeCreated: 1518192936 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/Common/Scripts/ColorMapper.cs b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/Common/Scripts/ColorMapper.cs new file mode 100644 index 0000000..fd551b2 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/Common/Scripts/ColorMapper.cs @@ -0,0 +1,723 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. +// +// 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. +// + +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Microsoft.MR +{ + /// + /// A helper class that extends Unity's class to support many more colors. + /// + static public class ColorMapper + { + #region Member Variables + static private Dictionary colorNameToHexValue = new Dictionary() + { + {"black", "#000000"}, + {"aliceblue", "#F0F8FF"}, + {"blueviolet", "#8A2BE2"}, + {"cadetblue", "#5F9EA0"}, + {"cadetblue1", "#98F5FF"}, + {"cadetblue2", "#8EE5EE"}, + {"cadetblue3", "#7AC5CD"}, + {"cadetblue4", "#53868B"}, + {"cornflowerblue", "#6495ED"}, + {"darkblue", "#00008B"}, + {"darkcyan", "#008B8B"}, + {"darkslateblue", "#483D8B"}, + {"darkturquoise", "#00CED1"}, + {"deepskyblue", "#00BFFF"}, + {"deepskyblue1", "#00BFFF"}, + {"deepskyblue2", "#00B2EE"}, + {"deepskyblue3", "#009ACD"}, + {"deepskyblue4", "#00688B"}, + {"dodgerblue", "#1E90FF"}, + {"dodgerblue1", "#1E90FF"}, + {"dodgerblue2", "#1C86EE"}, + {"dodgerblue3", "#1874CD"}, + {"dodgerblue4", "#104E8B"}, + {"lightblue", "#ADD8E6"}, + {"lightblue1", "#BFEFFF"}, + {"lightblue2", "#B2DFEE"}, + {"lightblue3", "#9AC0CD"}, + {"lightblue4", "#68838B"}, + {"lightcyan", "#E0FFFF"}, + {"lightcyan1", "#E0FFFF"}, + {"lightcyan2", "#D1EEEE"}, + {"lightcyan3", "#B4CDCD"}, + {"lightcyan4", "#7A8B8B"}, + {"lightskyblue", "#87CEFA"}, + {"lightskyblue1", "#B0E2FF"}, + {"lightskyblue2", "#A4D3EE"}, + {"lightskyblue3", "#8DB6CD"}, + {"lightskyblue4", "#607B8B"}, + {"lightslateblue", "#8470FF"}, + {"lightsteelblue", "#B0C4DE"}, + {"lightsteelblue1", "#CAE1FF"}, + {"lightsteelblue2", "#BCD2EE"}, + {"lightsteelblue3", "#A2B5CD"}, + {"lightsteelblue4", "#6E7B8B"}, + {"mediumaquamarine", "#66CDAA"}, + {"mediumblue", "#0000CD"}, + {"mediumslateblue", "#7B68EE"}, + {"mediumturquoise", "#48D1CC"}, + {"midnightblue", "#191970"}, + {"navyblue", "#000080"}, + {"paleturquoise", "#AFEEEE"}, + {"paleturquoise1", "#BBFFFF"}, + {"paleturquoise2", "#AEEEEE"}, + {"paleturquoise3", "#96CDCD"}, + {"paleturquoise4", "#668B8B"}, + {"powderblue", "#B0E0E6"}, + {"royalblue", "#4169E1"}, + {"royalblue1", "#4876FF"}, + {"royalblue2", "#436EEE"}, + {"royalblue3", "#3A5FCD"}, + {"royalblue4", "#27408B"}, + {"skyblue", "#87CEEB"}, + {"skyblue1", "#87CEFF"}, + {"skyblue2", "#7EC0EE"}, + {"skyblue3", "#6CA6CD"}, + {"skyblue4", "#4A708B"}, + {"slateblue", "#6A5ACD"}, + {"slateblue1", "#836FFF"}, + {"slateblue2", "#7A67EE"}, + {"slateblue3", "#6959CD"}, + {"slateblue4", "#473C8B"}, + {"steelblue", "#4682B4"}, + {"steelblue1", "#63B8FF"}, + {"steelblue2", "#5CACEE"}, + {"steelblue3", "#4F94CD"}, + {"steelblue4", "#36648B"}, + {"aquamarine", "#7FFFD4"}, + {"aquamarine1", "#7FFFD4"}, + {"aquamarine2", "#76EEC6"}, + {"aquamarine3", "#66CDAA"}, + {"aquamarine4", "#458B74"}, + {"azure", "#F0FFFF"}, + {"azure1", "#F0FFFF"}, + {"azure2", "#E0EEEE"}, + {"azure3", "#C1CDCD"}, + {"azure4", "#838B8B"}, + {"blue", "#0000FF"}, + {"blue1", "#0000FF"}, + {"blue2", "#0000EE"}, + {"blue3", "#0000CD"}, + {"blue4", "#00008B"}, + {"cyan", "#00FFFF"}, + {"cyan1", "#00FFFF"}, + {"cyan2", "#00EEEE"}, + {"cyan3", "#00CDCD"}, + {"cyan4", "#008B8B"}, + {"navy", "#000080"}, + {"turquoise", "#40E0D0"}, + {"turquoise1", "#00F5FF"}, + {"turquoise2", "#00E5EE"}, + {"turquoise3", "#00C5CD"}, + {"turquoise4", "#00868B"}, + {"rosybrown", "#BC8F8F"}, + {"rosybrown1", "#FFC1C1"}, + {"rosybrown2", "#EEB4B4"}, + {"rosybrown3", "#CD9B9B"}, + {"rosybrown4", "#8B6969"}, + {"saddlebrown", "#8B4513"}, + {"sandybrown", "#F4A460"}, + {"beige", "#F5F5DC"}, + {"brown", "#A52A2A"}, + {"brown1", "#FF4040"}, + {"brown2", "#EE3B3B"}, + {"brown3", "#CD3333"}, + {"brown4", "#8B2323"}, + {"burlywood", "#DEB887"}, + {"burlywood1", "#FFD39B"}, + {"burlywood2", "#EEC591"}, + {"burlywood3", "#CDAA7D"}, + {"burlywood4", "#8B7355"}, + {"chocolate", "#D2691E"}, + {"chocolate1", "#FF7F24"}, + {"chocolate2", "#EE7621"}, + {"chocolate3", "#CD661D"}, + {"chocolate4", "#8B4513"}, + {"peru", "#CD853F"}, + {"tan", "#D2B48C"}, + {"tan1", "#FFA54F"}, + {"tan2", "#EE9A49"}, + {"tan3", "#CD853F"}, + {"tan4", "#8B5A2B"}, + {"darkslategray", "#2F4F4F"}, + {"darkslategray1", "#97FFFF"}, + {"darkslategray2", "#8DEEEE"}, + {"darkslategray3", "#79CDCD"}, + {"darkslategray4", "#528B8B"}, + {"darkslategrey", "#2F4F4F"}, + {"dimgray", "#696969"}, + {"dimgrey", "#696969"}, + {"lightgray", "#D3D3D3"}, + {"lightgrey", "#D3D3D3"}, + {"lightslategray", "#778899"}, + {"lightslategrey", "#778899"}, + {"slategray", "#708090"}, + {"slategray1", "#C6E2FF"}, + {"slategray2", "#B9D3EE"}, + {"slategray3", "#9FB6CD"}, + {"slategray4", "#6C7B8B"}, + {"slategrey", "#708090"}, + {"gray", "#BEBEBE"}, + {"gray0", "#000000"}, + {"gray1", "#030303"}, + {"gray2", "#050505"}, + {"gray3", "#080808"}, + {"gray4", "#0A0A0A"}, + {"gray5", "#0D0D0D"}, + {"gray6", "#0F0F0F"}, + {"gray7", "#121212"}, + {"gray8", "#141414"}, + {"gray9", "#171717"}, + {"gray10", "#1A1A1A"}, + {"gray11", "#1C1C1C"}, + {"gray12", "#1F1F1F"}, + {"gray13", "#212121"}, + {"gray14", "#242424"}, + {"gray15", "#262626"}, + {"gray16", "#292929"}, + {"gray17", "#2B2B2B"}, + {"gray18", "#2E2E2E"}, + {"gray19", "#303030"}, + {"gray20", "#333333"}, + {"gray21", "#363636"}, + {"gray22", "#383838"}, + {"gray23", "#3B3B3B"}, + {"gray24", "#3D3D3D"}, + {"gray25", "#404040"}, + {"gray26", "#424242"}, + {"gray27", "#454545"}, + {"gray28", "#474747"}, + {"gray29", "#4A4A4A"}, + {"gray30", "#4D4D4D"}, + {"gray31", "#4F4F4F"}, + {"gray32", "#525252"}, + {"gray33", "#545454"}, + {"gray34", "#575757"}, + {"gray35", "#595959"}, + {"gray36", "#5C5C5C"}, + {"gray37", "#5E5E5E"}, + {"gray38", "#616161"}, + {"gray39", "#636363"}, + {"gray40", "#666666"}, + {"gray41", "#696969"}, + {"gray42", "#6B6B6B"}, + {"gray43", "#6E6E6E"}, + {"gray44", "#707070"}, + {"gray45", "#737373"}, + {"gray46", "#757575"}, + {"gray47", "#787878"}, + {"gray48", "#7A7A7A"}, + {"gray49", "#7D7D7D"}, + {"gray50", "#7F7F7F"}, + {"gray51", "#828282"}, + {"gray52", "#858585"}, + {"gray53", "#878787"}, + {"gray54", "#8A8A8A"}, + {"gray55", "#8C8C8C"}, + {"gray56", "#8F8F8F"}, + {"gray57", "#919191"}, + {"gray58", "#949494"}, + {"gray59", "#969696"}, + {"gray60", "#999999"}, + {"gray61", "#9C9C9C"}, + {"gray62", "#9E9E9E"}, + {"gray63", "#A1A1A1"}, + {"gray64", "#A3A3A3"}, + {"gray65", "#A6A6A6"}, + {"gray66", "#A8A8A8"}, + {"gray67", "#ABABAB"}, + {"gray68", "#ADADAD"}, + {"gray69", "#B0B0B0"}, + {"gray70", "#B3B3B3"}, + {"gray71", "#B5B5B5"}, + {"gray72", "#B8B8B8"}, + {"gray73", "#BABABA"}, + {"gray74", "#BDBDBD"}, + {"gray75", "#BFBFBF"}, + {"gray76", "#C2C2C2"}, + {"gray77", "#C4C4C4"}, + {"gray78", "#C7C7C7"}, + {"gray79", "#C9C9C9"}, + {"gray80", "#CCCCCC"}, + {"gray81", "#CFCFCF"}, + {"gray82", "#D1D1D1"}, + {"gray83", "#D4D4D4"}, + {"gray84", "#D6D6D6"}, + {"gray85", "#D9D9D9"}, + {"gray86", "#DBDBDB"}, + {"gray87", "#DEDEDE"}, + {"gray88", "#E0E0E0"}, + {"gray89", "#E3E3E3"}, + {"gray90", "#E5E5E5"}, + {"gray91", "#E8E8E8"}, + {"gray92", "#EBEBEB"}, + {"gray93", "#EDEDED"}, + {"gray94", "#F0F0F0"}, + {"gray95", "#F2F2F2"}, + {"gray96", "#F5F5F5"}, + {"gray97", "#F7F7F7"}, + {"gray98", "#FAFAFA"}, + {"gray99", "#FCFCFC"}, + {"gray100", "#FFFFFF"}, + {"grey", "#BEBEBE"}, + {"grey0", "#000000"}, + {"grey1", "#030303"}, + {"grey2", "#050505"}, + {"grey3", "#080808"}, + {"grey4", "#0A0A0A"}, + {"grey5", "#0D0D0D"}, + {"grey6", "#0F0F0F"}, + {"grey7", "#121212"}, + {"grey8", "#141414"}, + {"grey9", "#171717"}, + {"grey10", "#1A1A1A"}, + {"grey11", "#1C1C1C"}, + {"grey12", "#1F1F1F"}, + {"grey13", "#212121"}, + {"grey14", "#242424"}, + {"grey15", "#262626"}, + {"grey16", "#292929"}, + {"grey17", "#2B2B2B"}, + {"grey18", "#2E2E2E"}, + {"grey19", "#303030"}, + {"grey20", "#333333"}, + {"grey21", "#363636"}, + {"grey22", "#383838"}, + {"grey23", "#3B3B3B"}, + {"grey24", "#3D3D3D"}, + {"grey25", "#404040"}, + {"grey26", "#424242"}, + {"grey27", "#454545"}, + {"grey28", "#474747"}, + {"grey29", "#4A4A4A"}, + {"grey30", "#4D4D4D"}, + {"grey31", "#4F4F4F"}, + {"grey32", "#525252"}, + {"grey33", "#545454"}, + {"grey34", "#575757"}, + {"grey35", "#595959"}, + {"grey36", "#5C5C5C"}, + {"grey37", "#5E5E5E"}, + {"grey38", "#616161"}, + {"grey39", "#636363"}, + {"grey40", "#666666"}, + {"grey41", "#696969"}, + {"grey42", "#6B6B6B"}, + {"grey43", "#6E6E6E"}, + {"grey44", "#707070"}, + {"grey45", "#737373"}, + {"grey46", "#757575"}, + {"grey47", "#787878"}, + {"grey48", "#7A7A7A"}, + {"grey49", "#7D7D7D"}, + {"grey50", "#7F7F7F"}, + {"grey51", "#828282"}, + {"grey52", "#858585"}, + {"grey53", "#878787"}, + {"grey54", "#8A8A8A"}, + {"grey55", "#8C8C8C"}, + {"grey56", "#8F8F8F"}, + {"grey57", "#919191"}, + {"grey58", "#949494"}, + {"grey59", "#969696"}, + {"grey60", "#999999"}, + {"grey61", "#9C9C9C"}, + {"grey62", "#9E9E9E"}, + {"grey63", "#A1A1A1"}, + {"grey64", "#A3A3A3"}, + {"grey65", "#A6A6A6"}, + {"grey66", "#A8A8A8"}, + {"grey67", "#ABABAB"}, + {"grey68", "#ADADAD"}, + {"grey69", "#B0B0B0"}, + {"grey70", "#B3B3B3"}, + {"grey71", "#B5B5B5"}, + {"grey72", "#B8B8B8"}, + {"grey73", "#BABABA"}, + {"grey74", "#BDBDBD"}, + {"grey75", "#BFBFBF"}, + {"grey76", "#C2C2C2"}, + {"grey77", "#C4C4C4"}, + {"grey78", "#C7C7C7"}, + {"grey79", "#C9C9C9"}, + {"grey80", "#CCCCCC"}, + {"grey81", "#CFCFCF"}, + {"grey82", "#D1D1D1"}, + {"grey83", "#D4D4D4"}, + {"grey84", "#D6D6D6"}, + {"grey85", "#D9D9D9"}, + {"grey86", "#DBDBDB"}, + {"grey87", "#DEDEDE"}, + {"grey88", "#E0E0E0"}, + {"grey89", "#E3E3E3"}, + {"grey90", "#E5E5E5"}, + {"grey91", "#E8E8E8"}, + {"grey92", "#EBEBEB"}, + {"grey93", "#EDEDED"}, + {"grey94", "#F0F0F0"}, + {"grey95", "#F2F2F2"}, + {"grey96", "#F5F5F5"}, + {"grey97", "#F7F7F7"}, + {"grey98", "#FAFAFA"}, + {"grey99", "#FCFCFC"}, + {"grey100", "#FFFFFF"}, + {"darkgreen", "#006400"}, + {"darkkhaki", "#BDB76B"}, + {"darkolivegreen", "#556B2F"}, + {"darkolivegreen1", "#CAFF70"}, + {"darkolivegreen2", "#BCEE68"}, + {"darkolivegreen3", "#A2CD5A"}, + {"darkolivegreen4", "#6E8B3D"}, + {"darkseagreen", "#8FBC8F"}, + {"darkseagreen1", "#C1FFC1"}, + {"darkseagreen2", "#B4EEB4"}, + {"darkseagreen3", "#9BCD9B"}, + {"darkseagreen4", "#698B69"}, + {"forestgreen", "#228B22"}, + {"greenyellow", "#ADFF2F"}, + {"lawngreen", "#7CFC00"}, + {"lightgreen", "#90EE90"}, + {"lightseagreen", "#20B2AA"}, + {"limegreen", "#32CD32"}, + {"mediumseagreen", "#3CB371"}, + {"mediumspringgreen", "#00FA9A"}, + {"mintcream", "#F5FFFA"}, + {"olivedrab", "#6B8E23"}, + {"olivedrab1", "#C0FF3E"}, + {"olivedrab2", "#B3EE3A"}, + {"olivedrab3", "#9ACD32"}, + {"olivedrab4", "#698B22"}, + {"palegreen", "#98FB98"}, + {"palegreen1", "#9AFF9A"}, + {"palegreen2", "#90EE90"}, + {"palegreen3", "#7CCD7C"}, + {"palegreen4", "#548B54"}, + {"seagreen", "#2E8B57"}, + {"seagreen1", "#54FF9F"}, + {"seagreen2", "#4EEE94"}, + {"seagreen3", "#43CD80"}, + {"seagreen4", "#2E8B57"}, + {"springgreen", "#00FF7F"}, + {"springgreen1", "#00FF7F"}, + {"springgreen2", "#00EE76"}, + {"springgreen3", "#00CD66"}, + {"springgreen4", "#008B45"}, + {"yellowgreen", "#9ACD32"}, + {"chartreuse", "#7FFF00"}, + {"chartreuse1", "#7FFF00"}, + {"chartreuse2", "#76EE00"}, + {"chartreuse3", "#66CD00"}, + {"chartreuse4", "#458B00"}, + {"green", "#00FF00"}, + {"green1", "#00FF00"}, + {"green2", "#00EE00"}, + {"green3", "#00CD00"}, + {"green4", "#008B00"}, + {"khaki", "#F0E68C"}, + {"khaki1", "#FFF68F"}, + {"khaki2", "#EEE685"}, + {"khaki3", "#CDC673"}, + {"khaki4", "#8B864E"}, + {"darkorange", "#FF8C00"}, + {"darkorange1", "#FF7F00"}, + {"darkorange2", "#EE7600"}, + {"darkorange3", "#CD6600"}, + {"darkorange4", "#8B4500"}, + {"darksalmon", "#E9967A"}, + {"lightcoral", "#F08080"}, + {"lightsalmon", "#FFA07A"}, + {"lightsalmon1", "#FFA07A"}, + {"lightsalmon2", "#EE9572"}, + {"lightsalmon3", "#CD8162"}, + {"lightsalmon4", "#8B5742"}, + {"peachpuff", "#FFDAB9"}, + {"peachpuff1", "#FFDAB9"}, + {"peachpuff2", "#EECBAD"}, + {"peachpuff3", "#CDAF95"}, + {"peachpuff4", "#8B7765"}, + {"bisque", "#FFE4C4"}, + {"bisque1", "#FFE4C4"}, + {"bisque2", "#EED5B7"}, + {"bisque3", "#CDB79E"}, + {"bisque4", "#8B7D6B"}, + {"coral", "#FF7F50"}, + {"coral1", "#FF7256"}, + {"coral2", "#EE6A50"}, + {"coral3", "#CD5B45"}, + {"coral4", "#8B3E2F"}, + {"honeydew", "#F0FFF0"}, + {"honeydew1", "#F0FFF0"}, + {"honeydew2", "#E0EEE0"}, + {"honeydew3", "#C1CDC1"}, + {"honeydew4", "#838B83"}, + {"orange", "#FFA500"}, + {"orange1", "#FFA500"}, + {"orange2", "#EE9A00"}, + {"orange3", "#CD8500"}, + {"orange4", "#8B5A00"}, + {"salmon", "#FA8072"}, + {"salmon1", "#FF8C69"}, + {"salmon2", "#EE8262"}, + {"salmon3", "#CD7054"}, + {"salmon4", "#8B4C39"}, + {"sienna", "#A0522D"}, + {"sienna1", "#FF8247"}, + {"sienna2", "#EE7942"}, + {"sienna3", "#CD6839"}, + {"sienna4", "#8B4726"}, + {"darkred", "#8B0000"}, + {"deeppink", "#FF1493"}, + {"deeppink1", "#FF1493"}, + {"deeppink2", "#EE1289"}, + {"deeppink3", "#CD1076"}, + {"deeppink4", "#8B0A50"}, + {"hotpink", "#FF69B4"}, + {"hotpink1", "#FF6EB4"}, + {"hotpink2", "#EE6AA7"}, + {"hotpink3", "#CD6090"}, + {"hotpink4", "#8B3A62"}, + {"indianred", "#CD5C5C"}, + {"indianred1", "#FF6A6A"}, + {"indianred2", "#EE6363"}, + {"indianred3", "#CD5555"}, + {"indianred4", "#8B3A3A"}, + {"lightpink", "#FFB6C1"}, + {"lightpink1", "#FFAEB9"}, + {"lightpink2", "#EEA2AD"}, + {"lightpink3", "#CD8C95"}, + {"lightpink4", "#8B5F65"}, + {"mediumvioletred", "#C71585"}, + {"mistyrose", "#FFE4E1"}, + {"mistyrose1", "#FFE4E1"}, + {"mistyrose2", "#EED5D2"}, + {"mistyrose3", "#CDB7B5"}, + {"mistyrose4", "#8B7D7B"}, + {"orangered", "#FF4500"}, + {"orangered1", "#FF4500"}, + {"orangered2", "#EE4000"}, + {"orangered3", "#CD3700"}, + {"orangered4", "#8B2500"}, + {"palevioletred", "#DB7093"}, + {"palevioletred1", "#FF82AB"}, + {"palevioletred2", "#EE799F"}, + {"palevioletred3", "#CD6889"}, + {"palevioletred4", "#8B475D"}, + {"violetred", "#D02090"}, + {"violetred1", "#FF3E96"}, + {"violetred2", "#EE3A8C"}, + {"violetred3", "#CD3278"}, + {"violetred4", "#8B2252"}, + {"firebrick", "#B22222"}, + {"firebrick1", "#FF3030"}, + {"firebrick2", "#EE2C2C"}, + {"firebrick3", "#CD2626"}, + {"firebrick4", "#8B1A1A"}, + {"pink", "#FFC0CB"}, + {"pink1", "#FFB5C5"}, + {"pink2", "#EEA9B8"}, + {"pink3", "#CD919E"}, + {"pink4", "#8B636C"}, + {"red", "#FF0000"}, + {"red1", "#FF0000"}, + {"red2", "#EE0000"}, + {"red3", "#CD0000"}, + {"red4", "#8B0000"}, + {"tomato", "#FF6347"}, + {"tomato1", "#FF6347"}, + {"tomato2", "#EE5C42"}, + {"tomato3", "#CD4F39"}, + {"tomato4", "#8B3626"}, + {"darkmagenta", "#8B008B"}, + {"darkorchid", "#9932CC"}, + {"darkorchid1", "#BF3EFF"}, + {"darkorchid2", "#B23AEE"}, + {"darkorchid3", "#9A32CD"}, + {"darkorchid4", "#68228B"}, + {"darkviolet", "#9400D3"}, + {"lavenderblush", "#FFF0F5"}, + {"lavenderblush1", "#FFF0F5"}, + {"lavenderblush2", "#EEE0E5"}, + {"lavenderblush3", "#CDC1C5"}, + {"lavenderblush4", "#8B8386"}, + {"mediumorchid", "#BA55D3"}, + {"mediumorchid1", "#E066FF"}, + {"mediumorchid2", "#D15FEE"}, + {"mediumorchid3", "#B452CD"}, + {"mediumorchid4", "#7A378B"}, + {"mediumpurple", "#9370DB"}, + {"mediumpurple1", "#AB82FF"}, + {"mediumpurple2", "#9F79EE"}, + {"mediumpurple3", "#8968CD"}, + {"mediumpurple4", "#5D478B"}, + {"lavender", "#E6E6FA"}, + {"magenta", "#FF00FF"}, + {"magenta1", "#FF00FF"}, + {"magenta2", "#EE00EE"}, + {"magenta3", "#CD00CD"}, + {"magenta4", "#8B008B"}, + {"maroon", "#B03060"}, + {"maroon1", "#FF34B3"}, + {"maroon2", "#EE30A7"}, + {"maroon3", "#CD2990"}, + {"maroon4", "#8B1C62"}, + {"orchid", "#DA70D6"}, + {"orchid1", "#FF83FA"}, + {"orchid2", "#EE7AE9"}, + {"orchid3", "#CD69C9"}, + {"orchid4", "#8B4789"}, + {"plum", "#DDA0DD"}, + {"plum1", "#FFBBFF"}, + {"plum2", "#EEAEEE"}, + {"plum3", "#CD96CD"}, + {"plum4", "#8B668B"}, + {"purple", "#A020F0"}, + {"purple1", "#9B30FF"}, + {"purple2", "#912CEE"}, + {"purple3", "#7D26CD"}, + {"purple4", "#551A8B"}, + {"thistle", "#D8BFD8"}, + {"thistle1", "#FFE1FF"}, + {"thistle2", "#EED2EE"}, + {"thistle3", "#CDB5CD"}, + {"thistle4", "#8B7B8B"}, + {"violet", "#EE82EE"}, + {"antiquewhite", "#FAEBD7"}, + {"antiquewhite1", "#FFEFDB"}, + {"antiquewhite2", "#EEDFCC"}, + {"antiquewhite3", "#CDC0B0"}, + {"antiquewhite4", "#8B8378"}, + {"floralwhite", "#FFFAF0"}, + {"ghostwhite", "#F8F8FF"}, + {"navajowhite", "#FFDEAD"}, + {"navajowhite1", "#FFDEAD"}, + {"navajowhite2", "#EECFA1"}, + {"navajowhite3", "#CDB38B"}, + {"navajowhite4", "#8B795E"}, + {"oldlace", "#FDF5E6"}, + {"whitesmoke", "#F5F5F5"}, + {"gainsboro", "#DCDCDC"}, + {"ivory", "#FFFFF0"}, + {"ivory1", "#FFFFF0"}, + {"ivory2", "#EEEEE0"}, + {"ivory3", "#CDCDC1"}, + {"ivory4", "#8B8B83"}, + {"linen", "#FAF0E6"}, + {"seashell", "#FFF5EE"}, + {"seashell1", "#FFF5EE"}, + {"seashell2", "#EEE5DE"}, + {"seashell3", "#CDC5BF"}, + {"seashell4", "#8B8682"}, + {"snow", "#FFFAFA"}, + {"snow1", "#FFFAFA"}, + {"snow2", "#EEE9E9"}, + {"snow3", "#CDC9C9"}, + {"snow4", "#8B8989"}, + {"wheat", "#F5DEB3"}, + {"wheat1", "#FFE7BA"}, + {"wheat2", "#EED8AE"}, + {"wheat3", "#CDBA96"}, + {"wheat4", "#8B7E66"}, + {"white", "#FFFFFF"}, + {"blanchedalmond", "#FFEBCD"}, + {"darkgoldenrod", "#B8860B"}, + {"darkgoldenrod1", "#FFB90F"}, + {"darkgoldenrod2", "#EEAD0E"}, + {"darkgoldenrod3", "#CD950C"}, + {"darkgoldenrod4", "#8B6508"}, + {"lemonchiffon", "#FFFACD"}, + {"lemonchiffon1", "#FFFACD"}, + {"lemonchiffon2", "#EEE9BF"}, + {"lemonchiffon3", "#CDC9A5"}, + {"lemonchiffon4", "#8B8970"}, + {"lightgoldenrod", "#EEDD82"}, + {"lightgoldenrod1", "#FFEC8B"}, + {"lightgoldenrod2", "#EEDC82"}, + {"lightgoldenrod3", "#CDBE70"}, + {"lightgoldenrod4", "#8B814C"}, + {"lightgoldenrodyellow", "#FAFAD2"}, + {"lightyellow", "#FFFFE0"}, + {"lightyellow1", "#FFFFE0"}, + {"lightyellow2", "#EEEED1"}, + {"lightyellow3", "#CDCDB4"}, + {"lightyellow4", "#8B8B7A"}, + {"palegoldenrod", "#EEE8AA"}, + {"papayawhip", "#FFEFD5"}, + {"cornsilk", "#FFF8DC"}, + {"cornsilk1", "#FFF8DC"}, + {"cornsilk2", "#EEE8CD"}, + {"cornsilk3", "#CDC8B1"}, + {"cornsilk4", "#8B8878"}, + {"gold", "#FFD700"}, + {"gold1", "#FFD700"}, + {"gold2", "#EEC900"}, + {"gold3", "#CDAD00"}, + {"gold4", "#8B7500"}, + {"goldenrod", "#DAA520"}, + {"goldenrod1", "#FFC125"}, + {"goldenrod2", "#EEB422"}, + {"goldenrod3", "#CD9B1D"}, + {"goldenrod4", "#8B6914"}, + {"moccasin", "#FFE4B5"}, + {"yellow", "#FFFF00"}, + {"yellow1", "#FFFF00"}, + {"yellow2", "#EEEE00"}, + {"yellow3", "#CDCD00"}, + {"yellow4", "#8B8B00"} + }; + #endregion // Member Variables + + #region Public Methods + /// + /// Attempts to convert a CSS color string. + /// + /// + /// Case insensitive CSS string to be converted into a color. + /// + /// + /// The converted color. + /// + /// + /// true if the string was successfully converted; otherwise false. + /// + public static bool TryParseCssString(string cssString, out Color color) + { + cssString = cssString.Replace(" ", ""); + if (colorNameToHexValue.ContainsKey(cssString)) + { + return ColorUtility.TryParseHtmlString(colorNameToHexValue[cssString], out color); + } + color = Color.black; + return false; + } + #endregion // Public Methods + } +} \ No newline at end of file diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/Common/Scripts/ColorMapper.cs.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/Common/Scripts/ColorMapper.cs.meta new file mode 100644 index 0000000..0376e4f --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/Common/Scripts/ColorMapper.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 2956c2e5763d6b6459ba5097b75ff000 +timeCreated: 1525379688 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/Common/Scripts/SecretHelper.cs b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/Common/Scripts/SecretHelper.cs new file mode 100644 index 0000000..97d4198 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/Common/Scripts/SecretHelper.cs @@ -0,0 +1,229 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. +// +// 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. +// + +using Microsoft.Cognitive.LUIS; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Net; +using System.Net.Security; +using System.Threading.Tasks; +using System.Reflection; +using UnityEngine; + +#if !UNITY_WSA || UNITY_EDITOR +using System.Security.Cryptography.X509Certificates; +#endif + +namespace Microsoft.MR +{ + /// + /// An attribute that can be used to designate where a secret value is held. + /// + /// + /// This attribute is used by . Please see that class for usage. + /// + [AttributeUsage(validOn: AttributeTargets.Field, AllowMultiple = false, Inherited = false)] + public class SecretValueAttribute : Attribute + { + #region Member Variables + private string name; + #endregion // Member Variables + + #region Constructors + /// + /// Initializes a new instance. + /// + /// + /// The name of the secret value. + /// + public SecretValueAttribute(string name) + { + // Validate + if (string.IsNullOrEmpty(name)) throw new ArgumentException(nameof(name)); + + // Store + this.name = name; + } + #endregion // Constructors + + #region Public Properties + /// + /// Gets the name of the secret. + /// + public string Name => name; + #endregion // Public Properties + } + + /// + /// A class built to help keep API keys and other secret values out of public source control. + /// + /// + /// + /// To use , apply the SecretValue + /// attribute to any inspector fields that you would like kept secret. Next, place the values in the + /// corresponding environment variable. Finally, in your behavior's Awake or Start method, call + /// SecretHelper.LoadSecrets(this). + /// + /// + /// For an example of using , please see LuisManager. + /// + /// + /// IMPORTANT: Please be aware that Unity Editor only loads environment variables once on start. + /// You will need to close Unity and open it again for changes to environment variables to take effect. + /// Also, Unity Hub acts as a parent process when starting Unity from the Hub. Therefore you will need + /// to close not only Unity but also Unity Hub (which runs in the tray) before changes will take effect. + /// + /// + static public class SecretHelper + { + #region Internal Methods + /// + /// Gets the default value for a specified type. + /// + /// + /// The type to obtain the default for. + /// + /// + /// The default value for the type. + /// + static private object GetDefaultValue(Type t) + { + if (t.IsValueType) + { + return Activator.CreateInstance(t); + } + else + { + return null; + } + } + + /// + /// Attempts to load a secret value into the specified field. + /// + /// + /// A that indicates the source of the secret value. + /// + /// + /// The field where the value will be loaded. + /// + /// + /// The object instance where the value will be set. + /// + /// + /// true to overwrite non-default values; otherwise false. The default is false. + /// + /// + /// By default will only update fields that are set to default values + /// (e.g. 0 for int and null or "" for string). This allows values set in the Unity inspector to + /// override values stored in the environment. If values in the environment should always take + /// precedence over values stored in the field set to true. + /// + static private void TryLoadValue(SecretValueAttribute sva, FieldInfo field, object obj, bool overwrite = false) + { + // Validate + if (sva == null) throw new ArgumentNullException(nameof(sva)); + if (field == null) throw new ArgumentNullException(nameof(field)); + if (obj == null) throw new ArgumentNullException(nameof(obj)); + + // Now get the current value of the field + object curValue = field.GetValue(obj); + + // If we're not overwriting values, we need to check to check and make sure a non-default value is not already set + if (!overwrite) + { + // What is the default value for the field? + object defValue = GetDefaultValue(field.FieldType); + + // Is it the current value the same as the default value? + bool isDefaultValue = ((curValue == defValue) || ((field.FieldType == typeof(string)) && (string.IsNullOrEmpty((string)curValue)))); + + // If the current value is not the default value, the secret has already been supplied + // and we don't need to do any more work. + if (!isDefaultValue) { return; } + } + + // Either in overwrite mode or a default value. Let's try to read the environment variable. + string svalue = Environment.GetEnvironmentVariable(sva.Name); + + // Check for no environment variable or no value set. + if (string.IsNullOrEmpty(svalue)) + { + Debug.LogWarning($"{obj.GetType().Name}.{field.Name} has the default value '{curValue}' but the environment variable {sva.Name} is missing or not set."); + return; + } + + // If string, just assign. Otherwise attempt to convert. + if (field.FieldType == typeof(string)) + { + field.SetValue(obj, svalue); + } + else + { + try + { + object cvalue = Convert.ChangeType(svalue, field.FieldType); + field.SetValue(obj, cvalue); + } + catch (Exception ex) + { + Debug.LogWarning($"The value '{svalue}' of environment variable {sva.Name} could not be converted to {field.FieldType.Name}. {ex.Message}"); + } + } + } + #endregion // Internal Methods + + #region Public Methods + /// + /// Attempts to load all secret values for the specified object. + /// + /// + /// The object where secret values will be loaded. + /// + static public void LoadSecrets(object obj) + { + // Validate + if (obj == null) throw new ArgumentNullException(nameof(obj)); + + // Get all fields + FieldInfo[] fields = obj.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); + + // Look for secret fields + foreach (var field in fields) + { + // Try to get attribute + SecretValueAttribute sva = field.GetCustomAttribute(); + + // If not a secret, skip + if (sva == null) { continue; } + + // Try to load the value + TryLoadValue(sva, field, obj); + } + } + #endregion // Public Methods + } +} \ No newline at end of file diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/Common/Scripts/SecretHelper.cs.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/Common/Scripts/SecretHelper.cs.meta new file mode 100644 index 0000000..6877c1c --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/Common/Scripts/SecretHelper.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: c1367348fc0344245bfc3e9f2788bc85 +timeCreated: 1518192940 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS.meta new file mode 100644 index 0000000..2be93b2 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: cc4a9b21378edde47810d5a29ae13a35 +folderAsset: yes +timeCreated: 1518188532 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Domains.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Domains.meta new file mode 100644 index 0000000..cd6cb4a --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Domains.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 951fcbdb113dc5a408e4b555f870b230 +folderAsset: yes +timeCreated: 1523236001 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Domains/MRLUIS.json b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Domains/MRLUIS.json new file mode 100644 index 0000000..90b0c37 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Domains/MRLUIS.json @@ -0,0 +1,2567 @@ +{ + "luis_schema_version": "3.0.0", + "versionId": "0.1", + "name": "MRLUIS", + "desc": "The main app for MR LUIS Samples", + "culture": "en-us", + "intents": [ + { + "name": "MR.ChangeAppearance" + }, + { + "name": "MR.PerformAction" + }, + { + "name": "MR.Transform" + }, + { + "name": "None" + } + ], + "entities": [ + { + "name": "MR.CharacterAction", + "roles": [] + }, + { + "name": "MR.Color", + "roles": [] + }, + { + "name": "MR.InstanceName", + "roles": [] + }, + { + "name": "MR.InstanceType", + "roles": [] + } + ], + "composites": [], + "closedLists": [ + { + "name": "MR.AppearanceAction", + "subLists": [ + { + "canonicalForm": "Fade In", + "list": [] + }, + { + "canonicalForm": "Fade Out", + "list": [] + }, + { + "canonicalForm": "Show", + "list": [ + "appear", + "turn on", + "visible" + ] + }, + { + "canonicalForm": "Hide", + "list": [ + "disappear", + "turn off", + "invisible" + ] + } + ], + "roles": [] + }, + { + "name": "MR.Axis", + "subLists": [ + { + "canonicalForm": "X", + "list": [] + }, + { + "canonicalForm": "Y", + "list": [] + }, + { + "canonicalForm": "Z", + "list": [] + } + ], + "roles": [] + }, + { + "name": "MR.Focus", + "subLists": [ + { + "canonicalForm": "Gaze", + "list": [ + "looking" + ] + }, + { + "canonicalForm": "Pointer", + "list": [ + "pointing" + ] + }, + { + "canonicalForm": "Nondescript", + "list": [ + "here", + "there", + "it" + ] + } + ], + "roles": [] + }, + { + "name": "MR.RotateDirection", + "subLists": [ + { + "canonicalForm": "Clockwise", + "list": [] + }, + { + "canonicalForm": "Counterclockwise", + "list": [] + } + ], + "roles": [] + }, + { + "name": "MR.ScaleDirection", + "subLists": [ + { + "canonicalForm": "Increase", + "list": [ + "grow", + "bigger", + "bigger", + "up", + "larger" + ] + }, + { + "canonicalForm": "Decrease", + "list": [ + "shrink", + "smaller", + "down" + ] + } + ], + "roles": [] + }, + { + "name": "MR.TransformDirection", + "subLists": [ + { + "canonicalForm": "XPlus", + "list": [ + "right" + ] + }, + { + "canonicalForm": "XMinus", + "list": [ + "left" + ] + }, + { + "canonicalForm": "YPlus", + "list": [ + "up", + "raise" + ] + }, + { + "canonicalForm": "YMinus", + "list": [ + "down", + "lower" + ] + }, + { + "canonicalForm": "ZPlus", + "list": [ + "forward" + ] + }, + { + "canonicalForm": "ZMinus", + "list": [ + "back" + ] + } + ], + "roles": [] + }, + { + "name": "MR.TransformType", + "subLists": [ + { + "canonicalForm": "Rotate", + "list": [ + "turn" + ] + }, + { + "canonicalForm": "Scale", + "list": [ + "size" + ] + }, + { + "canonicalForm": "Translate", + "list": [ + "move", + "pull", + "push" + ] + } + ], + "roles": [] + } + ], + "patternAnyEntities": [], + "regex_entities": [], + "prebuiltEntities": [ + { + "name": "number", + "roles": [] + } + ], + "model_features": [], + "regex_features": [], + "patterns": [], + "utterances": [ + { + "text": "alter the ball to blue", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 10, + "endPos": 13 + }, + { + "entity": "MR.Color", + "startPos": 18, + "endPos": 21 + } + ] + }, + { + "text": "change bouncy ball to medium sea green", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 7, + "endPos": 17 + }, + { + "entity": "MR.Color", + "startPos": 22, + "endPos": 37 + } + ] + }, + { + "text": "change steve to be grey", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 7, + "endPos": 11 + }, + { + "entity": "MR.Color", + "startPos": 19, + "endPos": 22 + } + ] + }, + { + "text": "change test tube to gree", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 7, + "endPos": 15 + }, + { + "entity": "MR.Color", + "startPos": 20, + "endPos": 23 + } + ] + }, + { + "text": "change test tube to green", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 7, + "endPos": 15 + }, + { + "entity": "MR.Color", + "startPos": 20, + "endPos": 24 + } + ] + }, + { + "text": "change test tube to yellow", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 7, + "endPos": 15 + }, + { + "entity": "MR.Color", + "startPos": 20, + "endPos": 25 + } + ] + }, + { + "text": "change the box to deep sky blue", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 11, + "endPos": 13 + }, + { + "entity": "MR.Color", + "startPos": 18, + "endPos": 30 + } + ] + }, + { + "text": "change the color of steve to cyan", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 20, + "endPos": 24 + }, + { + "entity": "MR.Color", + "startPos": 29, + "endPos": 32 + } + ] + }, + { + "text": "change the color of the cylinder to black", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 24, + "endPos": 31 + }, + { + "entity": "MR.Color", + "startPos": 36, + "endPos": 40 + } + ] + }, + { + "text": "change the color of the cylinder to orange", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 24, + "endPos": 31 + }, + { + "entity": "MR.Color", + "startPos": 36, + "endPos": 41 + } + ] + }, + { + "text": "change the color of the rocket ship to purple", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 24, + "endPos": 34 + }, + { + "entity": "MR.Color", + "startPos": 39, + "endPos": 44 + } + ] + }, + { + "text": "change the color of the sphere to green", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 24, + "endPos": 29 + }, + { + "entity": "MR.Color", + "startPos": 34, + "endPos": 38 + } + ] + }, + { + "text": "change the cube to red", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 11, + "endPos": 14 + }, + { + "entity": "MR.Color", + "startPos": 19, + "endPos": 21 + } + ] + }, + { + "text": "configure the big cube to be dark red", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 14, + "endPos": 21 + }, + { + "entity": "MR.Color", + "startPos": 29, + "endPos": 36 + } + ] + }, + { + "text": "fade in the plant", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 12, + "endPos": 16 + } + ] + }, + { + "text": "have frank sit down", + "intent": "MR.PerformAction", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 9 + }, + { + "entity": "MR.CharacterAction", + "startPos": 11, + "endPos": 13 + } + ] + }, + { + "text": "have george climb on the box", + "intent": "MR.PerformAction", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 10 + }, + { + "entity": "MR.CharacterAction", + "startPos": 12, + "endPos": 16 + } + ] + }, + { + "text": "have john stand up", + "intent": "MR.PerformAction", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 8 + }, + { + "entity": "MR.CharacterAction", + "startPos": 10, + "endPos": 14 + } + ] + }, + { + "text": "have mary wave at john", + "intent": "MR.PerformAction", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 8 + }, + { + "entity": "MR.CharacterAction", + "startPos": 10, + "endPos": 13 + } + ] + }, + { + "text": "hide the minimap", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 15 + } + ] + }, + { + "text": "let make the tree orange", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 13, + "endPos": 16 + }, + { + "entity": "MR.Color", + "startPos": 18, + "endPos": 23 + } + ] + }, + { + "text": "lets change boxey to be fuschia", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 12, + "endPos": 16 + }, + { + "entity": "MR.Color", + "startPos": 24, + "endPos": 30 + } + ] + }, + { + "text": "lets make the cube dark orange", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 14, + "endPos": 17 + }, + { + "entity": "MR.Color", + "startPos": 19, + "endPos": 29 + } + ] + }, + { + "text": "lower the cube 3 units", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 10, + "endPos": 13 + } + ] + }, + { + "text": "make bobby be blue", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 9 + }, + { + "entity": "MR.Color", + "startPos": 14, + "endPos": 17 + } + ] + }, + { + "text": "make bouncey ball orange", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 16 + }, + { + "entity": "MR.Color", + "startPos": 18, + "endPos": 23 + } + ] + }, + { + "text": "make bouncey ball yellow", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 16 + }, + { + "entity": "MR.Color", + "startPos": 18, + "endPos": 23 + } + ] + }, + { + "text": "make bouncy ball yellow", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 15 + }, + { + "entity": "MR.Color", + "startPos": 17, + "endPos": 22 + } + ] + }, + { + "text": "make boxey red", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 9 + }, + { + "entity": "MR.Color", + "startPos": 11, + "endPos": 13 + } + ] + }, + { + "text": "make boxey turquoise", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 9 + }, + { + "entity": "MR.Color", + "startPos": 11, + "endPos": 19 + } + ] + }, + { + "text": "make cube blue", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 8 + }, + { + "entity": "MR.Color", + "startPos": 10, + "endPos": 13 + } + ] + }, + { + "text": "make cylinder smaller", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 12 + } + ] + }, + { + "text": "make danny white", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 9 + }, + { + "entity": "MR.Color", + "startPos": 11, + "endPos": 15 + } + ] + }, + { + "text": "make eggplant eggplant", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 12 + }, + { + "entity": "MR.Color", + "startPos": 14, + "endPos": 21 + } + ] + }, + { + "text": "make it bigger", + "intent": "MR.Transform", + "entities": [] + }, + { + "text": "make john walk towards joe", + "intent": "MR.PerformAction", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 8 + }, + { + "entity": "MR.CharacterAction", + "startPos": 10, + "endPos": 13 + } + ] + }, + { + "text": "make michael green", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 11 + }, + { + "entity": "MR.Color", + "startPos": 13, + "endPos": 17 + } + ] + }, + { + "text": "make mount hood light blue", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 14 + }, + { + "entity": "MR.Color", + "startPos": 16, + "endPos": 25 + } + ] + }, + { + "text": "make my muffins be teal", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 8, + "endPos": 14 + }, + { + "entity": "MR.Color", + "startPos": 19, + "endPos": 22 + } + ] + }, + { + "text": "make pill bigger", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 8 + } + ] + }, + { + "text": "make roundy and the sphere green", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 10 + }, + { + "entity": "MR.InstanceType", + "startPos": 20, + "endPos": 25 + }, + { + "entity": "MR.Color", + "startPos": 27, + "endPos": 31 + } + ] + }, + { + "text": "make roundy and the text azure", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 10 + }, + { + "entity": "MR.InstanceType", + "startPos": 20, + "endPos": 23 + }, + { + "entity": "MR.Color", + "startPos": 25, + "endPos": 29 + } + ] + }, + { + "text": "make roundy and the text black", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 10 + }, + { + "entity": "MR.InstanceType", + "startPos": 20, + "endPos": 23 + }, + { + "entity": "MR.Color", + "startPos": 25, + "endPos": 29 + } + ] + }, + { + "text": "make roundy and the text blue three", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 10 + }, + { + "entity": "MR.InstanceType", + "startPos": 20, + "endPos": 23 + }, + { + "entity": "MR.Color", + "startPos": 25, + "endPos": 28 + } + ] + }, + { + "text": "make roundy and the text chartreuse", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 10 + }, + { + "entity": "MR.InstanceType", + "startPos": 20, + "endPos": 23 + }, + { + "entity": "MR.Color", + "startPos": 25, + "endPos": 34 + } + ] + }, + { + "text": "make roundy and the text cobolt", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 10 + }, + { + "entity": "MR.InstanceType", + "startPos": 20, + "endPos": 23 + }, + { + "entity": "MR.Color", + "startPos": 25, + "endPos": 30 + } + ] + }, + { + "text": "make roundy and the text deeppink", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 10 + }, + { + "entity": "MR.InstanceType", + "startPos": 20, + "endPos": 23 + }, + { + "entity": "MR.Color", + "startPos": 25, + "endPos": 32 + } + ] + }, + { + "text": "make roundy and the text fuchsia", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 10 + }, + { + "entity": "MR.InstanceType", + "startPos": 20, + "endPos": 23 + }, + { + "entity": "MR.Color", + "startPos": 25, + "endPos": 31 + } + ] + }, + { + "text": "make roundy and the text grey", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 10 + }, + { + "entity": "MR.InstanceType", + "startPos": 20, + "endPos": 23 + }, + { + "entity": "MR.Color", + "startPos": 25, + "endPos": 28 + } + ] + }, + { + "text": "make roundy and the text maroon", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 10 + }, + { + "entity": "MR.InstanceType", + "startPos": 20, + "endPos": 23 + }, + { + "entity": "MR.Color", + "startPos": 25, + "endPos": 30 + } + ] + }, + { + "text": "make roundy and the text olive", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 10 + }, + { + "entity": "MR.InstanceType", + "startPos": 20, + "endPos": 23 + }, + { + "entity": "MR.Color", + "startPos": 25, + "endPos": 29 + } + ] + }, + { + "text": "make roundy and the text orange", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 10 + }, + { + "entity": "MR.InstanceType", + "startPos": 20, + "endPos": 23 + }, + { + "entity": "MR.Color", + "startPos": 25, + "endPos": 30 + } + ] + }, + { + "text": "make roundy and the text pink", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 10 + }, + { + "entity": "MR.InstanceType", + "startPos": 20, + "endPos": 23 + }, + { + "entity": "MR.Color", + "startPos": 25, + "endPos": 28 + } + ] + }, + { + "text": "make roundy and the text pink 1", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 10 + }, + { + "entity": "MR.InstanceType", + "startPos": 20, + "endPos": 23 + }, + { + "entity": "MR.Color", + "startPos": 25, + "endPos": 28 + } + ] + }, + { + "text": "make roundy and the text pink two", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 10 + }, + { + "entity": "MR.InstanceType", + "startPos": 20, + "endPos": 23 + }, + { + "entity": "MR.Color", + "startPos": 25, + "endPos": 28 + } + ] + }, + { + "text": "make roundy and the text silver", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 10 + }, + { + "entity": "MR.InstanceType", + "startPos": 20, + "endPos": 23 + }, + { + "entity": "MR.Color", + "startPos": 25, + "endPos": 30 + } + ] + }, + { + "text": "make roundy green", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 10 + }, + { + "entity": "MR.Color", + "startPos": 12, + "endPos": 16 + } + ] + }, + { + "text": "make roundy purple", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 10 + }, + { + "entity": "MR.Color", + "startPos": 12, + "endPos": 17 + } + ] + }, + { + "text": "make sam red", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 7 + }, + { + "entity": "MR.Color", + "startPos": 9, + "endPos": 11 + } + ] + }, + { + "text": "make steve blue", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 9 + }, + { + "entity": "MR.Color", + "startPos": 11, + "endPos": 14 + } + ] + }, + { + "text": "make test tube bigger", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 13 + } + ] + }, + { + "text": "make test tube green", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 13 + }, + { + "entity": "MR.Color", + "startPos": 15, + "endPos": 19 + } + ] + }, + { + "text": "make test tube larger", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 13 + } + ] + }, + { + "text": "make test tube smaller", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 13 + } + ] + }, + { + "text": "make the ball bigger", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 12 + }, + { + "entity": "MR.Color", + "startPos": 14, + "endPos": 19 + } + ] + }, + { + "text": "make the ball orange", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 12 + }, + { + "entity": "MR.Color", + "startPos": 14, + "endPos": 19 + } + ] + }, + { + "text": "make the bouncy ball yellow", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 19 + }, + { + "entity": "MR.Color", + "startPos": 21, + "endPos": 26 + } + ] + }, + { + "text": "make the box bigger", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 11 + } + ] + }, + { + "text": "make the box blue", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 11 + }, + { + "entity": "MR.Color", + "startPos": 13, + "endPos": 16 + } + ] + }, + { + "text": "make the color of the car to black", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 22, + "endPos": 24 + }, + { + "entity": "MR.Color", + "startPos": 29, + "endPos": 33 + } + ] + }, + { + "text": "make the cube black", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 12 + }, + { + "entity": "MR.Color", + "startPos": 14, + "endPos": 18 + } + ] + }, + { + "text": "make the cube blue", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 12 + }, + { + "entity": "MR.Color", + "startPos": 14, + "endPos": 17 + } + ] + }, + { + "text": "make the cube eggplant", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 12 + }, + { + "entity": "MR.Color", + "startPos": 14, + "endPos": 21 + } + ] + }, + { + "text": "make the cube green", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 12 + }, + { + "entity": "MR.Color", + "startPos": 14, + "endPos": 18 + } + ] + }, + { + "text": "make the cube yellow", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 12 + }, + { + "entity": "MR.Color", + "startPos": 14, + "endPos": 19 + } + ] + }, + { + "text": "make the cylinder dark slate gray", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 16 + }, + { + "entity": "MR.Color", + "startPos": 18, + "endPos": 32 + } + ] + }, + { + "text": "make the cylinder grey", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 16 + }, + { + "entity": "MR.Color", + "startPos": 18, + "endPos": 21 + } + ] + }, + { + "text": "make the cylinder orange", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 16 + }, + { + "entity": "MR.Color", + "startPos": 18, + "endPos": 23 + } + ] + }, + { + "text": "make the cylinder plum", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 16 + }, + { + "entity": "MR.Color", + "startPos": 18, + "endPos": 21 + } + ] + }, + { + "text": "make the cylinder smaller", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 16 + } + ] + }, + { + "text": "make the cylinder tan", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 16 + }, + { + "entity": "MR.Color", + "startPos": 18, + "endPos": 20 + } + ] + }, + { + "text": "make the cylinder white", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 16 + }, + { + "entity": "MR.Color", + "startPos": 18, + "endPos": 22 + } + ] + }, + { + "text": "make the cylinder yellow", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 16 + }, + { + "entity": "MR.Color", + "startPos": 18, + "endPos": 23 + } + ] + }, + { + "text": "make the flowers blue", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 15 + }, + { + "entity": "MR.Color", + "startPos": 17, + "endPos": 20 + } + ] + }, + { + "text": "make the human red colored", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 13 + }, + { + "entity": "MR.Color", + "startPos": 15, + "endPos": 17 + } + ] + }, + { + "text": "make the map visible", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 11 + } + ] + }, + { + "text": "make the sphere and tim blue", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 14 + }, + { + "entity": "MR.InstanceName", + "startPos": 20, + "endPos": 22 + }, + { + "entity": "MR.Color", + "startPos": 24, + "endPos": 27 + } + ] + }, + { + "text": "make the sphere dark slate blue", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 14 + }, + { + "entity": "MR.Color", + "startPos": 16, + "endPos": 30 + } + ] + }, + { + "text": "make the sphere dark slate gray", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 14 + }, + { + "entity": "MR.Color", + "startPos": 16, + "endPos": 30 + } + ] + }, + { + "text": "make the sphere fire brick", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 14 + }, + { + "entity": "MR.Color", + "startPos": 16, + "endPos": 25 + } + ] + }, + { + "text": "make the sphere hot pink", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 14 + }, + { + "entity": "MR.Color", + "startPos": 16, + "endPos": 23 + } + ] + }, + { + "text": "make the sphere purple", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 14 + }, + { + "entity": "MR.Color", + "startPos": 16, + "endPos": 21 + } + ] + }, + { + "text": "make the television pink", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 18 + }, + { + "entity": "MR.Color", + "startPos": 20, + "endPos": 23 + } + ] + }, + { + "text": "make tim and roundy blue", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 7 + }, + { + "entity": "MR.InstanceName", + "startPos": 13, + "endPos": 18 + }, + { + "entity": "MR.Color", + "startPos": 20, + "endPos": 23 + } + ] + }, + { + "text": "make tim and the sphere blue", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 7 + }, + { + "entity": "MR.InstanceType", + "startPos": 17, + "endPos": 22 + }, + { + "entity": "MR.Color", + "startPos": 24, + "endPos": 27 + } + ] + }, + { + "text": "make tim and the sphere green", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 7 + }, + { + "entity": "MR.InstanceType", + "startPos": 17, + "endPos": 22 + }, + { + "entity": "MR.Color", + "startPos": 24, + "endPos": 28 + } + ] + }, + { + "text": "make tim green", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 7 + }, + { + "entity": "MR.Color", + "startPos": 9, + "endPos": 13 + } + ] + }, + { + "text": "make what i'm looking at bigger", + "intent": "MR.Transform", + "entities": [] + }, + { + "text": "move it to the right", + "intent": "MR.Transform", + "entities": [] + }, + { + "text": "move the ball -3 z", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 12 + } + ] + }, + { + "text": "move the box forward", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 11 + } + ] + }, + { + "text": "move the box up 3 units", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 11 + } + ] + }, + { + "text": "move the car left", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 11 + } + ] + }, + { + "text": "move the cone 3 on the x", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 12 + } + ] + }, + { + "text": "move the cube 3 units on the y axis", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 12 + } + ] + }, + { + "text": "move the tree right", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 12 + } + ] + }, + { + "text": "pull the ball forward", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 12 + } + ] + }, + { + "text": "push the cone back", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 12 + } + ] + }, + { + "text": "raise the box by 5", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 10, + "endPos": 12 + } + ] + }, + { + "text": "roll the ball right 5", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 12 + } + ] + }, + { + "text": "rotate the car clockwise", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 11, + "endPos": 13 + } + ] + }, + { + "text": "rotate the cube left", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 11, + "endPos": 14 + } + ] + }, + { + "text": "scale boxey down", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 6, + "endPos": 10 + } + ] + }, + { + "text": "scale cube up", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 6, + "endPos": 9 + } + ] + }, + { + "text": "scale george bigger", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 6, + "endPos": 11 + } + ] + }, + { + "text": "scale pill bigger", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 6, + "endPos": 9 + } + ] + }, + { + "text": "scale pill down", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 6, + "endPos": 9 + } + ] + }, + { + "text": "scale pill up", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 6, + "endPos": 9 + } + ] + }, + { + "text": "scale test tube bigger", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 6, + "endPos": 14 + } + ] + }, + { + "text": "scale test tube down", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 6, + "endPos": 14 + } + ] + }, + { + "text": "scale test tube larger", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 6, + "endPos": 14 + } + ] + }, + { + "text": "scale test tube smaller", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 6, + "endPos": 14 + } + ] + }, + { + "text": "scale the box up", + "intent": "MR.Transform", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 10, + "endPos": 12 + } + ] + }, + { + "text": "set bambi to teal", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 4, + "endPos": 8 + }, + { + "entity": "MR.Color", + "startPos": 13, + "endPos": 16 + } + ] + }, + { + "text": "set bouncy ball to dark slate gray", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 4, + "endPos": 14 + }, + { + "entity": "MR.Color", + "startPos": 19, + "endPos": 33 + } + ] + }, + { + "text": "set bouncy ball to yellow", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 4, + "endPos": 14 + }, + { + "entity": "MR.Color", + "startPos": 19, + "endPos": 24 + } + ] + }, + { + "text": "set mike to be orange", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 4, + "endPos": 7 + }, + { + "entity": "MR.Color", + "startPos": 15, + "endPos": 20 + } + ] + }, + { + "text": "set test tube orange", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 4, + "endPos": 12 + }, + { + "entity": "MR.Color", + "startPos": 14, + "endPos": 19 + } + ] + }, + { + "text": "set the box to blue", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 8, + "endPos": 10 + }, + { + "entity": "MR.Color", + "startPos": 15, + "endPos": 18 + } + ] + }, + { + "text": "set the cube the purple", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 8, + "endPos": 11 + }, + { + "entity": "MR.Color", + "startPos": 17, + "endPos": 22 + } + ] + }, + { + "text": "set the cube to blue", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 8, + "endPos": 11 + }, + { + "entity": "MR.Color", + "startPos": 16, + "endPos": 19 + } + ] + }, + { + "text": "set the cube to lime green", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 8, + "endPos": 11 + }, + { + "entity": "MR.Color", + "startPos": 16, + "endPos": 25 + } + ] + }, + { + "text": "show the globe", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 13 + } + ] + }, + { + "text": "shrink it", + "intent": "MR.Transform", + "entities": [] + }, + { + "text": "shrink what i'm looking at", + "intent": "MR.Transform", + "entities": [] + }, + { + "text": "tell john to jump", + "intent": "MR.PerformAction", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 8 + }, + { + "entity": "MR.CharacterAction", + "startPos": 13, + "endPos": 16 + } + ] + }, + { + "text": "turn boxey blue", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 9 + }, + { + "entity": "MR.Color", + "startPos": 11, + "endPos": 14 + } + ] + }, + { + "text": "turn george dark slate blue", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 10 + }, + { + "entity": "MR.Color", + "startPos": 12, + "endPos": 26 + } + ] + }, + { + "text": "turn mary invisible", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 8 + } + ] + }, + { + "text": "turn off the light", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 13, + "endPos": 17 + } + ] + }, + { + "text": "turn on statistics", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 8, + "endPos": 17 + } + ] + }, + { + "text": "turn roundy black", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 10 + }, + { + "entity": "MR.Color", + "startPos": 12, + "endPos": 16 + } + ] + }, + { + "text": "turn roundy blue", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 10 + }, + { + "entity": "MR.Color", + "startPos": 12, + "endPos": 15 + } + ] + }, + { + "text": "turn roundy chartreuse", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 10 + }, + { + "entity": "MR.Color", + "startPos": 12, + "endPos": 21 + } + ] + }, + { + "text": "turn sam black", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 7 + }, + { + "entity": "MR.Color", + "startPos": 9, + "endPos": 13 + } + ] + }, + { + "text": "turn sam chartreuse", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 7 + }, + { + "entity": "MR.Color", + "startPos": 9, + "endPos": 18 + } + ] + }, + { + "text": "turn sam green", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 7 + }, + { + "entity": "MR.Color", + "startPos": 9, + "endPos": 13 + } + ] + }, + { + "text": "turn sam red", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 7 + }, + { + "entity": "MR.Color", + "startPos": 9, + "endPos": 11 + } + ] + }, + { + "text": "turn steve blue", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceName", + "startPos": 5, + "endPos": 9 + }, + { + "entity": "MR.Color", + "startPos": 11, + "endPos": 14 + } + ] + }, + { + "text": "turn the box blue", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 11 + }, + { + "entity": "MR.Color", + "startPos": 13, + "endPos": 16 + } + ] + }, + { + "text": "turn the car alice blue", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 11 + }, + { + "entity": "MR.Color", + "startPos": 13, + "endPos": 22 + } + ] + }, + { + "text": "turn the cone red", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 12 + }, + { + "entity": "MR.Color", + "startPos": 14, + "endPos": 16 + } + ] + }, + { + "text": "turn the cube blue", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 12 + }, + { + "entity": "MR.Color", + "startPos": 14, + "endPos": 17 + } + ] + }, + { + "text": "turn the cube green", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 12 + }, + { + "entity": "MR.Color", + "startPos": 14, + "endPos": 18 + } + ] + }, + { + "text": "turn the plane purple", + "intent": "MR.ChangeAppearance", + "entities": [ + { + "entity": "MR.InstanceType", + "startPos": 9, + "endPos": 13 + }, + { + "entity": "MR.Color", + "startPos": 15, + "endPos": 20 + } + ] + } + ] +} \ No newline at end of file diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Domains/MRLUIS.json.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Domains/MRLUIS.json.meta new file mode 100644 index 0000000..1be786c --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Domains/MRLUIS.json.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 75f0facfa9b3f2d4d9a5dd8576d25124 +timeCreated: 1523236001 +licenseType: Pro +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/README.md b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/README.md new file mode 100644 index 0000000..9d1109f --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/README.md @@ -0,0 +1,38 @@ +# LUIS for XR + +LUIS for XR is a reference implementation for Natural Language Understanding in XR applications using [LUIS](https://www.luis.ai/home). + +- [Why Natural Language](#why-natural-language) +- [Getting Started](#getting-started) +- [System Requirements](#system-requirements) +- [Special Thanks](#special-thanks) + + +## Why Natural Language + +For an overview of Natural Language and why it's more powerful than traditional voice commands, please see: + +[Natural Language for Simulations](http://www.roadtomr.com/2018/05/08/2508/natural-language-for-simulations) + +[![](http://www.roadtomr.com/wp-content/uploads/2018/05/NLSimFeature.png)](http://www.roadtomr.com/2018/05/08/2508/natural-language-for-simulations) + + +## Getting Started + +This reference is easy to use and is distributed as a [Unity Package](http://aka.ms/mrluispack). For a complete step-by-step guide on how to get started using it in your own applications, please see the article: + +[NLU For XR With LUIS](http://www.roadtomr.com/2018/05/08/2555/nlu-for-xr-with-luis) + +[![](http://www.roadtomr.com/wp-content/uploads/2018/05/LuisXRFeat.png)](http://www.roadtomr.com/2018/05/08/2555/nlu-for-xr-with-luis) + + +## System Requirements +- Unity 2017.2 or later +- `.NET 4.6` under player settings +- `.NET backend` under player settings + +Though you will see "Mixed Reality" mentioned throughout this reference, it is not exclusive to Windows Mixed Reality devices. This code will work with all Unity projects that support .NET 4.6. The only exception to this rule is the **Luis Dictation Manager** which needs Windows 10 APIs to access the microphone. This component is optional and will work on all devices that run Windows 10, including HoloLens. + + +## Special Thanks ## +The [earliest prototype](https://github.com/ashanhol/LUISMR) of this project was developed during an internal Microsoft hack in December 2017. That team consisted of [Adina Shanholtz](http://adinashanholtz.com), [Anna Fear](https://www.linkedin.com/in/avfear) and [David Douglas](http://www.deadlyfingers.net). The Reference Architecture here evolved out that prototype during a Microsoft + Partner hack in February 2018. The primary contributors to this reference included [Jared Bienz](https://www.linkedin.com/in/jbienz) from [Microsoft](http://www.microsoft.com), [Michael House](https://www.linkedin.com/in/housemichael) from [Object Theory](http://objecttheory.com) and [Stephen Hodgson](https://www.linkedin.com/in/stephenjhodgson) from [Valorem](https://www.valorem.com). diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/README.md.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/README.md.meta new file mode 100644 index 0000000..5a9b277 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/README.md.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 29dbc198602d76f4aa16b238137ce16a +timeCreated: 1518192966 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts.meta new file mode 100644 index 0000000..af49e13 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 04ee24cfdb53edd438723456060afdb8 +folderAsset: yes +timeCreated: 1518189239 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Context.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Context.meta new file mode 100644 index 0000000..98ea0f3 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Context.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: de8d4989ea4aea3438cb679b4986522e +folderAsset: yes +timeCreated: 1524157088 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Context/IContextProvider.cs b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Context/IContextProvider.cs new file mode 100644 index 0000000..c36dcf8 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Context/IContextProvider.cs @@ -0,0 +1,47 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. +// +// 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. +// + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Microsoft.MR.LUIS +{ + /// + /// Captures context for a LUIS prediction. + /// + public interface IContextProvider + { + /// + /// Captures context information for a LUIS prediction. + /// + /// + /// The where information will be stored. + /// + void CaptureContext(PredictionContext context); + } +} diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Context/IContextProvider.cs.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Context/IContextProvider.cs.meta new file mode 100644 index 0000000..e4b4d43 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Context/IContextProvider.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 85f67023e4220e24bb994aeaa3c33bce +timeCreated: 1518567393 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Context/PredictionContext.cs b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Context/PredictionContext.cs new file mode 100644 index 0000000..f2685da --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Context/PredictionContext.cs @@ -0,0 +1,114 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. +// +// 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. +// + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +namespace Microsoft.MR.LUIS +{ + /// + /// Provides contextual information that can be used during a LUIS prediction. + /// + public class PredictionContext : Dictionary + { + #region Constants + public const string GazedObjectKey = "GazedObject"; + public const string PointedObjectKey = "PointedObject"; + public const string PredictionTextKey = "PredictionText"; + public const string SpokenTextKey = "SpokenText"; + #endregion // Constants + + /// + /// Gets or sets the object that the user was gazing at for the prediction. + /// + public GameObject GazedObject + { + get + { + return this[GazedObjectKey] as GameObject; + } + set + { + this[GazedObjectKey] = value; + } + } + + /// + /// Gets or sets the object that the user was pointing at for the prediction. + /// + public GameObject PointedObject + { + get + { + return this[PointedObjectKey] as GameObject; + } + set + { + this[PointedObjectKey] = value; + } + } + + /// + /// Gets or sets the object that the user was pointing at for the prediction. + /// + public string PredictionText + { + get + { + return this[PredictionTextKey] as string; + } + set + { + this[PredictionTextKey] = value; + } + } + + /// + /// Gets or sets the text that the user spoke. + /// + public string SpokenText + { + get + { + return this[SpokenTextKey] as string; + } + set + { + this[SpokenTextKey] = value; + + // If spoken text is a valid string and there is no + // prediction text, set the prediction text as well. + if (!string.IsNullOrEmpty(value) && (!this.ContainsKey(PredictionTextKey))) + { + PredictionText = value; + } + } + } + } +} diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Context/PredictionContext.cs.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Context/PredictionContext.cs.meta new file mode 100644 index 0000000..fc6ce4d --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Context/PredictionContext.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a08df9bcf35fe5d4f918bd369980eda4 +timeCreated: 1518567393 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Editor.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Editor.meta new file mode 100644 index 0000000..152b885 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Editor.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: bcbfe18bd7c0e6c4c98e9d1f36df3d88 +folderAsset: yes +timeCreated: 1518730093 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Editor/LuisTesterEditor.cs b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Editor/LuisTesterEditor.cs new file mode 100644 index 0000000..5428a96 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Editor/LuisTesterEditor.cs @@ -0,0 +1,26 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +[CustomEditor(typeof(LuisTester))] +public class LuisTesterEditor : Editor +{ + public override void OnInspectorGUI() + { + DrawDefaultInspector(); + + if (Application.isPlaying) + { + if (GUILayout.Button("Predict")) + { + LuisTester tester = (LuisTester)target; + if (tester != null) + { + tester.TryPredict(); + } + } + } + } + +} diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Editor/LuisTesterEditor.cs.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Editor/LuisTesterEditor.cs.meta new file mode 100644 index 0000000..2581fa9 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Editor/LuisTesterEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a43913e0d47e66541803993b55cbc7d5 +timeCreated: 1518730131 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent.meta new file mode 100644 index 0000000..3aeb3cc --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ed9e86a5d15c84d47bbc6627ea889a64 +folderAsset: yes +timeCreated: 1524157130 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/AppearanceIntentHandler.cs b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/AppearanceIntentHandler.cs new file mode 100644 index 0000000..37304a8 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/AppearanceIntentHandler.cs @@ -0,0 +1,91 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. +// +// 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. +// + +using Microsoft.MR; +using Microsoft.MR.LUIS; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Microsoft.Cognitive.LUIS; +using System.Linq; + +/// +/// An intent handler that can change the visual appearance of an object. +/// +public class AppearanceIntentHandler : MonoBehaviour, IIntentHandler +{ + #region Internal Methods + private void HandleChangeAppearance(LuisMRResult result) + { + // Get the colors mentioned in the prediction + var colorEntity = result.PredictionResult.Entities.FirstOrDefaultItem("MR.Color"); + if (colorEntity == null) { return; } + + // Try to convert the entity color to a Unity color + Color color; + if (!ColorMapper.TryParseCssString(colorEntity.Value.ToLower(), out color)) + { + Debug.LogWarning($"The value \"{colorEntity.Value}\" does not map to a known color."); + return; + } + + // Get renderer + var renderer = GetComponent(); + if (renderer == null) { return; } + + // Set the color + renderer.material.color = color; + } + #endregion // Internal Methods + + #region Public Methods + /// + /// + /// + public bool CanHandle(string intentName) + { + switch (intentName) + { + case "MR.ChangeAppearance": + return true; + default: + return false; + } + } + + /// + /// + /// + public void Handle(Intent intent, LuisMRResult result) + { + switch (intent.Name) + { + case "MR.ChangeAppearance": + HandleChangeAppearance(result); + break; + } + } + #endregion // Public Methods +} diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/AppearanceIntentHandler.cs.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/AppearanceIntentHandler.cs.meta new file mode 100644 index 0000000..2e3d3e0 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/AppearanceIntentHandler.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 36a05a97b4eeab348b969b19722c8ab7 +timeCreated: 1518661349 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/DebugIntentHandler.cs b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/DebugIntentHandler.cs new file mode 100644 index 0000000..2cbc1e2 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/DebugIntentHandler.cs @@ -0,0 +1,79 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. +// +// 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. +// + +using Microsoft.Cognitive.LUIS; +using Microsoft.MR.LUIS; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +/// +/// A global intent handler that prints information about all received intents. +/// +public class DebugIntentHandler : IIntentHandler +{ + #region Public Methods + /// + /// + /// + public bool CanHandle(string intentName) + { + //This is the debug handler, we want it to be able to act on any intent. + return true; + } + + /// + /// + /// + public void Handle(Intent intent, LuisMRResult result) + { + //Build up a string of information about the result we got from LUIS + StringBuilder sb = new StringBuilder(); + sb.AppendLine($"Utterance: {result.Context.PredictionText}"); + sb.Append($"Intent: {intent.Name}"); + foreach (string entityKey in result.PredictionResult.Entities.Keys) + { + sb.Append($" [{entityKey}]"); + } + sb.AppendLine(); + sb.AppendLine($"Intent Score: {intent.Score.ToString("P")}"); + sb.AppendLine("Entities: "); + foreach (string entityKey in result.PredictionResult.Entities.Keys) + { + sb.AppendLine($" Entity: {entityKey}"); + foreach (Entity e in result.PredictionResult.Entities[entityKey]) + { + sb.AppendLine($" Value: {e.Value}"); + sb.AppendLine($" Score: {e.Score}"); + } + } + //Then write it to the console + Debug.Log(sb.ToString()); + } + #endregion // Public Methods +} \ No newline at end of file diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/DebugIntentHandler.cs.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/DebugIntentHandler.cs.meta new file mode 100644 index 0000000..ac4c512 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/DebugIntentHandler.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7dd2616a162189f48853f744373866cd +timeCreated: 1518679031 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/IIntentHandler.cs b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/IIntentHandler.cs new file mode 100644 index 0000000..9305594 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/IIntentHandler.cs @@ -0,0 +1,63 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. +// +// 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. +// + +using Microsoft.Cognitive.LUIS; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine.EventSystems; + +namespace Microsoft.MR.LUIS +{ + /// + /// The interface for a class that can handle a LUIS MR intent. + /// + public interface IIntentHandler : IEventSystemHandler + { + /// + /// Returns true if the handler can handle the specified intent. + /// + /// + /// The name of the intent to test. + /// + /// + /// true if the intent can be handled; otherwise false. + /// + bool CanHandle(string intentName); + + /// + /// Handles the intent stored within the . + /// + /// + /// The to handle. + /// + /// + /// The that contains the result of the prediction. + /// + void Handle(Intent intent, LuisMRResult result); + } +} diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/IIntentHandler.cs.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/IIntentHandler.cs.meta new file mode 100644 index 0000000..5f95403 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/IIntentHandler.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: cb96736b07220c74aaf1fbc1efce1808 +timeCreated: 1518638625 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/IntentEventData.cs b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/IntentEventData.cs new file mode 100644 index 0000000..2a7dd93 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/IntentEventData.cs @@ -0,0 +1,91 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. +// +// 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. +// + +using System; +using System.Collections; +using System.Collections.Generic; +using Microsoft.Cognitive.LUIS; +using UnityEngine; +using UnityEngine.EventSystems; + +namespace Microsoft.MR.LUIS +{ + /// + /// Provides a method of handling LUIS intents through the Unity Event system. + /// + public class IntentEventData : BaseEventData + { + #region Constructors + /// + /// Initializes a new . + /// + /// + /// The event system that the event should attach to. + /// + public IntentEventData(EventSystem eventSystem) : base(eventSystem) { } + #endregion // Constructors + + #region Public Methods + /// + /// Reinitializes the event to new values. + /// + /// + /// The that should be handled by the event. + /// + /// + /// The that was returned by the prediction. + /// + public void Initialize(Intent intent, LuisMRResult result) + { + // Validate + if (intent == null) throw new ArgumentNullException(nameof(intent)); + if (result == null) throw new ArgumentNullException(nameof(result)); + + // Store + Reset(); + Result = result; + Intent = intent; + } + #endregion // Public Methods + + #region Public Properties + /// + /// Gets the that should be handled by the event. + /// + public Intent Intent { get; private set; } + + /// + /// Gets the that was returned by the prediction. + /// + /// + /// The contains additional information that may be helpful + /// to process the intent. For example, contains the + /// Context information that was captured for + /// the prediction. + /// + public LuisMRResult Result { get; private set; } + #endregion // Public Properties + } +} diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/IntentEventData.cs.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/IntentEventData.cs.meta new file mode 100644 index 0000000..8c07235 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/IntentEventData.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ec83674a71bf53946a5e76b3c9aa1e83 +timeCreated: 1518635607 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/TransformIntentHandler.cs b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/TransformIntentHandler.cs new file mode 100644 index 0000000..f5ba7fc --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/TransformIntentHandler.cs @@ -0,0 +1,155 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. +// +// 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. +// + +using Microsoft.MR.LUIS; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Microsoft.Cognitive.LUIS; +using System.Linq; + +/// +/// An intent handler that can modify the transform of an object. +/// +public class TransformIntentHandler : MonoBehaviour, IIntentHandler +{ + #region Unity Inspector Variables + [Tooltip("The amount to rotate by if no amount is specified.")] + public float unspecifiedRotateAmount = 45f; + + [Tooltip("The amount to scale by if no amount is specified.")] + public float unspecifiedScaleAmount = 0.25f; + #endregion // Unity Inspector Variables + + #region Internal Methods + private void DoRotate(LuisMRResult result) + { + // Which direction? + var roateDirection = result.PredictionResult.Entities.FirstOrDefaultItem("MR.RotateDirection"); + bool counterClockwise = (roateDirection?.Value == "counterclockwise"); + + // TODO: Determine which amount + float amount = unspecifiedRotateAmount; + + // Rotate + gameObject.transform.Rotate(gameObject.transform.up, (counterClockwise ? -amount : amount)); + } + + private void DoScale(LuisMRResult result) + { + // Which direction? + var scaleDirection = result.PredictionResult.Entities.FirstOrDefaultItem("MR.ScaleDirection"); + if (scaleDirection == null) { return; } + var direction = scaleDirection.FirstOrDefaultResolution(); + + // TODO: Determine which amount + float amount = unspecifiedScaleAmount; + + // Actual scale + switch (direction.ToLower()) + { + case "decrease": + //gameObject.transform.localScale.Scale(new Vector3(amount, amount, amount)); + gameObject.transform.localScale *= (1.0f - amount); + break; + case "increase": + gameObject.transform.localScale *= (1.0f + amount); + break; + } + } + + private void DoTranslate(LuisMRResult result) + { + + } + + private void HandleTransform(LuisMRResult result) + { + // Which transform? + string transformTypeName = null; + var transformType = result.PredictionResult.Entities.FirstOrDefaultItem("MR.TransformType"); + if (transformType != null) { transformTypeName = transformType.Value; } + + // If a transform type wasn't specified, let's see if there's a scale? + if (transformTypeName == null) + { + // Try to get a scale direction + var scaleDirection = result.PredictionResult.Entities.FirstOrDefaultItem("MR.ScaleDirection"); + if (scaleDirection != null) { transformTypeName = "scale"; } + + } + + // If there's still no transform type name, nothing to do. + if (transformTypeName == null) + { + Debug.LogWarning("Received Transform intent but could not determine transform type."); + return; + } + + // Which transform type? + switch (transformTypeName) + { + case "rotate": + DoRotate(result); + break; + case "scale": + DoScale(result); + break; + case "translate": + DoTranslate(result); + break; + } + } + #endregion // Internal Methods + + #region Public Methods + /// + /// + /// + public bool CanHandle(string intentName) + { + switch (intentName) + { + case "MR.Transform": + return true; + default: + return false; + } + } + + /// + /// + /// + public void Handle(Intent intent, LuisMRResult result) + { + switch (intent.Name) + { + case "MR.Transform": + HandleTransform(result); + break; + } + } + #endregion // Public Methods +} diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/TransformIntentHandler.cs.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/TransformIntentHandler.cs.meta new file mode 100644 index 0000000..e40b0a8 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Intent/TransformIntentHandler.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 1bcce45eed8650e41a20b77fb255c5e0 +timeCreated: 1518661349 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisDictationManager.cs b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisDictationManager.cs new file mode 100644 index 0000000..2c00a9d --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisDictationManager.cs @@ -0,0 +1,422 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. +// +// 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. +// + +using System; +using System.Collections; +using System.Text; +using UnityEngine; +using UnityEngine.Windows.Speech; + + +namespace Microsoft.MR.LUIS +{ + /// + /// Provides a method of invoking LUIS using speech recognized by . + /// + public class LuisDictationManager : MonoBehaviour + { + #region Member Variables + private string deviceName = string.Empty; // Empty string specifies the default microphone. + private DictationRecognizer dictationRecognizer; + private string dictationResult; // String result of the current dictation. + private bool isListening; + private bool isRecording; + private bool isTransitioning; + private int samplingRate; // The device audio sampling rate. + private StringBuilder textSoFar = new StringBuilder(); // Caches the text currently being displayed in dictation display text. + #endregion // Member Variables + + #region Unity Inspector Variables + [Tooltip("The time length in seconds before dictation recognizer session ends due to lack of audio input.")] + [Range(1f, 60f)] + [SerializeField] + private float autoSilenceTimeout = 2f; + + [Tooltip("Whether or not the dictation manager should listen on start.")] + [SerializeField] + private bool autoStartListening = true; + + [Tooltip("Whether or not the dictation manager should continue to listen after a recognition or timeout.")] + [SerializeField] + private bool continuousRecognition = true; + + [Tooltip("Optional TextMesh that can be used to show the status of the manager.")] + [SerializeField] + private TextMesh debugOutput; + + [Tooltip("The time length in seconds before dictation recognizer session ends due to lack of audio input in case there was no audio heard in the current session.")] + [Range(1f, 60f)] + [SerializeField] + private float initialSilenceTimeout = 5f; + + [Tooltip("The LuisManager where recognitions will be routed.")] + [SerializeField] + private LuisManager luisManager; + + [Tooltip("The minimum confidence level for the recognition to be passed to LuisManager.")] + [SerializeField] + private ConfidenceLevel minimumConfidenceLevel = ConfidenceLevel.Medium; + + [Tooltip("Length in seconds for the manager to listen.")] + [Range(1, 60)] + [SerializeField] + private int recordingTime = 10; + #endregion // Unity Inspector Variables + + #region Internal Methods + private void LogInfo(string message, bool toConsole = true) + { + if (toConsole) + { + Debug.Log(message); + } + if (debugOutput != null) + { + debugOutput.color = Color.white; + debugOutput.text = message; + } + } + + private void LogError(string message, bool toConsole = true) + { + if (toConsole) + { + Debug.LogError(message); + } + if (debugOutput != null) + { + debugOutput.color = Color.red; + debugOutput.text = message; + } + + } + + private void LogWarn(string message, bool toConsole = true) + { + if (toConsole) + { + Debug.LogWarning(message); + } + if (debugOutput != null) + { + debugOutput.color = Color.yellow; + debugOutput.text = message; + } + } + + /// + /// Turns on the dictation recognizer and begins recording audio from the default microphone. + /// + /// The time length in seconds before dictation recognizer session ends due to lack of audio input in case there was no audio heard in the current session. + /// The time length in seconds before dictation recognizer session ends due to lack of audio input. + /// Length in seconds for the manager to listen. + /// + private IEnumerator StartListeningInternal(float initialSilenceTimeout = 5f, float autoSilenceTimeout = 20f, int recordingTime = 10) + { + #if UNITY_WSA || UNITY_STANDALONE_WIN + if (isListening || isTransitioning) + { + Debug.LogWarning("Unable to start recording"); + yield break; + } + + LogInfo("Starting recognizer"); + + isListening = true; + isTransitioning = true; + + if (PhraseRecognitionSystem.Status == SpeechSystemStatus.Running) + { + PhraseRecognitionSystem.Shutdown(); + } + + while (PhraseRecognitionSystem.Status == SpeechSystemStatus.Running) + { + yield return null; + } + + dictationRecognizer.InitialSilenceTimeoutSeconds = initialSilenceTimeout; + dictationRecognizer.AutoSilenceTimeoutSeconds = autoSilenceTimeout; + dictationRecognizer.Start(); + + LogInfo("Waiting for speech system"); + + while (dictationRecognizer.Status == SpeechSystemStatus.Stopped) + { + yield return null; + } + + LogInfo("Starting microphone"); + + // Start recording from the microphone. + Microphone.Start(deviceName, false, recordingTime, samplingRate); + textSoFar.Clear(); + isTransitioning = false; + + LogInfo("Listening"); + + #else + return null; + #endif + } + + /// + /// Ends the recording session. + /// + private IEnumerator StopListeningInternal() + { + #if UNITY_WSA || UNITY_STANDALONE_WIN + if (!isListening || isTransitioning) + { + LogWarn("Unable to stop recording"); + yield break; + } + + isListening = false; + isTransitioning = true; + + LogInfo("Stopping microphone"); + Microphone.End(deviceName); + + LogInfo("Stopping dictation"); + if (dictationRecognizer.Status == SpeechSystemStatus.Running) + { + dictationRecognizer.Stop(); + } + + LogInfo("Waiting for speech to stop"); + while (dictationRecognizer.Status == SpeechSystemStatus.Running) + { + yield return null; + } + + PhraseRecognitionSystem.Restart(); + isTransitioning = false; + + LogInfo("Stopped listening"); + + #else + return null; + #endif + } + #endregion // Internal Methods + + #region Overrides / Event Handlers + #if UNITY_WSA || UNITY_STANDALONE_WIN + /// + /// This event is fired while the user is talking. As the recognizer listens, it provides text of what it's heard so far. + /// + /// The currently hypothesized recognition. + private void DictationRecognizer_DictationHypothesis(string text) + { + // We don't want to append to textSoFar yet, because the hypothesis may have changed on the next event. + dictationResult = textSoFar.ToString() + " " + text + "..."; + LogInfo(text, toConsole:false); + } + + /// + /// This event is fired after the user pauses, typically at the end of a sentence. The full recognized string is returned here. + /// + /// The text that was heard by the recognizer. + /// A representation of how confident (rejected, low, medium, high) the recognizer is of this recognition. + private async void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence) + { + // We have final text + dictationResult = text; + + // Clear intermediate text + textSoFar.Clear(); + + // Make sure we have a minimum confidence level + if (confidence > minimumConfidenceLevel) // Numerically this is inverted. Lower confidence levels are higher numbers. + { + LogWarn($"Heard '{dictationResult}' but confidence was too low."); + } + else + { + if (luisManager != null) + { + LogInfo($"Heard '{dictationResult}', sending to LUIS."); + await luisManager.PredictAndHandleAsync(text); + } + else + { + LogError($"Heard '{dictationResult}' but no LuisManager available."); + } + } + } + + /// + /// This event is fired when the recognizer stops, whether from StartRecording() being called, a timeout occurring, or some other error. + /// Typically, this will simply return "Complete". In this case, we check to see if the recognizer timed out. + /// + /// An enumerated reason for the session completing. + private void DictationRecognizer_DictationComplete(DictationCompletionCause cause) + { + // Clear for next recognition + textSoFar.Clear(); + dictationResult = string.Empty; + + // If continuous, start again. Otherwise stop. + if (continuousRecognition) + { + dictationRecognizer.Start(); + } + else + { + StopListening(); + } + } + + /// + /// This event is fired when an error occurs. + /// TODO: Hook up something so any external actors know we've errored. + /// + /// The string representation of the error reason. + /// The int representation of the hresult. + private void DictationRecognizer_DictationError(string error, int hresult) + { + dictationResult = error + "\nHRESULT: " + hresult.ToString(); + + textSoFar.Clear(); + dictationResult = string.Empty; + + if (debugOutput != null) + { + debugOutput.color = Color.red; + debugOutput.text = error; + } + + Debug.LogError(error); + StartCoroutine(StopListeningInternal()); + + } + #endif + #endregion // Overrides / Event Handlers + + #region Unity Overrides + protected virtual void Awake() + { + luisManager = gameObject.GetComponent(); + // Query the maximum frequency of the default microphone. + int minSamplingRate; // Not used. + Microphone.GetDeviceCaps(deviceName, out minSamplingRate, out samplingRate); + + dictationRecognizer = new DictationRecognizer(); + dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis; + dictationRecognizer.DictationResult += DictationRecognizer_DictationResult; + dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete; + dictationRecognizer.DictationError += DictationRecognizer_DictationError; + } + + protected virtual void Start() + { + // If no LuisManager, try to get one from the same GameObject. + if (luisManager == null) + { + luisManager = GetComponent(); + } + + // Validate components + if (luisManager == null) + { + Debug.LogError($"{nameof(luisManager)} is not set to a valid instance. {nameof(LuisDictationManager)} is disabled."); + enabled = false; + return; + } + + // Start listening? + if (autoStartListening) + { + StartListening(); + } + } + + protected virtual void OnDestroy() + { + if (dictationRecognizer != null) + { + dictationRecognizer.Dispose(); + dictationRecognizer = null; + } + } + #endregion // Unity Overrides + + #region Public Methods + /// + /// Starts the dictation listening. + /// + public void StartListening() + { + if (isTransitioning) + { + return; + } + else + { + StartCoroutine(StartListeningInternal(initialSilenceTimeout, autoSilenceTimeout, recordingTime)); + } + } + + /// + /// Stops the dictation from listening. + /// + public void StopListening() + { + if (isTransitioning) + { + return; + } + else + { + StartCoroutine(StopListeningInternal()); + } + } + #endregion // Public Methods + + #region Public Properties + /// + /// Gets or sets the time length in seconds before dictation recognizer session ends due to lack of audio input. + /// + public float AutoSilenceTimeout + { + get + { + return autoSilenceTimeout; + } + set + { + if ((value < 1) || (value > 60)) throw new ArgumentOutOfRangeException(nameof(value)); + autoSilenceTimeout = value; + } + } + + /// + /// Gets a value that indicates if dictation is listening. + /// + public bool IsListening => isListening; + #endregion // Public Properties + } +} diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisDictationManager.cs.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisDictationManager.cs.meta new file mode 100644 index 0000000..4028bc3 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisDictationManager.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 3abd7ed5b00ba0042800ddd8d0014fd3 +timeCreated: 1518721249 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisExtensions.cs b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisExtensions.cs new file mode 100644 index 0000000..ac8da1d --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisExtensions.cs @@ -0,0 +1,101 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. +// +// 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. +// + +using Microsoft.Cognitive.LUIS; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Microsoft.MR.LUIS +{ + /// + /// Provides extensions to the LUIS SDK for .Net. + /// + static public class LuisExtensions + { + /// + /// Gets the first item in the list with the specified key or + /// if the list or item is not found. + /// + /// + /// The lookup list where the item may be found. + /// + /// + /// The name of the list to search. + /// + /// + /// The first item in the list, if found; otherwise . + /// + static public T FirstOrDefaultItem(this IDictionary> lookup, string name) + { + // Validate + if (lookup == null) throw new ArgumentNullException(nameof(lookup)); + if (string.IsNullOrEmpty(name)) throw new ArgumentException(nameof(name)); + + // Try and get the table + if (!lookup.ContainsKey(name)) { return default(T); } + + // Get the table and return the first if found + return lookup[name].FirstOrDefault(); + } + + /// + /// Gets the first resolved value for the entity or + /// if there is no resolution. + /// + /// + /// The entity to resolve. + /// + /// + /// The first resolved value for the entity or + /// if there is no resolution. + /// + static public string FirstOrDefaultResolution(this Entity entity) + { + // Validate + if (entity == null) throw new ArgumentNullException(nameof(entity)); + + // Attempt to get resolution + if (entity.Resolution.ContainsKey("values")) + { + var resolution = entity.Resolution["values"]; + + // Remove extra characters + var resString = resolution.ToString().Replace("[\r\n \"", ""); + resString = resString.Replace("\"\r\n]", ""); + + // Return cleaned resolution + return resString; + } + else + { + // No resolution + return null; + } + } + } +} diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisExtensions.cs.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisExtensions.cs.meta new file mode 100644 index 0000000..02fffe7 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisExtensions.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 9aa46e381ca5d0640ac2c097f0d56755 +timeCreated: 1518720536 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisMRResult.cs b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisMRResult.cs new file mode 100644 index 0000000..4e8b292 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisMRResult.cs @@ -0,0 +1,152 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. +// +// 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. +// + +using Microsoft.Cognitive.LUIS; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +namespace Microsoft.MR.LUIS +{ + /// + /// Represents a result of a LUIS prediction including entities mapped to the scene. + /// + public class LuisMRResult + { + #region Member Variables + private PredictionContext context = new PredictionContext(); + private Dictionary> resolvedEntities = new Dictionary>(); + #endregion // Member Variables + + #region Public Methods + /// + /// Gets all entities that have been resolved to scene objects. + /// + /// + /// A list of all resolved entities. + /// + public List GetAllResolvedEntities() + { + List list = new List(); + foreach (var entityList in ResolvedEntities) + { + list.AddRange(entityList.Value); + } + return list; + } + + /// + /// Maps the specified entity to the specified game object. + /// + /// + /// The set of context entity data to map. + /// + + public void Map(EntityMap map) + { + // First, make sure the entity table is created + List entityMapList; + if (!resolvedEntities.TryGetValue(map.Entity.Name, out entityMapList)) + { + resolvedEntities[map.Entity.Name] = new List() { map }; + } + else + { + entityMapList.Add(map); + } + } + + /// + /// Maps the specified entity to the specified game object. + /// + /// + /// The LUIS to map. + /// + /// + /// The Unity that the entity maps to. + /// + /// + /// The resolver that resolved the entity. + /// + public void Map(Entity entity, GameObject gameObject, IEntityResolver resolver) + { + // Validate + if (entity == null) throw new ArgumentNullException(nameof(entity)); + if (gameObject == null) throw new ArgumentNullException(nameof(gameObject)); + + // Create the map entry + EntityMap map = new EntityMap { Entity = entity, GameObject = gameObject, Resolver = resolver }; + + // Map + Map(map); + } + #endregion // Public Methods + + #region Public Properties + /// + /// Gets or sets the that supplies additional context for the prediction. + /// + public PredictionContext Context + { + get + { + return context; + } + set + { + if (value == null) throw new ArgumentNullException(nameof(value)); + this.context = value; + } + } + + /// + /// Gets or sets a value that indicates if the result was handled by an intent handler. + /// + public bool Handled { get; set; } + + /// + /// Gets or sets the that was returned from the LUIS prediction. + /// + /// + /// The returned by the LUIS prediction. + /// + public LuisResult PredictionResult { get; set; } + + ///// + ///// Collection of objects parsed accessed though a dictionary for easy access. + ///// + //public DDictionary> CompositeEntities { get; set; } + + /// + /// Gets the collection of mappings between LUIS objects and their corresponding scene + /// . Each mapping table is keyed by the entity type. + /// + public Dictionary> ResolvedEntities => resolvedEntities; + #endregion // Public Properties + } +} diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisMRResult.cs.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisMRResult.cs.meta new file mode 100644 index 0000000..a48b442 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisMRResult.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 92a113b770de43d498af4ee3a119a3f6 +timeCreated: 1518483796 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisManager.cs b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisManager.cs new file mode 100644 index 0000000..721d971 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisManager.cs @@ -0,0 +1,366 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. +// +// 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. +// + +using Microsoft.Cognitive.LUIS; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Net; +using System.Net.Security; +using System.Threading.Tasks; +using UnityEngine; +using System.Linq; + +#if !UNITY_WSA || UNITY_EDITOR +using System.Security.Cryptography.X509Certificates; +#endif + +namespace Microsoft.MR.LUIS +{ + /// + /// Manages configuration and connection to the LUIS service. + /// + public class LuisManager : MonoBehaviour + { + #region Member Variables + private LuisClient client; + private List contextProviders = new List(); + private List entityResolvers = new List(); + private List intentHandlers = new List(); + #endregion // Member Variables + + #region Unity Inspector Variables + [Tooltip("The application ID of the LUIS application.")] + [SecretValue("LUIS.AppId")] + public string AppId; + + [Tooltip("The application subscription key of the LUIS application.")] + [SecretValue("LUIS.AppKey")] + public string AppKey; + + [Tooltip("String that represents the domain of the LUIS endpoint.")] + [SecretValue("LUIS.Domain")] + public string Domain = ""; + + [Tooltip("The minimum confidence level for an intent to be handled.")] + [Range(0,1)] + public double MinimumIntentScore = 0.5; + + [Tooltip("Whether to return all intents and not just the top scoring intent.")] + public bool Verbose = true; + #endregion // Unity Inspector Variables + + #region Internal Methods + /// + /// Makes sure that the client has been created. + /// + private void EnsureClient() + { + if (client == null) + { + if (!this.enabled) { throw new InvalidOperationException($"Attempting to connect to LUIS but {nameof(LuisManager)} is not enabled."); } + client = new LuisClient(AppId, AppKey, Verbose, Domain); + } + } + #endregion // Internal Methods + + #region Unity Overrides + protected virtual void Awake() + { + #if !UNITY_WSA || UNITY_EDITOR + //This works, and one of these two options are required as Unity's TLS (SSL) support doesn't currently work like .NET + //ServicePointManager.CertificatePolicy = new CustomCertificatePolicy(); + + //This 'workaround' seems to work for the .NET Storage SDK, but not event hubs. + //If you need all of it (ex Storage, event hubs,and app insights) then consider using the above. + //If you don't want to check an SSL certificate coming back, simply use the return true delegate below. + //Also it may help to use non-ssl URIs if you have the ability to, until Unity fixes the issue (which may be fixed by the time you read this) + ServicePointManager.ServerCertificateValidationCallback = CheckValidCertificateCallback; //delegate { return true; }; + #endif + + // Attempt to load secrets + SecretHelper.LoadSecrets(this); + + // Make sure we have enough to continue + if (string.IsNullOrEmpty(AppId)) + { + Debug.LogErrorFormat($"'{nameof(AppId)}' is required but is not set. {nameof(LuisManager)} has been disabled."); + this.enabled = false; + } + + if (string.IsNullOrEmpty(AppKey)) + { + Debug.LogErrorFormat($"'{nameof(AppKey)}' is required but is not set. {nameof(LuisManager)} has been disabled."); + this.enabled = false; + } + + if (string.IsNullOrEmpty(Domain)) + { + Debug.LogErrorFormat($"'{nameof(Domain)}' is required but is not set. {nameof(LuisManager)} has been disabled."); + this.enabled = false; + } + + // Add default strategies (can be overridden) + AddDefaultStrategies(); + } + #endregion // Unity Overrides + + #region Overridables / Event Triggers + /// + /// Adds default context providers, entity resolvers and intent handlers. + /// + protected virtual void AddDefaultStrategies() + { + // Default Resolvers + EntityResolvers.Add(new EntityMetadataResolver()); + + // Default Handlers + IntentHandlers.Add(new ResolvedIntentForwarder()); + } + + #if !UNITY_WSA || UNITY_EDITOR + protected virtual bool CheckValidCertificateCallback(System.Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) + { + bool valid = true; + + // If there are errors in the certificate chain, look at each error to determine the cause. + if (sslPolicyErrors != SslPolicyErrors.None) + { + for (int i = 0; i < chain.ChainStatus.Length; i++) + { + if (chain.ChainStatus[i].Status != X509ChainStatusFlags.RevocationStatusUnknown) + { + chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain; + chain.ChainPolicy.RevocationMode = X509RevocationMode.Online; + chain.ChainPolicy.UrlRetrievalTimeout = new TimeSpan(0, 1, 0); + chain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllFlags; + bool chainIsValid = chain.Build((X509Certificate2)certificate); + if (!chainIsValid) + { + valid = false; + } + } + } + } + return valid; + } + #endif + + /// + /// Capture the current context for a prediction. + /// + /// + /// The where context is stored. + /// + /// + /// This is stage 1 in processing a LUIS utterance. + /// The default implementation enumerates through all objects in + /// and asks them to provide context. + /// + protected virtual void CaptureContext(PredictionContext context) + { + foreach (IContextProvider provider in contextProviders) + { + provider.CaptureContext(context); + } + } + + /// + /// Handles the final result for a LUIS prediction. + /// + /// + /// The that contains information about the prediction. + /// + /// + /// This is stage 4 in processing a LUIS utterance. The default implementation looks for + /// a global handler for the specified intent and executes it. If a global handler is not + /// found and there is only one mapped entity, the entity will be checked to see if it + /// can handle the intent. + /// + protected virtual void HandleIntent(LuisMRResult result) + { + // Which intent? + Intent intent = result.PredictionResult.TopScoringIntent; + + // Handle the intent + foreach (IIntentHandler handler in intentHandlers) + { + if (handler.CanHandle(intent.Name)) + { + handler.Handle(intent, result); + } + } + } + + /// + /// Attempts to resolve scene entities from LUIS entities. + /// + /// + /// The that provides context and storage for the resolution. + /// + /// + /// This is stage 3 in processing a LUIS utterance. + /// The default implementation enumerates through all objects in the + /// and asks them to resolve entities. + /// + protected virtual void ResolveEntities(LuisMRResult result) + { + foreach (IEntityResolver resolver in entityResolvers) + { + resolver.Resolve(result); + } + } + #endregion // Overridables / Event Triggers + + #region Public Methods + /// + /// Attempts a LUIS prediction on the specified context and if confidence is high enough, the intent is executed. + /// + /// + /// Context that is used for the prediction. Additional context may still be collected by + /// the . + /// + /// + /// A that yields the result of the operation as a . + /// + /// + /// At a minimum, must be included within the context. + /// + public virtual async Task PredictAndHandleAsync(PredictionContext context) + { + // Validate + if (context == null) throw new ArgumentNullException(nameof(context)); + if (string.IsNullOrEmpty(context.PredictionText)) throw new InvalidOperationException("At a minimum, PredictionText must be included within the context."); + + // Make sure we have a client + EnsureClient(); + + // Create our result object + LuisMRResult mrResult = new LuisMRResult() { Context = context }; + + // Stage 1: Capture context + CaptureContext(context); + + // Stage 2: Predict using the LUIS client + mrResult.PredictionResult = await client.Predict(context.PredictionText); + + // Only do the next two stages if we have the minimum required confidence + if (mrResult.PredictionResult.TopScoringIntent.Score >= MinimumIntentScore) + { + // Stage 3: Resolve Entities + ResolveEntities(mrResult); + + // Stage 4: Handle Intents + HandleIntent(mrResult); + } + + // Done + return mrResult; + } + /// + /// Attempts a LUIS prediction on the specified text and if confidence is high enough, the intent is executed. + /// + /// + /// The text used for the prediction. + /// + /// + /// A that yields the result of the operation as a . + /// + public virtual Task PredictAndHandleAsync(string text) + { + // Validate + if (string.IsNullOrEmpty(text)) throw new ArgumentException(nameof(text)); + + // Create a context and store the text + PredictionContext context = new PredictionContext() { PredictionText = text }; + + // Pass to context override + return PredictAndHandleAsync(context); + } + #endregion // Public Methods + + #region Public Properties + /// + /// Gets the instance created by this manager. + /// + public LuisClient Client + { + get + { + this.EnsureClient(); + return client; + } + } + + /// + /// Gets or sets the list of classes that can provide context for a LUIS prediction. + /// + public List ContextProviders + { + get + { + return contextProviders; + } + set + { + if (value == null) throw new ArgumentNullException(nameof(value)); + this.contextProviders = value; + } + } + + /// + /// Gets or sets the list of classes that can resolve LUIS Entity to GameObject relationships. + /// + public List EntityResolvers + { + get + { + return entityResolvers; + } + set + { + if (value == null) throw new ArgumentNullException(nameof(value)); + this.entityResolvers = value; + } + } + + /// + /// Gets or sets the list of handlers for LUIS intents. + /// + public List IntentHandlers + { + get + { + return intentHandlers; + } + set + { + if (value == null) throw new ArgumentNullException(nameof(value)); + this.intentHandlers = value; + } + } + #endregion // Public Properties + } +} \ No newline at end of file diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisManager.cs.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisManager.cs.meta new file mode 100644 index 0000000..dcf4dff --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisManager.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 9d268b595133a624f8d05847a7d3ef36 +timeCreated: 1518189330 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisTester.cs b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisTester.cs new file mode 100644 index 0000000..49f43c3 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisTester.cs @@ -0,0 +1,110 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. +// +// 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. +// + +using Microsoft.Cognitive.LUIS; +using Microsoft.MR.LUIS; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// Provides a quick way to test LUIS in a Unity scene. +/// +public class LuisTester : MonoBehaviour +{ + #region Unity Inspector Variables + [Tooltip("Enable debug handlers to increase debug information.")] + public bool EnableDebugging = true; + + [Tooltip("The LuisManager that the tester will interface with.")] + public LuisManager LuisManager; + + [Tooltip("Predict the Test Utterance automatically on start.")] + public bool PredictOnStart = true; + + [Tooltip("The utterance to test")] + public string TestUtterance = ""; + #endregion // Unity Inspector Variables + + #region Unity Overrides + void Start() + { + // If no manager specified, see if one is on the same GameObject + if (LuisManager == null) + { + LuisManager = GetComponent(); + } + + // Validate components + if (LuisManager == null) + { + Debug.LogErrorFormat("The {0} inspector field is not set and is required. {1} did not load.", nameof(LuisManager), this.GetType().Name); + enabled = false; + return; + } + + // Enable debugging? + if (EnableDebugging) + { + LuisManager.IntentHandlers.Add(new DebugIntentHandler()); + } + + // Predict on start? + if ((PredictOnStart) && (!string.IsNullOrEmpty(TestUtterance))) + { + TryPredict(); + } + } + #endregion // Unity Overrides + + #region Public Methods + /// + /// Attempts to try a prediction of the . + /// + public async void TryPredict() + { + if (!enabled) + { + Debug.LogError($"{nameof(LuisTester)} is not enabled. Can't predict."); + return; + } + + if (LuisManager == null) + { + Debug.LogError($"{nameof(LuisManager)} is not set to a valid instance."); + return; + } + + if (string.IsNullOrEmpty(TestUtterance)) + { + Debug.LogError($"{nameof(TestUtterance)} is empty. Nothing to predict."); + return; + } + + // Predict! + await LuisManager.PredictAndHandleAsync(TestUtterance); + } + #endregion // Public Methods +} diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisTester.cs.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisTester.cs.meta new file mode 100644 index 0000000..d5fc55a --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/LuisTester.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 49d7cd01fd87922428af51ee39a56761 +timeCreated: 1518568479 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve.meta new file mode 100644 index 0000000..1dfe18b --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d02aacc3cab885b4485f41a16041d4b1 +folderAsset: yes +timeCreated: 1524157155 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve/EntityMap.cs b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve/EntityMap.cs new file mode 100644 index 0000000..b528b0d --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve/EntityMap.cs @@ -0,0 +1,56 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. +// +// 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. +// + +using Microsoft.Cognitive.LUIS; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +namespace Microsoft.MR.LUIS +{ + /// + /// Represents a map between an recognized by LUIS and a in the scene. + /// + public class EntityMap + { + /// + /// Gets or sets the recognized by LUIS. + /// + public Entity Entity { get; set; } + + /// + /// Gets or sets the that represents the LUIS Entity. + /// + public GameObject GameObject { get; set; } + + /// + /// Gets or sets the resolver that resolved the entity. + /// + public IEntityResolver Resolver { get; set; } + } +} diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve/EntityMap.cs.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve/EntityMap.cs.meta new file mode 100644 index 0000000..6d27069 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve/EntityMap.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 5b352c2a399b5674285b54cd38873532 +timeCreated: 1518539056 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve/EntityMetadata.cs b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve/EntityMetadata.cs new file mode 100644 index 0000000..6549bfe --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve/EntityMetadata.cs @@ -0,0 +1,42 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. +// +// 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. +// + +using UnityEngine; + +namespace Microsoft.MR.LUIS +{ + /// + /// Provides data about a so that + /// can map a Luis in a result to the object. + /// + public class EntityMetadata : MonoBehaviour + { + [Tooltip("The Name of the Luis Entity that will be mapped to this object.")] + public string EntityName; + + [Tooltip("The Type of the Luis Entity that will be mapped to this object.")] + public string EntityType; + } +} diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve/EntityMetadata.cs.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve/EntityMetadata.cs.meta new file mode 100644 index 0000000..7453692 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve/EntityMetadata.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 191a39b4e52ca2042b4d6913e578660c +timeCreated: 1518674451 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve/EntityMetadataResolver.cs b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve/EntityMetadataResolver.cs new file mode 100644 index 0000000..48349e9 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve/EntityMetadataResolver.cs @@ -0,0 +1,151 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. +// +// 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. +// + +using Microsoft.Cognitive.LUIS; +using Microsoft.MR.LUIS; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +namespace Microsoft.MR.LUIS +{ + /// + /// Resolves entities in our prediction with entities in the scene. This resolver finds scene GameObjects by name or type. + /// The name and type of a GameObject in the scene is defined with the behavior. + /// + public class EntityMetadataResolver : IEntityResolver + { + #region Member Variables + private bool debugMessages = true; + private string[] entityNames = new string[] + { + "MR.InstanceName", + "MR.InstanceType" + }; + #endregion // Member Variables + + #region Public Methods + /// + /// Find all the scene GameObjects that have names matching the Entity value + /// + /// + public void Resolve(LuisMRResult result) + { + // Collect any entities that match the entity names we're looking for + List predictionEntities = result.PredictionResult.Entities.Where(x => entityNames.Contains(x.Key)).SelectMany(y => y.Value).ToList(); + + // If there are no entities in the prediction that we're looking for, nothing to do + if (predictionEntities.Count < 1) + { + if (debugMessages) + { + Debug.Log("No entities in the prediction match the names configured for the resolver."); + } + return; + } + + // Join the list of scene objects with prediction entities to get matches in the scene + IEnumerable meq = + from entity in predictionEntities + let entityName = entity.Value.ToLower() + from sceneEntity in GameObject.FindObjectsOfType() + where entityName.Equals(sceneEntity.EntityName.ToLower()) || entityName.Equals(sceneEntity.EntityType.ToLower()) + select new EntityMap() + { + Entity = entity, + GameObject = sceneEntity.gameObject, + Resolver = this + }; + List matchedEntities = meq.ToList(); + + //Add all our found entities to the result's entity map, which maps LUIS entities with scene entities. + foreach (EntityMap entityMap in matchedEntities) + { + // Create map entry + result.Map(entityMap); + + // Remove the entity from the prediction list to mark it as "mapped" + predictionEntities.Remove(entityMap.Entity); + } + + // If any entity is still in the prediction list, it was not matched. Log a warning. + if (debugMessages) + { + foreach (var entity in predictionEntities) + { + Debug.LogWarning($"Warning: {entity.Name} \"{entity.Value}\" could not be mapped to the scene."); + } + } + } + #endregion // Public Methods + + #region Public Properties + /// + /// Gets or sets a value that indicates if debug messages will be printed during resolution. + /// + /// + /// true if debug messages will be printed during resolution; otherwise false. + /// + public bool DebugMessages + { + get + { + return debugMessages; + } + set + { + debugMessages = value; + } + } + + /// + /// Gets or sets the list of entity names that will be resolved from the result. + /// + public string[] EntityNames + { + get + { + return entityNames; + } + set + { + // Changing? + if (entityNames != value) + { + // Validate + if (value.Length < 1) { throw new ArgumentException("Must have at least one valid entity name."); } + if (value.Any((s) => string.IsNullOrEmpty(s))) { throw new ArgumentException("Entity names cannot be null or empty."); } + + // Store + entityNames = value; + } + } + } + #endregion // Public Properties + } +} diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve/EntityMetadataResolver.cs.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve/EntityMetadataResolver.cs.meta new file mode 100644 index 0000000..81b473b --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve/EntityMetadataResolver.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: f2db6c0340c9eb741aec1ca4fb248e57 +timeCreated: 1518676170 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve/IEntityResolver.cs b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve/IEntityResolver.cs new file mode 100644 index 0000000..1667e46 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve/IEntityResolver.cs @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. +// +// 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. +// + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Microsoft.MR.LUIS +{ + /// + /// The interface for a class that can resolve a LUIS Entity into an application entity. + /// + public interface IEntityResolver + { + /// + /// Attempts to resolve entities in a to scene entities in a . + /// + /// + /// The where entities will be resolved. + /// + /// + /// An Entity resolver may use all of the information available in the to resolve LUIS + /// entities to scene entities. For example, the LUIS Entity "that" might be resolved using the + /// GazedObject stored in the + /// Context. + /// + void Resolve(LuisMRResult result); + } +} diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve/IEntityResolver.cs.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve/IEntityResolver.cs.meta new file mode 100644 index 0000000..0d4d9eb --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Resolve/IEntityResolver.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 3696159e1b11b8d42a1ac42fa97e1b71 +timeCreated: 1518483796 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Route.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Route.meta new file mode 100644 index 0000000..e661965 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Route.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 081e1d33da47fc846992b500054cc340 +folderAsset: yes +timeCreated: 1524157207 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Route/ResolvedIntentForwarder.cs b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Route/ResolvedIntentForwarder.cs new file mode 100644 index 0000000..1dec475 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Route/ResolvedIntentForwarder.cs @@ -0,0 +1,136 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. +// +// 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. +// + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Cognitive.LUIS; +using UnityEngine.EventSystems; + +namespace Microsoft.MR.LUIS +{ + /// + /// An that routes supported intents to resolved scene entities. + /// + public class ResolvedIntentForwarder : IIntentHandler + { + #region Member Variables + private List excludedIntents = new List(); + private List includedIntents = new List(); + private IntentEventData intentEventData; + #endregion // Member Variables + + /// + /// + /// + public bool CanHandle(string intentName) + { + // Is it explicitly excluded? + if (excludedIntents.Contains(intentName)) + { + return false; + } + + // Is it either wildcard or explicitly included? + if ((includedIntents.Count == 0) || (includedIntents.Contains(intentName))) + { + return true; + } + + // Not supported + return false; + } + + /// + /// + /// + public void Handle(Intent intent, LuisMRResult result) + { + // Validate + if (intent == null) throw new ArgumentNullException(nameof(intent)); + if (result == null) throw new ArgumentNullException(nameof(result)); + + // Make sure event data has been created + if (intentEventData == null) + { + intentEventData = new IntentEventData(EventSystem.current); + } + + // Update event data to current values + intentEventData.Initialize(intent, result); + + // Get all resolved entities + List resolvedEntities = result.GetAllResolvedEntities(); + + // Forward to all resolved entities + foreach (EntityMap map in resolvedEntities) + { + // Execute on the game object + if (SendToChildren) + { + ExecuteEvents.ExecuteHierarchy(map.GameObject, intentEventData, OnIntentHandler); + } + else + { + ExecuteEvents.Execute(map.GameObject, intentEventData, OnIntentHandler); + } + } + } + + private static readonly ExecuteEvents.EventFunction OnIntentHandler = + delegate (IIntentHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + if (handler.CanHandle(casted.Intent.Name)) + { + handler.Handle(casted.Intent, casted.Result); + casted.Use(); + } + }; + + /// + /// Gets the list of explicitly excluded intents. + /// + public List ExcludedIntents => excludedIntents; + + /// + /// Gets the list of explicitly included intents. + /// + /// + /// If no intents are explicitly included, all intents will be forwarded. + /// + public List IncludedIntents => includedIntents; + + /// + /// Gets or set a value that indicates if events should be sent to child game objects. + /// + /// + /// true if if events should be sent to child game objects; otherwise false. The default is false. + /// + public bool SendToChildren { get; set; } + } +} diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Route/ResolvedIntentForwarder.cs.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Route/ResolvedIntentForwarder.cs.meta new file mode 100644 index 0000000..341150d --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/MixedRealityAzure/LUIS/Scripts/Route/ResolvedIntentForwarder.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 1c55cc0510917d84eafd29672cfac76c +timeCreated: 1518656487 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins.meta new file mode 100644 index 0000000..1b0e9d8 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 39cd5cf49fa594448aefc8dc3cfc4b4e +folderAsset: yes +timeCreated: 1512434829 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/LUIS.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/LUIS.meta new file mode 100644 index 0000000..1eb4503 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/LUIS.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 6cb65aa2f2bb8d9469bb83921cfd7c15 +folderAsset: yes +timeCreated: 1512434868 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/LUIS/net45+win8+wpa81.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/LUIS/net45+win8+wpa81.meta new file mode 100644 index 0000000..f1013e2 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/LUIS/net45+win8+wpa81.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5b5c154a760f57845955a7f18cb6a8ca +folderAsset: yes +timeCreated: 1512434857 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/LUIS/net45+win8+wpa81/Microsoft.Cognitive.LUIS.dll b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/LUIS/net45+win8+wpa81/Microsoft.Cognitive.LUIS.dll new file mode 100644 index 0000000..78ec9df Binary files /dev/null and b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/LUIS/net45+win8+wpa81/Microsoft.Cognitive.LUIS.dll differ diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/LUIS/net45+win8+wpa81/Microsoft.Cognitive.LUIS.dll.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/LUIS/net45+win8+wpa81/Microsoft.Cognitive.LUIS.dll.meta new file mode 100644 index 0000000..6360107 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/LUIS/net45+win8+wpa81/Microsoft.Cognitive.LUIS.dll.meta @@ -0,0 +1,121 @@ +fileFormatVersion: 2 +guid: e4dfd08f22d634d44baf03a9ee550b4e +timeCreated: 1512435000 +licenseType: Free +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + - first: + '': Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 0 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude WindowsStoreApps: 0 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Facebook: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Facebook: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Linux + second: + enabled: 0 + settings: + CPU: x86 + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: x86_64 + - first: + Standalone: LinuxUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXIntel + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: OSXIntel64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 1 + settings: + CPU: AnyCPU + DontProcess: False + PlaceholderPath: + SDK: AnySDK + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/Newtonsoft.Json.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/Newtonsoft.Json.meta new file mode 100644 index 0000000..0bc4359 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/Newtonsoft.Json.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c853715c7c345dc4fa7861d5fedd2414 +folderAsset: yes +timeCreated: 1512435190 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/Newtonsoft.Json/portable-net45+wp80+win8+wpa81.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/Newtonsoft.Json/portable-net45+wp80+win8+wpa81.meta new file mode 100644 index 0000000..32d6465 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/Newtonsoft.Json/portable-net45+wp80+win8+wpa81.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9120e8cf3520066489d5bcd98b27a81f +folderAsset: yes +timeCreated: 1512435062 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/Newtonsoft.Json/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/Newtonsoft.Json/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll new file mode 100644 index 0000000..8289274 Binary files /dev/null and b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/Newtonsoft.Json/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll differ diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/Newtonsoft.Json/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/Newtonsoft.Json/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll.meta new file mode 100644 index 0000000..1109640 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/Newtonsoft.Json/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll.meta @@ -0,0 +1,121 @@ +fileFormatVersion: 2 +guid: e40da874901933347b9f4e609abc6b1c +timeCreated: 1512435234 +licenseType: Free +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + - first: + '': Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 0 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude WindowsStoreApps: 0 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Facebook: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Facebook: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Linux + second: + enabled: 0 + settings: + CPU: x86 + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: x86_64 + - first: + Standalone: LinuxUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXIntel + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: OSXIntel64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 1 + settings: + CPU: AnyCPU + DontProcess: False + PlaceholderPath: + SDK: AnySDK + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Collections.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Collections.meta new file mode 100644 index 0000000..50041ac --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Collections.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 77d29ab0107f20747a4ed823aaa3768a +folderAsset: yes +timeCreated: 1524173276 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Collections/System.Collections.dll b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Collections/System.Collections.dll new file mode 100644 index 0000000..c79533d Binary files /dev/null and b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Collections/System.Collections.dll differ diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Collections/System.Collections.dll.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Collections/System.Collections.dll.meta new file mode 100644 index 0000000..393d646 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Collections/System.Collections.dll.meta @@ -0,0 +1,121 @@ +fileFormatVersion: 2 +guid: 80c5254db12b6d9458bfdb8b34b2f30d +timeCreated: 1512499160 +licenseType: Free +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + - first: + '': Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 0 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude WindowsStoreApps: 1 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Facebook: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Facebook: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Linux + second: + enabled: 0 + settings: + CPU: x86 + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: x86_64 + - first: + Standalone: LinuxUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXIntel + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: OSXIntel64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + DontProcess: False + PlaceholderPath: + SDK: AnySDK + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Runtime.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Runtime.meta new file mode 100644 index 0000000..a42c745 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Runtime.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 128825062538fba41b92eb01955cdb13 +folderAsset: yes +timeCreated: 1524173237 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Runtime/System.Runtime.dll b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Runtime/System.Runtime.dll new file mode 100644 index 0000000..b91f45c Binary files /dev/null and b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Runtime/System.Runtime.dll differ diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Runtime/System.Runtime.dll.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Runtime/System.Runtime.dll.meta new file mode 100644 index 0000000..eabc4a0 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Runtime/System.Runtime.dll.meta @@ -0,0 +1,121 @@ +fileFormatVersion: 2 +guid: a84516a6d66775943ba4937d56e01ec9 +timeCreated: 1512436105 +licenseType: Free +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + - first: + '': Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 0 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude WindowsStoreApps: 1 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Facebook: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Facebook: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Linux + second: + enabled: 0 + settings: + CPU: x86 + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: x86_64 + - first: + Standalone: LinuxUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXIntel + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: OSXIntel64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + DontProcess: False + PlaceholderPath: + SDK: AnySDK + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Threading.Tasks.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Threading.Tasks.meta new file mode 100644 index 0000000..dcd8c96 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Threading.Tasks.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a76b3346ee9ed274b9bd63232e5d7728 +folderAsset: yes +timeCreated: 1524173311 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Threading.Tasks/System.Threading.Tasks.dll b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Threading.Tasks/System.Threading.Tasks.dll new file mode 100644 index 0000000..eeec34c Binary files /dev/null and b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Threading.Tasks/System.Threading.Tasks.dll differ diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Threading.Tasks/System.Threading.Tasks.dll.meta b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Threading.Tasks/System.Threading.Tasks.dll.meta new file mode 100644 index 0000000..9d1ead2 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Assets/Plugins/System.Threading.Tasks/System.Threading.Tasks.dll.meta @@ -0,0 +1,121 @@ +fileFormatVersion: 2 +guid: 3ff0f40b5ce1084418f0d33f1c01c516 +timeCreated: 1512499173 +licenseType: Free +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + - first: + '': Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 0 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude WindowsStoreApps: 1 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Facebook: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Facebook: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Linux + second: + enabled: 0 + settings: + CPU: x86 + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: x86_64 + - first: + Standalone: LinuxUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXIntel + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: OSXIntel64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + DontProcess: False + PlaceholderPath: + SDK: AnySDK + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/MixedReality-Azure-Unity.Editor.csproj b/Reference-Architecture/Client/MixedReality-Azure-Unity/MixedReality-Azure-Unity.Editor.csproj new file mode 100644 index 0000000..c308978 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/MixedReality-Azure-Unity.Editor.csproj @@ -0,0 +1,331 @@ + + + + Debug + AnyCPU + 10.0.20506 + 2.0 + {A7775F69-050F-CC87-3441-23EDC710AFFA} + Library + Assembly-CSharp-Editor + 512 + {E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + .NETFramework + v4.6 + + + Editor:5 + StandaloneWindows64:19 + 2017.4.1f1 + + 6 + + + true + true + false + + + pdbonly + false + Temp\UnityVS_bin\Debug\ + Temp\UnityVS_obj\Debug\ + prompt + 4 + DEBUG;TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2017_4_1;UNITY_2017_4;UNITY_2017;PLATFORM_ARCH_64;UNITY_64;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_GENERICS;ENABLE_PVR_GI;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_GRID;ENABLE_TILEMAP;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_DIRECTOR;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_TIMELINE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;ENABLE_NATIVE_ARRAY;ENABLE_SPRITE_MASKING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;ENABLE_MONO_BDWGC;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_PLAYMODE_TESTS_RUNNER;ENABLE_VIDEO;ENABLE_RMGUI;ENABLE_PACKMAN;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_STYLE_SHEETS;ENABLE_LOCALIZATION;PLATFORM_STANDALONE_WIN;PLATFORM_STANDALONE;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_UNITYWEBREQUEST;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_EVENT_QUEUE;ENABLE_CLUSTERINPUT;ENABLE_VR;ENABLE_AR;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;NET_4_6;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_NATIVE_ARRAY_CHECKS;UNITY_TEAM_LICENSE;ENABLE_VSTU + true + + + pdbonly + false + Temp\UnityVS_bin\Release\ + Temp\UnityVS_obj\Release\ + prompt + 4 + TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2017_4_1;UNITY_2017_4;UNITY_2017;PLATFORM_ARCH_64;UNITY_64;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_GENERICS;ENABLE_PVR_GI;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_GRID;ENABLE_TILEMAP;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_DIRECTOR;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_TIMELINE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;ENABLE_NATIVE_ARRAY;ENABLE_SPRITE_MASKING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;ENABLE_MONO_BDWGC;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_PLAYMODE_TESTS_RUNNER;ENABLE_VIDEO;ENABLE_RMGUI;ENABLE_PACKMAN;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_STYLE_SHEETS;ENABLE_LOCALIZATION;PLATFORM_STANDALONE_WIN;PLATFORM_STANDALONE;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_UNITYWEBREQUEST;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_EVENT_QUEUE;ENABLE_CLUSTERINPUT;ENABLE_VR;ENABLE_AR;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;NET_4_6;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_NATIVE_ARRAY_CHECKS;UNITY_TEAM_LICENSE;ENABLE_VSTU + true + + + + C:\Program Files\Unity\Hub\Editor\2017.4.1f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\mscorlib.dll + + + C:\Program Files\Unity\Hub\Editor\2017.4.1f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\System.dll + + + C:\Program Files\Unity\Hub\Editor\2017.4.1f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\System.XML.dll + + + C:\Program Files\Unity\Hub\Editor\2017.4.1f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\System.Core.dll + + + C:\Program Files\Unity\Hub\Editor\2017.4.1f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\Microsoft.CSharp.dll + + + C:\Program Files\Unity\Hub\Editor\2017.4.1f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\System.Runtime.Serialization.dll + + + C:\Program Files\Unity\Hub\Editor\2017.4.1f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\System.Xml.Linq.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEditor.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.CoreModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.AccessibilityModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.ParticleSystemModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.PhysicsModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.VehiclesModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClothModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.AIModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.AnimationModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.TextRenderingModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.UIModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainPhysicsModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.IMGUIModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterInputModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterRendererModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.UNETModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.DirectorModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityAnalyticsModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.PerformanceReportingModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityConnectModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.WebModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.ARModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.VRModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.UIElementsModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.StyleSheetsModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.AssetBundleModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.AudioModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.CrashReportingModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.GameCenterModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.GridModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.ImageConversionModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.InputModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.JSONSerializeModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.ParticlesLegacyModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.Physics2DModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.ScreenCaptureModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.SharedInternalsModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteMaskModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteShapeModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.TilemapModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestAudioModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestTextureModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestWWWModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.VideoModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.WindModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/GUISystem/Editor/UnityEditor.UI.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/Networking/UnityEngine.Networking.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/Networking/Editor/UnityEditor.Networking.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/TestRunner/Editor/UnityEditor.TestRunner.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/TestRunner/UnityEngine.TestRunner.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/TestRunner/net35/unity-custom/nunit.framework.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/Timeline/RuntimeEditor/UnityEngine.Timeline.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/Timeline/Editor/UnityEditor.Timeline.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/TreeEditor/Editor/UnityEditor.TreeEditor.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/UIAutomation/UnityEngine.UIAutomation.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/UIAutomation/Editor/UnityEditor.UIAutomation.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/UnityGoogleAudioSpatializer/Editor/UnityEditor.GoogleAudioSpatializer.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/UnityGoogleAudioSpatializer/RuntimeEditor/UnityEngine.GoogleAudioSpatializer.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/UnityHoloLens/Editor/UnityEditor.HoloLens.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/UnityHoloLens/RuntimeEditor/UnityEngine.HoloLens.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/UnitySpatialTracking/Editor/UnityEditor.SpatialTracking.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/UnitySpatialTracking/RuntimeEditor/UnityEngine.SpatialTracking.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/UnityVR/Editor/UnityEditor.VR.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEditor.Graphs.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/PlaybackEngines/MetroSupport/UnityEditor.WSA.Extensions.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/PlaybackEngines/windowsstandalonesupport/UnityEditor.WindowsStandalone.Extensions.dll + + + C:/Program Files (x86)/Microsoft Visual Studio Tools for Unity/15.0/Editor/SyntaxTree.VisualStudio.Unity.Bridge.dll + + + Assets/Plugins/LUIS/net45+win8+wpa81/Microsoft.Cognitive.LUIS.dll + + + Assets/Plugins/Newtonsoft.Json/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll + + + Assets/Plugins/System.Collections/System.Collections.dll + + + Assets/Plugins/System.Runtime/System.Runtime.dll + + + Assets/Plugins/System.Threading.Tasks/System.Threading.Tasks.dll + + + C:/ProgramData/Unity/cache/packages/packages.unity.com/com.unity.ads@2.0.3/UnityEngine.Advertisements.dll + + + C:/ProgramData/Unity/cache/packages/packages.unity.com/com.unity.ads@2.0.3/Editor/UnityEditor.Advertisements.dll + + + C:/ProgramData/Unity/cache/packages/packages.unity.com/com.unity.analytics@2.0.13/UnityEngine.Analytics.dll + + + C:/ProgramData/Unity/cache/packages/packages.unity.com/com.unity.analytics@2.0.13/Editor/UnityEditor.Analytics.dll + + + C:/ProgramData/Unity/cache/packages/packages.unity.com/com.unity.purchasing@0.0.19/UnityEngine.Purchasing.dll + + + C:/ProgramData/Unity/cache/packages/packages.unity.com/com.unity.purchasing@0.0.19/Editor/UnityEditor.Purchasing.dll + + + C:/ProgramData/Unity/cache/packages/packages.unity.com/com.unity.standardevents@1.0.10/UnityEngine.StandardEvents.dll + + + + + {4440C6AA-B958-1E90-8BF6-9741696C9C4A} + MixedReality-Azure-Unity + + + + + + + + diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/MixedReality-Azure-Unity.csproj b/Reference-Architecture/Client/MixedReality-Azure-Unity/MixedReality-Azure-Unity.csproj new file mode 100644 index 0000000..eb152dd --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/MixedReality-Azure-Unity.csproj @@ -0,0 +1,293 @@ + + + + Debug + AnyCPU + 10.0.20506 + 2.0 + {4440C6AA-B958-1E90-8BF6-9741696C9C4A} + Library + Assembly-CSharp + 512 + {E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + .NETFramework + v4.6 + + + Game:1 + StandaloneWindows64:19 + 2017.4.1f1 + + 6 + + + true + true + false + + + pdbonly + false + Temp\UnityVS_bin\Debug\ + Temp\UnityVS_obj\Debug\ + prompt + 4 + DEBUG;TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2017_4_1;UNITY_2017_4;UNITY_2017;PLATFORM_ARCH_64;UNITY_64;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_GENERICS;ENABLE_PVR_GI;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_GRID;ENABLE_TILEMAP;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_DIRECTOR;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_TIMELINE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;ENABLE_NATIVE_ARRAY;ENABLE_SPRITE_MASKING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;ENABLE_MONO_BDWGC;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_PLAYMODE_TESTS_RUNNER;ENABLE_VIDEO;ENABLE_RMGUI;ENABLE_PACKMAN;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_STYLE_SHEETS;ENABLE_LOCALIZATION;PLATFORM_STANDALONE_WIN;PLATFORM_STANDALONE;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_UNITYWEBREQUEST;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_EVENT_QUEUE;ENABLE_CLUSTERINPUT;ENABLE_VR;ENABLE_AR;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;NET_4_6;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_NATIVE_ARRAY_CHECKS;UNITY_TEAM_LICENSE;ENABLE_VSTU + true + + + pdbonly + false + Temp\UnityVS_bin\Release\ + Temp\UnityVS_obj\Release\ + prompt + 4 + TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2017_4_1;UNITY_2017_4;UNITY_2017;PLATFORM_ARCH_64;UNITY_64;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_GENERICS;ENABLE_PVR_GI;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_GRID;ENABLE_TILEMAP;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_DIRECTOR;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_TIMELINE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;ENABLE_NATIVE_ARRAY;ENABLE_SPRITE_MASKING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;ENABLE_MONO_BDWGC;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_PLAYMODE_TESTS_RUNNER;ENABLE_VIDEO;ENABLE_RMGUI;ENABLE_PACKMAN;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_STYLE_SHEETS;ENABLE_LOCALIZATION;PLATFORM_STANDALONE_WIN;PLATFORM_STANDALONE;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_UNITYWEBREQUEST;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_EVENT_QUEUE;ENABLE_CLUSTERINPUT;ENABLE_VR;ENABLE_AR;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;NET_4_6;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_NATIVE_ARRAY_CHECKS;UNITY_TEAM_LICENSE;ENABLE_VSTU + true + + + + C:\Program Files\Unity\Hub\Editor\2017.4.1f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\mscorlib.dll + + + C:\Program Files\Unity\Hub\Editor\2017.4.1f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\System.dll + + + C:\Program Files\Unity\Hub\Editor\2017.4.1f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\System.XML.dll + + + C:\Program Files\Unity\Hub\Editor\2017.4.1f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\System.Core.dll + + + C:\Program Files\Unity\Hub\Editor\2017.4.1f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\Microsoft.CSharp.dll + + + C:\Program Files\Unity\Hub\Editor\2017.4.1f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\System.Runtime.Serialization.dll + + + C:\Program Files\Unity\Hub\Editor\2017.4.1f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\System.Xml.Linq.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEditor.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.CoreModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.AccessibilityModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.ParticleSystemModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.PhysicsModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.VehiclesModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClothModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.AIModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.AnimationModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.TextRenderingModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.UIModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainPhysicsModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.IMGUIModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterInputModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterRendererModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.UNETModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.DirectorModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityAnalyticsModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.PerformanceReportingModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityConnectModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.WebModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.ARModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.VRModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.UIElementsModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.StyleSheetsModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.AssetBundleModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.AudioModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.CrashReportingModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.GameCenterModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.GridModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.ImageConversionModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.InputModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.JSONSerializeModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.ParticlesLegacyModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.Physics2DModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.ScreenCaptureModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.SharedInternalsModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteMaskModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteShapeModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.TilemapModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestAudioModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestTextureModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestWWWModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.VideoModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/Managed/UnityEngine/UnityEngine.WindModule.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/Networking/UnityEngine.Networking.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/TestRunner/UnityEngine.TestRunner.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/TestRunner/net35/unity-custom/nunit.framework.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/Timeline/RuntimeEditor/UnityEngine.Timeline.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/UIAutomation/UnityEngine.UIAutomation.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/UnityGoogleAudioSpatializer/RuntimeEditor/UnityEngine.GoogleAudioSpatializer.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/UnityHoloLens/RuntimeEditor/UnityEngine.HoloLens.dll + + + C:/Program Files/Unity/Hub/Editor/2017.4.1f1/Editor/Data/UnityExtensions/Unity/UnitySpatialTracking/RuntimeEditor/UnityEngine.SpatialTracking.dll + + + Assets/Plugins/LUIS/net45+win8+wpa81/Microsoft.Cognitive.LUIS.dll + + + Assets/Plugins/Newtonsoft.Json/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll + + + Assets/Plugins/System.Collections/System.Collections.dll + + + Assets/Plugins/System.Runtime/System.Runtime.dll + + + Assets/Plugins/System.Threading.Tasks/System.Threading.Tasks.dll + + + C:/ProgramData/Unity/cache/packages/packages.unity.com/com.unity.ads@2.0.3/UnityEngine.Advertisements.dll + + + C:/ProgramData/Unity/cache/packages/packages.unity.com/com.unity.analytics@2.0.13/UnityEngine.Analytics.dll + + + C:/ProgramData/Unity/cache/packages/packages.unity.com/com.unity.purchasing@0.0.19/UnityEngine.Purchasing.dll + + + C:/ProgramData/Unity/cache/packages/packages.unity.com/com.unity.standardevents@1.0.10/UnityEngine.StandardEvents.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/MixedReality-Azure-Unity.sln b/Reference-Architecture/Client/MixedReality-Azure-Unity/MixedReality-Azure-Unity.sln new file mode 100644 index 0000000..245396d --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/MixedReality-Azure-Unity.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2017 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MixedReality-Azure-Unity", "MixedReality-Azure-Unity.csproj", "{4440C6AA-B958-1E90-8BF6-9741696C9C4A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MixedReality-Azure-Unity.Editor", "MixedReality-Azure-Unity.Editor.csproj", "{A7775F69-050F-CC87-3441-23EDC710AFFA}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4440C6AA-B958-1E90-8BF6-9741696C9C4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4440C6AA-B958-1E90-8BF6-9741696C9C4A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4440C6AA-B958-1E90-8BF6-9741696C9C4A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4440C6AA-B958-1E90-8BF6-9741696C9C4A}.Release|Any CPU.Build.0 = Release|Any CPU + {A7775F69-050F-CC87-3441-23EDC710AFFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A7775F69-050F-CC87-3441-23EDC710AFFA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A7775F69-050F-CC87-3441-23EDC710AFFA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A7775F69-050F-CC87-3441-23EDC710AFFA}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Packaging/Package-All.bat b/Reference-Architecture/Client/MixedReality-Azure-Unity/Packaging/Package-All.bat new file mode 100644 index 0000000..f1cf3ce --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Packaging/Package-All.bat @@ -0,0 +1,12 @@ +@ECHO OFF + +ECHO. +ECHO Generating All Packages... + + +CALL Package-LUIS.bat + +ECHO. +ECHO. +ECHO. +PAUSE \ No newline at end of file diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/Packaging/Package-LUIS.bat b/Reference-Architecture/Client/MixedReality-Azure-Unity/Packaging/Package-LUIS.bat new file mode 100644 index 0000000..ed89840 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/Packaging/Package-LUIS.bat @@ -0,0 +1,39 @@ +@ECHO OFF +ECHO. + +REM Set Paths +SET UnityExe="%ProgramFiles%\Unity\Hub\Editor\2017.4.1f1\Editor\Unity.exe" +SET ProjectDir=%cd%\.. +SET AssetDir=%ProjectDir%\Assets +SET PackageDir=%ProjectDir%\UnityPackages + +REM Set Package Info +SET PackageName=MR-LUIS +SET PackageVersion=1.0.0 +SET PackageFileName=%PackageName%-%PackageVersion%.unitypackage + +ECHO Packaging %PackageName% %PackageVersion% + +ECHO Defining Asset List +SET Assets=Assets\Plugins\LUIS +SET Assets=%Assets% Assets\Plugins\Newtonsoft.Json +SET Assets=%Assets% Assets\Plugins\System.Collections +SET Assets=%Assets% Assets\Plugins\System.Runtime +SET Assets=%Assets% Assets\Plugins\System.Threading.Tasks +SET Assets=%Assets% Assets\MixedRealityAzure\Common +SET Assets=%Assets% Assets\MixedRealityAzure\LUIS +SET Assets=%Assets% Assets\MixedRealityAzure-Examples\LUIS + +ECHO Generating %PackageFileName% ... +%UnityExe% -batchmode -projectPath %ProjectDir%\ -exportPackage %Assets% %PackageDir%\%PackageFileName% -quit +IF ERRORLEVEL 1 GOTO ERROR + +:SUCCESS +ECHO "Package Success!" +GOTO END + +:ERROR +ECHO "Packaging Error" +GOTO END + +:END \ No newline at end of file diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/AudioManager.asset b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/AudioManager.asset new file mode 100644 index 0000000..da61125 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/AudioManager.asset @@ -0,0 +1,17 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!11 &1 +AudioManager: + m_ObjectHideFlags: 0 + m_Volume: 1 + Rolloff Scale: 1 + Doppler Factor: 1 + Default Speaker Mode: 2 + m_SampleRate: 0 + m_DSPBufferSize: 0 + m_VirtualVoiceCount: 512 + m_RealVoiceCount: 32 + m_SpatializerPlugin: + m_AmbisonicDecoderPlugin: + m_DisableAudio: 0 + m_VirtualizeEffects: 1 diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/ClusterInputManager.asset b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/ClusterInputManager.asset new file mode 100644 index 0000000..e7886b2 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/ClusterInputManager.asset @@ -0,0 +1,6 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!236 &1 +ClusterInputManager: + m_ObjectHideFlags: 0 + m_Inputs: [] diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/DynamicsManager.asset b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/DynamicsManager.asset new file mode 100644 index 0000000..0be3d78 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/DynamicsManager.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!55 &1 +PhysicsManager: + m_ObjectHideFlags: 0 + serializedVersion: 3 + m_Gravity: {x: 0, y: -9.81, z: 0} + m_DefaultMaterial: {fileID: 0} + m_BounceThreshold: 2 + m_SleepThreshold: 0.005 + m_DefaultContactOffset: 0.01 + m_DefaultSolverIterations: 6 + m_DefaultSolverVelocityIterations: 1 + m_QueriesHitBackfaces: 0 + m_QueriesHitTriggers: 1 + m_EnableAdaptiveForce: 0 + m_EnablePCM: 1 + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + m_AutoSimulation: 1 + m_AutoSyncTransforms: 1 diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/EditorBuildSettings.asset b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/EditorBuildSettings.asset new file mode 100644 index 0000000..6dc24f7 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/EditorBuildSettings.asset @@ -0,0 +1,7 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1045 &1 +EditorBuildSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Scenes: [] diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/EditorSettings.asset b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/EditorSettings.asset new file mode 100644 index 0000000..fb9225f --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/EditorSettings.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!159 &1 +EditorSettings: + m_ObjectHideFlags: 0 + serializedVersion: 5 + m_ExternalVersionControlSupport: Hidden Meta Files + m_SerializationMode: 2 + m_DefaultBehaviorMode: 0 + m_SpritePackerMode: 0 + m_SpritePackerPaddingPower: 1 + m_EtcTextureCompressorBehavior: 1 + m_EtcTextureFastCompressor: 1 + m_EtcTextureNormalCompressor: 2 + m_EtcTextureBestCompressor: 4 + m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd + m_ProjectGenerationRootNamespace: + m_UserGeneratedProjectSuffix: + m_CollabEditorSettings: + inProgressEnabled: 1 diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/GraphicsSettings.asset b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/GraphicsSettings.asset new file mode 100644 index 0000000..74d7b53 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/GraphicsSettings.asset @@ -0,0 +1,61 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!30 &1 +GraphicsSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_Deferred: + m_Mode: 1 + m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} + m_DeferredReflections: + m_Mode: 1 + m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} + m_ScreenSpaceShadows: + m_Mode: 1 + m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} + m_LegacyDeferred: + m_Mode: 1 + m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} + m_DepthNormals: + m_Mode: 1 + m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} + m_MotionVectors: + m_Mode: 1 + m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} + m_LightHalo: + m_Mode: 1 + m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} + m_LensFlare: + m_Mode: 1 + m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} + m_AlwaysIncludedShaders: + - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} + m_PreloadedShaders: [] + m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, + type: 0} + m_CustomRenderPipeline: {fileID: 0} + m_TransparencySortMode: 0 + m_TransparencySortAxis: {x: 0, y: 0, z: 1} + m_DefaultRenderingPath: 1 + m_DefaultMobileRenderingPath: 1 + m_TierSettings: [] + m_LightmapStripping: 0 + m_FogStripping: 0 + m_InstancingStripping: 0 + m_LightmapKeepPlain: 1 + m_LightmapKeepDirCombined: 1 + m_LightmapKeepDynamicPlain: 1 + m_LightmapKeepDynamicDirCombined: 1 + m_LightmapKeepShadowMask: 1 + m_LightmapKeepSubtractive: 1 + m_FogKeepLinear: 1 + m_FogKeepExp: 1 + m_FogKeepExp2: 1 + m_AlbedoSwatchInfos: [] + m_LightsUseLinearIntensity: 0 + m_LightsUseColorTemperature: 0 diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/InputManager.asset b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/InputManager.asset new file mode 100644 index 0000000..17c8f53 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/InputManager.asset @@ -0,0 +1,295 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!13 &1 +InputManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Axes: + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: left + positiveButton: right + altNegativeButton: a + altPositiveButton: d + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: down + positiveButton: up + altNegativeButton: s + altPositiveButton: w + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left ctrl + altNegativeButton: + altPositiveButton: mouse 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left alt + altNegativeButton: + altPositiveButton: mouse 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left shift + altNegativeButton: + altPositiveButton: mouse 2 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: space + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse X + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse Y + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse ScrollWheel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 2 + joyNum: 0 + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 0 + type: 2 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 1 + type: 2 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 0 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 1 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 2 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 3 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: return + altNegativeButton: + altPositiveButton: joystick button 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: enter + altNegativeButton: + altPositiveButton: space + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Cancel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: escape + altNegativeButton: + altPositiveButton: joystick button 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/NavMeshAreas.asset b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/NavMeshAreas.asset new file mode 100644 index 0000000..3b0b7c3 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/NavMeshAreas.asset @@ -0,0 +1,91 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!126 &1 +NavMeshProjectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + areas: + - name: Walkable + cost: 1 + - name: Not Walkable + cost: 1 + - name: Jump + cost: 2 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + m_LastAgentTypeID: -887442657 + m_Settings: + - serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.75 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_SettingNames: + - Humanoid diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/NetworkManager.asset b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/NetworkManager.asset new file mode 100644 index 0000000..5dc6a83 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/NetworkManager.asset @@ -0,0 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!149 &1 +NetworkManager: + m_ObjectHideFlags: 0 + m_DebugLevel: 0 + m_Sendrate: 15 + m_AssetToPrefab: {} diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/Physics2DSettings.asset b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/Physics2DSettings.asset new file mode 100644 index 0000000..132ee6b --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/Physics2DSettings.asset @@ -0,0 +1,37 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!19 &1 +Physics2DSettings: + m_ObjectHideFlags: 0 + serializedVersion: 3 + m_Gravity: {x: 0, y: -9.81} + m_DefaultMaterial: {fileID: 0} + m_VelocityIterations: 8 + m_PositionIterations: 3 + m_VelocityThreshold: 1 + m_MaxLinearCorrection: 0.2 + m_MaxAngularCorrection: 8 + m_MaxTranslationSpeed: 100 + m_MaxRotationSpeed: 360 + m_BaumgarteScale: 0.2 + m_BaumgarteTimeOfImpactScale: 0.75 + m_TimeToSleep: 0.5 + m_LinearSleepTolerance: 0.01 + m_AngularSleepTolerance: 2 + m_DefaultContactOffset: 0.01 + m_AutoSimulation: 1 + m_QueriesHitTriggers: 1 + m_QueriesStartInColliders: 1 + m_ChangeStopsCallbacks: 0 + m_CallbacksOnDisable: 1 + m_AutoSyncTransforms: 1 + m_AlwaysShowColliders: 0 + m_ShowColliderSleep: 1 + m_ShowColliderContacts: 0 + m_ShowColliderAABB: 0 + m_ContactArrowScale: 0.2 + m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} + m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} + m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} + m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/ProjectSettings.asset b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/ProjectSettings.asset new file mode 100644 index 0000000..6613490 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/ProjectSettings.asset @@ -0,0 +1,662 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!129 &1 +PlayerSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + productGUID: 624a9dbdbefc53445bb9284395acb3b7 + AndroidProfiler: 0 + AndroidFilterTouchesWhenObscured: 0 + defaultScreenOrientation: 4 + targetDevice: 2 + useOnDemandResources: 0 + accelerometerFrequency: 60 + companyName: DefaultCompany + productName: MixedRealityAzureKit-Unity + defaultCursor: {fileID: 0} + cursorHotspot: {x: 0, y: 0} + m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} + m_ShowUnitySplashScreen: 1 + m_ShowUnitySplashLogo: 1 + m_SplashScreenOverlayOpacity: 1 + m_SplashScreenAnimation: 1 + m_SplashScreenLogoStyle: 1 + m_SplashScreenDrawMode: 0 + m_SplashScreenBackgroundAnimationZoom: 1 + m_SplashScreenLogoAnimationZoom: 1 + m_SplashScreenBackgroundLandscapeAspect: 1 + m_SplashScreenBackgroundPortraitAspect: 1 + m_SplashScreenBackgroundLandscapeUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenBackgroundPortraitUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenLogos: [] + m_VirtualRealitySplashScreen: {fileID: 0} + m_HolographicTrackingLossScreen: {fileID: 0} + defaultScreenWidth: 1024 + defaultScreenHeight: 768 + defaultScreenWidthWeb: 960 + defaultScreenHeightWeb: 600 + m_StereoRenderingPath: 0 + m_ActiveColorSpace: 0 + m_MTRendering: 1 + m_StackTraceTypes: 010000000100000001000000010000000100000001000000 + iosShowActivityIndicatorOnLoading: -1 + androidShowActivityIndicatorOnLoading: -1 + tizenShowActivityIndicatorOnLoading: -1 + iosAppInBackgroundBehavior: 0 + displayResolutionDialog: 1 + iosAllowHTTPDownload: 1 + allowedAutorotateToPortrait: 1 + allowedAutorotateToPortraitUpsideDown: 1 + allowedAutorotateToLandscapeRight: 1 + allowedAutorotateToLandscapeLeft: 1 + useOSAutorotation: 1 + use32BitDisplayBuffer: 1 + disableDepthAndStencilBuffers: 0 + androidBlitType: 0 + defaultIsFullScreen: 1 + defaultIsNativeResolution: 1 + macRetinaSupport: 1 + runInBackground: 0 + captureSingleScreen: 0 + muteOtherAudioSources: 0 + Prepare IOS For Recording: 0 + Force IOS Speakers When Recording: 0 + deferSystemGesturesMode: 0 + hideHomeButton: 0 + submitAnalytics: 1 + usePlayerLog: 1 + bakeCollisionMeshes: 0 + forceSingleInstance: 0 + resizableWindow: 0 + useMacAppStoreValidation: 0 + macAppStoreCategory: public.app-category.games + gpuSkinning: 0 + graphicsJobs: 0 + xboxPIXTextureCapture: 0 + xboxEnableAvatar: 0 + xboxEnableKinect: 0 + xboxEnableKinectAutoTracking: 0 + xboxEnableFitness: 0 + visibleInBackground: 1 + allowFullscreenSwitch: 1 + graphicsJobMode: 0 + macFullscreenMode: 2 + d3d9FullscreenMode: 1 + d3d11FullscreenMode: 1 + xboxSpeechDB: 0 + xboxEnableHeadOrientation: 0 + xboxEnableGuest: 0 + xboxEnablePIXSampling: 0 + metalFramebufferOnly: 0 + n3dsDisableStereoscopicView: 0 + n3dsEnableSharedListOpt: 1 + n3dsEnableVSync: 0 + ignoreAlphaClear: 0 + xboxOneResolution: 0 + xboxOneSResolution: 0 + xboxOneXResolution: 3 + xboxOneMonoLoggingLevel: 0 + xboxOneLoggingLevel: 1 + xboxOneDisableEsram: 0 + xboxOnePresentImmediateThreshold: 0 + videoMemoryForVertexBuffers: 0 + psp2PowerMode: 0 + psp2AcquireBGM: 1 + wiiUTVResolution: 0 + wiiUGamePadMSAA: 1 + wiiUSupportsNunchuk: 0 + wiiUSupportsClassicController: 0 + wiiUSupportsBalanceBoard: 0 + wiiUSupportsMotionPlus: 0 + wiiUSupportsProController: 0 + wiiUAllowScreenCapture: 1 + wiiUControllerCount: 0 + m_SupportedAspectRatios: + 4:3: 1 + 5:4: 1 + 16:10: 1 + 16:9: 1 + Others: 1 + bundleVersion: 1.0 + preloadedAssets: [] + metroInputSource: 0 + m_HolographicPauseOnTrackingLoss: 1 + xboxOneDisableKinectGpuReservation: 0 + xboxOneEnable7thCore: 0 + vrSettings: + cardboard: + depthFormat: 0 + enableTransitionView: 0 + daydream: + depthFormat: 0 + useSustainedPerformanceMode: 0 + enableVideoLayer: 0 + useProtectedVideoMemory: 0 + hololens: + depthFormat: 1 + protectGraphicsMemory: 0 + useHDRDisplay: 0 + m_ColorGamuts: 00000000 + targetPixelDensity: 0 + resolutionScalingMode: 0 + androidSupportedAspectRatio: 1 + androidMaxAspectRatio: 2.1 + applicationIdentifier: {} + buildNumber: {} + AndroidBundleVersionCode: 1 + AndroidMinSdkVersion: 16 + AndroidTargetSdkVersion: 0 + AndroidPreferredInstallLocation: 1 + aotOptions: + stripEngineCode: 1 + iPhoneStrippingLevel: 0 + iPhoneScriptCallOptimization: 0 + ForceInternetPermission: 0 + ForceSDCardPermission: 0 + CreateWallpaper: 0 + APKExpansionFiles: 0 + keepLoadedShadersAlive: 0 + StripUnusedMeshComponents: 0 + VertexChannelCompressionMask: + serializedVersion: 2 + m_Bits: 238 + iPhoneSdkVersion: 988 + iOSTargetOSVersionString: 7.0 + tvOSSdkVersion: 0 + tvOSRequireExtendedGameController: 0 + tvOSTargetOSVersionString: 9.0 + uIPrerenderedIcon: 0 + uIRequiresPersistentWiFi: 0 + uIRequiresFullScreen: 1 + uIStatusBarHidden: 1 + uIExitOnSuspend: 0 + uIStatusBarStyle: 0 + iPhoneSplashScreen: {fileID: 0} + iPhoneHighResSplashScreen: {fileID: 0} + iPhoneTallHighResSplashScreen: {fileID: 0} + iPhone47inSplashScreen: {fileID: 0} + iPhone55inPortraitSplashScreen: {fileID: 0} + iPhone55inLandscapeSplashScreen: {fileID: 0} + iPhone58inPortraitSplashScreen: {fileID: 0} + iPhone58inLandscapeSplashScreen: {fileID: 0} + iPadPortraitSplashScreen: {fileID: 0} + iPadHighResPortraitSplashScreen: {fileID: 0} + iPadLandscapeSplashScreen: {fileID: 0} + iPadHighResLandscapeSplashScreen: {fileID: 0} + appleTVSplashScreen: {fileID: 0} + appleTVSplashScreen2x: {fileID: 0} + tvOSSmallIconLayers: [] + tvOSSmallIconLayers2x: [] + tvOSLargeIconLayers: [] + tvOSLargeIconLayers2x: [] + tvOSTopShelfImageLayers: [] + tvOSTopShelfImageLayers2x: [] + tvOSTopShelfImageWideLayers: [] + tvOSTopShelfImageWideLayers2x: [] + iOSLaunchScreenType: 0 + iOSLaunchScreenPortrait: {fileID: 0} + iOSLaunchScreenLandscape: {fileID: 0} + iOSLaunchScreenBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreenFillPct: 100 + iOSLaunchScreenSize: 100 + iOSLaunchScreenCustomXibPath: + iOSLaunchScreeniPadType: 0 + iOSLaunchScreeniPadImage: {fileID: 0} + iOSLaunchScreeniPadBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreeniPadFillPct: 100 + iOSLaunchScreeniPadSize: 100 + iOSLaunchScreeniPadCustomXibPath: + iOSDeviceRequirements: [] + iOSURLSchemes: [] + iOSBackgroundModes: 0 + iOSMetalForceHardShadows: 0 + metalEditorSupport: 1 + metalAPIValidation: 1 + iOSRenderExtraFrameOnPause: 0 + appleDeveloperTeamID: + iOSManualSigningProvisioningProfileID: + tvOSManualSigningProvisioningProfileID: + appleEnableAutomaticSigning: 0 + AndroidTargetDevice: 0 + AndroidSplashScreenScale: 0 + androidSplashScreen: {fileID: 0} + AndroidKeystoreName: + AndroidKeyaliasName: + AndroidTVCompatibility: 1 + AndroidIsGame: 1 + AndroidEnableTango: 0 + androidEnableBanner: 1 + androidUseLowAccuracyLocation: 0 + m_AndroidBanners: + - width: 320 + height: 180 + banner: {fileID: 0} + androidGamepadSupportLevel: 0 + resolutionDialogBanner: {fileID: 0} + m_BuildTargetIcons: [] + m_BuildTargetBatching: [] + m_BuildTargetGraphicsAPIs: [] + m_BuildTargetVRSettings: [] + m_BuildTargetEnableVuforiaSettings: [] + openGLRequireES31: 0 + openGLRequireES31AEP: 0 + m_TemplateCustomTags: {} + mobileMTRendering: + Android: 1 + iPhone: 1 + tvOS: 1 + wiiUTitleID: 0005000011000000 + wiiUGroupID: 00010000 + wiiUCommonSaveSize: 4096 + wiiUAccountSaveSize: 2048 + wiiUOlvAccessKey: 0 + wiiUTinCode: 0 + wiiUJoinGameId: 0 + wiiUJoinGameModeMask: 0000000000000000 + wiiUCommonBossSize: 0 + wiiUAccountBossSize: 0 + wiiUAddOnUniqueIDs: [] + wiiUMainThreadStackSize: 3072 + wiiULoaderThreadStackSize: 1024 + wiiUSystemHeapSize: 128 + wiiUTVStartupScreen: {fileID: 0} + wiiUGamePadStartupScreen: {fileID: 0} + wiiUDrcBufferDisabled: 0 + wiiUProfilerLibPath: + playModeTestRunnerEnabled: 0 + actionOnDotNetUnhandledException: 1 + enableInternalProfiler: 0 + logObjCUncaughtExceptions: 1 + enableCrashReportAPI: 0 + cameraUsageDescription: + locationUsageDescription: + microphoneUsageDescription: + switchNetLibKey: + switchSocketMemoryPoolSize: 6144 + switchSocketAllocatorPoolSize: 128 + switchSocketConcurrencyLimit: 14 + switchScreenResolutionBehavior: 2 + switchUseCPUProfiler: 0 + switchApplicationID: 0x01004b9000490000 + switchNSODependencies: + switchTitleNames_0: + switchTitleNames_1: + switchTitleNames_2: + switchTitleNames_3: + switchTitleNames_4: + switchTitleNames_5: + switchTitleNames_6: + switchTitleNames_7: + switchTitleNames_8: + switchTitleNames_9: + switchTitleNames_10: + switchTitleNames_11: + switchTitleNames_12: + switchTitleNames_13: + switchTitleNames_14: + switchPublisherNames_0: + switchPublisherNames_1: + switchPublisherNames_2: + switchPublisherNames_3: + switchPublisherNames_4: + switchPublisherNames_5: + switchPublisherNames_6: + switchPublisherNames_7: + switchPublisherNames_8: + switchPublisherNames_9: + switchPublisherNames_10: + switchPublisherNames_11: + switchPublisherNames_12: + switchPublisherNames_13: + switchPublisherNames_14: + switchIcons_0: {fileID: 0} + switchIcons_1: {fileID: 0} + switchIcons_2: {fileID: 0} + switchIcons_3: {fileID: 0} + switchIcons_4: {fileID: 0} + switchIcons_5: {fileID: 0} + switchIcons_6: {fileID: 0} + switchIcons_7: {fileID: 0} + switchIcons_8: {fileID: 0} + switchIcons_9: {fileID: 0} + switchIcons_10: {fileID: 0} + switchIcons_11: {fileID: 0} + switchIcons_12: {fileID: 0} + switchIcons_13: {fileID: 0} + switchIcons_14: {fileID: 0} + switchSmallIcons_0: {fileID: 0} + switchSmallIcons_1: {fileID: 0} + switchSmallIcons_2: {fileID: 0} + switchSmallIcons_3: {fileID: 0} + switchSmallIcons_4: {fileID: 0} + switchSmallIcons_5: {fileID: 0} + switchSmallIcons_6: {fileID: 0} + switchSmallIcons_7: {fileID: 0} + switchSmallIcons_8: {fileID: 0} + switchSmallIcons_9: {fileID: 0} + switchSmallIcons_10: {fileID: 0} + switchSmallIcons_11: {fileID: 0} + switchSmallIcons_12: {fileID: 0} + switchSmallIcons_13: {fileID: 0} + switchSmallIcons_14: {fileID: 0} + switchManualHTML: + switchAccessibleURLs: + switchLegalInformation: + switchMainThreadStackSize: 1048576 + switchPresenceGroupId: + switchLogoHandling: 0 + switchReleaseVersion: 0 + switchDisplayVersion: 1.0.0 + switchStartupUserAccount: 0 + switchTouchScreenUsage: 0 + switchSupportedLanguagesMask: 0 + switchLogoType: 0 + switchApplicationErrorCodeCategory: + switchUserAccountSaveDataSize: 0 + switchUserAccountSaveDataJournalSize: 0 + switchApplicationAttribute: 0 + switchCardSpecSize: -1 + switchCardSpecClock: -1 + switchRatingsMask: 0 + switchRatingsInt_0: 0 + switchRatingsInt_1: 0 + switchRatingsInt_2: 0 + switchRatingsInt_3: 0 + switchRatingsInt_4: 0 + switchRatingsInt_5: 0 + switchRatingsInt_6: 0 + switchRatingsInt_7: 0 + switchRatingsInt_8: 0 + switchRatingsInt_9: 0 + switchRatingsInt_10: 0 + switchRatingsInt_11: 0 + switchLocalCommunicationIds_0: + switchLocalCommunicationIds_1: + switchLocalCommunicationIds_2: + switchLocalCommunicationIds_3: + switchLocalCommunicationIds_4: + switchLocalCommunicationIds_5: + switchLocalCommunicationIds_6: + switchLocalCommunicationIds_7: + switchParentalControl: 0 + switchAllowsScreenshot: 1 + switchAllowsVideoCapturing: 1 + switchAllowsRuntimeAddOnContentInstall: 0 + switchDataLossConfirmation: 0 + switchSupportedNpadStyles: 3 + switchSocketConfigEnabled: 0 + switchTcpInitialSendBufferSize: 32 + switchTcpInitialReceiveBufferSize: 64 + switchTcpAutoSendBufferSizeMax: 256 + switchTcpAutoReceiveBufferSizeMax: 256 + switchUdpSendBufferSize: 9 + switchUdpReceiveBufferSize: 42 + switchSocketBufferEfficiency: 4 + switchSocketInitializeEnabled: 1 + switchNetworkInterfaceManagerInitializeEnabled: 1 + switchPlayerConnectionEnabled: 1 + ps4NPAgeRating: 12 + ps4NPTitleSecret: + ps4NPTrophyPackPath: + ps4ParentalLevel: 11 + ps4ContentID: ED1633-NPXX51362_00-0000000000000000 + ps4Category: 0 + ps4MasterVersion: 01.00 + ps4AppVersion: 01.00 + ps4AppType: 0 + ps4ParamSfxPath: + ps4VideoOutPixelFormat: 0 + ps4VideoOutInitialWidth: 1920 + ps4VideoOutBaseModeInitialWidth: 1920 + ps4VideoOutReprojectionRate: 60 + ps4PronunciationXMLPath: + ps4PronunciationSIGPath: + ps4BackgroundImagePath: + ps4StartupImagePath: + ps4SaveDataImagePath: + ps4SdkOverride: + ps4BGMPath: + ps4ShareFilePath: + ps4ShareOverlayImagePath: + ps4PrivacyGuardImagePath: + ps4NPtitleDatPath: + ps4RemotePlayKeyAssignment: -1 + ps4RemotePlayKeyMappingDir: + ps4PlayTogetherPlayerCount: 0 + ps4EnterButtonAssignment: 1 + ps4ApplicationParam1: 0 + ps4ApplicationParam2: 0 + ps4ApplicationParam3: 0 + ps4ApplicationParam4: 0 + ps4DownloadDataSize: 0 + ps4GarlicHeapSize: 2048 + ps4ProGarlicHeapSize: 2560 + ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ + ps4pnSessions: 1 + ps4pnPresence: 1 + ps4pnFriends: 1 + ps4pnGameCustomData: 1 + playerPrefsSupport: 0 + restrictedAudioUsageRights: 0 + ps4UseResolutionFallback: 0 + ps4ReprojectionSupport: 0 + ps4UseAudio3dBackend: 0 + ps4SocialScreenEnabled: 0 + ps4ScriptOptimizationLevel: 0 + ps4Audio3dVirtualSpeakerCount: 14 + ps4attribCpuUsage: 0 + ps4PatchPkgPath: + ps4PatchLatestPkgPath: + ps4PatchChangeinfoPath: + ps4PatchDayOne: 0 + ps4attribUserManagement: 0 + ps4attribMoveSupport: 0 + ps4attrib3DSupport: 0 + ps4attribShareSupport: 0 + ps4attribExclusiveVR: 0 + ps4disableAutoHideSplash: 0 + ps4videoRecordingFeaturesUsed: 0 + ps4contentSearchFeaturesUsed: 0 + ps4attribEyeToEyeDistanceSettingVR: 0 + ps4IncludedModules: [] + monoEnv: + psp2Splashimage: {fileID: 0} + psp2NPTrophyPackPath: + psp2NPSupportGBMorGJP: 0 + psp2NPAgeRating: 12 + psp2NPTitleDatPath: + psp2NPCommsID: + psp2NPCommunicationsID: + psp2NPCommsPassphrase: + psp2NPCommsSig: + psp2ParamSfxPath: + psp2ManualPath: + psp2LiveAreaGatePath: + psp2LiveAreaBackroundPath: + psp2LiveAreaPath: + psp2LiveAreaTrialPath: + psp2PatchChangeInfoPath: + psp2PatchOriginalPackage: + psp2PackagePassword: F69AzBlax3CF3EDNhm3soLBPh71Yexui + psp2KeystoneFile: + psp2MemoryExpansionMode: 0 + psp2DRMType: 0 + psp2StorageType: 0 + psp2MediaCapacity: 0 + psp2DLCConfigPath: + psp2ThumbnailPath: + psp2BackgroundPath: + psp2SoundPath: + psp2TrophyCommId: + psp2TrophyPackagePath: + psp2PackagedResourcesPath: + psp2SaveDataQuota: 10240 + psp2ParentalLevel: 1 + psp2ShortTitle: Not Set + psp2ContentID: IV0000-ABCD12345_00-0123456789ABCDEF + psp2Category: 0 + psp2MasterVersion: 01.00 + psp2AppVersion: 01.00 + psp2TVBootMode: 0 + psp2EnterButtonAssignment: 2 + psp2TVDisableEmu: 0 + psp2AllowTwitterDialog: 1 + psp2Upgradable: 0 + psp2HealthWarning: 0 + psp2UseLibLocation: 0 + psp2InfoBarOnStartup: 0 + psp2InfoBarColor: 0 + psp2ScriptOptimizationLevel: 0 + psmSplashimage: {fileID: 0} + splashScreenBackgroundSourceLandscape: {fileID: 0} + splashScreenBackgroundSourcePortrait: {fileID: 0} + spritePackerPolicy: + webGLMemorySize: 256 + webGLExceptionSupport: 1 + webGLNameFilesAsHashes: 0 + webGLDataCaching: 0 + webGLDebugSymbols: 0 + webGLEmscriptenArgs: + webGLModulesDirectory: + webGLTemplate: APPLICATION:Default + webGLAnalyzeBuildSize: 0 + webGLUseEmbeddedResources: 0 + webGLUseWasm: 0 + webGLCompressionFormat: 1 + scriptingDefineSymbols: {} + platformArchitecture: {} + scriptingBackend: + Metro: 1 + incrementalIl2cppBuild: {} + additionalIl2CppArgs: + scriptingRuntimeVersion: 1 + apiCompatibilityLevelPerPlatform: {} + m_RenderingPath: 1 + m_MobileRenderingPath: 1 + metroPackageName: MixedRealityAzureKit-Unity + metroPackageVersion: 1.0.0.0 + metroCertificatePath: + metroCertificatePassword: + metroCertificateSubject: + metroCertificateIssuer: + metroCertificateNotAfter: 0000000000000000 + metroApplicationDescription: MixedRealityAzureKit-Unity + wsaImages: {} + metroTileShortName: + metroCommandLineArgsFile: + metroTileShowName: 0 + metroMediumTileShowName: 0 + metroLargeTileShowName: 0 + metroWideTileShowName: 0 + metroDefaultTileSize: 1 + metroTileForegroundText: 2 + metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} + metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, + a: 1} + metroSplashScreenUseBackgroundColor: 0 + platformCapabilities: + WindowsStoreApps: + AllJoyn: False + BlockedChatMessages: False + Bluetooth: False + Chat: False + CodeGeneration: False + EnterpriseAuthentication: False + HumanInterfaceDevice: False + InputInjectionBrokered: False + InternetClient: True + InternetClientServer: False + Location: False + Microphone: True + MusicLibrary: False + Objects3D: False + PhoneCall: False + PicturesLibrary: False + PrivateNetworkClientServer: False + Proximity: False + RemovableStorage: False + SharedUserCertificates: False + SpatialPerception: False + UserAccountInformation: False + VideosLibrary: False + VoipCall: False + WebCam: False + metroFTAName: + metroFTAFileTypes: [] + metroProtocolName: + metroCompilationOverrides: 1 + tizenProductDescription: + tizenProductURL: + tizenSigningProfileName: + tizenGPSPermissions: 0 + tizenMicrophonePermissions: 0 + tizenDeploymentTarget: + tizenDeploymentTargetType: -1 + tizenMinOSVersion: 1 + n3dsUseExtSaveData: 0 + n3dsCompressStaticMem: 1 + n3dsExtSaveDataNumber: 0x12345 + n3dsStackSize: 131072 + n3dsTargetPlatform: 2 + n3dsRegion: 7 + n3dsMediaSize: 0 + n3dsLogoStyle: 3 + n3dsTitle: GameName + n3dsProductCode: + n3dsApplicationId: 0xFF3FF + stvDeviceAddress: + stvProductDescription: + stvProductAuthor: + stvProductAuthorEmail: + stvProductLink: + stvProductCategory: 0 + XboxOneProductId: + XboxOneUpdateKey: + XboxOneSandboxId: + XboxOneContentId: + XboxOneTitleId: + XboxOneSCId: + XboxOneGameOsOverridePath: + XboxOnePackagingOverridePath: + XboxOneAppManifestOverridePath: + XboxOnePackageEncryption: 0 + XboxOnePackageUpdateGranularity: 2 + XboxOneDescription: + XboxOneLanguage: + - enus + XboxOneCapability: [] + XboxOneGameRating: {} + XboxOneIsContentPackage: 0 + XboxOneEnableGPUVariability: 0 + XboxOneSockets: {} + XboxOneSplashScreen: {fileID: 0} + XboxOneAllowedProductIds: [] + XboxOnePersistentLocalStorageSize: 0 + xboxOneScriptCompiler: 0 + vrEditorSettings: + daydream: + daydreamIconForeground: {fileID: 0} + daydreamIconBackground: {fileID: 0} + cloudServicesEnabled: {} + facebookSdkVersion: 7.9.4 + apiCompatibilityLevel: 3 + cloudProjectId: + projectName: + organizationId: + cloudEnabled: 0 + enableNativePlatformBackendsForNewInputSystem: 0 + disableOldInputManagerSupport: 0 diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/ProjectVersion.txt b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/ProjectVersion.txt new file mode 100644 index 0000000..06da093 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/ProjectVersion.txt @@ -0,0 +1 @@ +m_EditorVersion: 2017.2.1p2 diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/QualitySettings.asset b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/QualitySettings.asset new file mode 100644 index 0000000..643dbb3 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/QualitySettings.asset @@ -0,0 +1,192 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!47 &1 +QualitySettings: + m_ObjectHideFlags: 0 + serializedVersion: 5 + m_CurrentQuality: 5 + m_QualitySettings: + - serializedVersion: 2 + name: Very Low + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 15 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 1 + textureQuality: 1 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.3 + maximumLODLevel: 0 + particleRaycastBudget: 4 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 4 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Low + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.4 + maximumLODLevel: 0 + particleRaycastBudget: 16 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 4 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Medium + pixelLightCount: 1 + shadows: 1 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 1 + lodBias: 0.7 + maximumLODLevel: 0 + particleRaycastBudget: 64 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 4 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: High + pixelLightCount: 2 + shadows: 2 + shadowResolution: 1 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 40 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1 + maximumLODLevel: 0 + particleRaycastBudget: 256 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 4 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Very High + pixelLightCount: 3 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 70 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 4 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1.5 + maximumLODLevel: 0 + particleRaycastBudget: 1024 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 4 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Ultra + pixelLightCount: 4 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 4 + shadowDistance: 150 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 4 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 2 + maximumLODLevel: 0 + particleRaycastBudget: 4096 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 4 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + m_PerPlatformDefaultQuality: + Android: 2 + Nintendo 3DS: 5 + Nintendo Switch: 5 + PS4: 5 + PSM: 5 + PSP2: 2 + Samsung TV: 2 + Standalone: 5 + Tizen: 2 + WebGL: 3 + WiiU: 5 + Windows Store Apps: 5 + XboxOne: 5 + iPhone: 2 + tvOS: 2 diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/TagManager.asset b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/TagManager.asset new file mode 100644 index 0000000..1c92a78 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/TagManager.asset @@ -0,0 +1,43 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!78 &1 +TagManager: + serializedVersion: 2 + tags: [] + layers: + - Default + - TransparentFX + - Ignore Raycast + - + - Water + - UI + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + m_SortingLayers: + - name: Default + uniqueID: 0 + locked: 0 diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/TimeManager.asset b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/TimeManager.asset new file mode 100644 index 0000000..558a017 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/TimeManager.asset @@ -0,0 +1,9 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!5 &1 +TimeManager: + m_ObjectHideFlags: 0 + Fixed Timestep: 0.02 + Maximum Allowed Timestep: 0.33333334 + m_TimeScale: 1 + Maximum Particle Timestep: 0.03 diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/UnityConnectSettings.asset b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/UnityConnectSettings.asset new file mode 100644 index 0000000..3da14d5 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/ProjectSettings/UnityConnectSettings.asset @@ -0,0 +1,34 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!310 &1 +UnityConnectSettings: + m_ObjectHideFlags: 0 + m_Enabled: 0 + m_TestMode: 0 + m_TestEventUrl: + m_TestConfigUrl: + m_TestInitMode: 0 + CrashReportingSettings: + m_EventUrl: https://perf-events.cloud.unity3d.com/api/events/crashes + m_NativeEventUrl: https://perf-events.cloud.unity3d.com/symbolicate + m_Enabled: 0 + m_CaptureEditorExceptions: 1 + UnityPurchasingSettings: + m_Enabled: 0 + m_TestMode: 0 + UnityAnalyticsSettings: + m_Enabled: 0 + m_InitializeOnStartup: 1 + m_TestMode: 0 + m_TestEventUrl: + m_TestConfigUrl: + UnityAdsSettings: + m_Enabled: 0 + m_InitializeOnStartup: 1 + m_TestMode: 0 + m_IosGameId: + m_AndroidGameId: + m_GameIds: {} + m_GameId: + PerformanceReportingSettings: + m_Enabled: 0 diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/README.md b/Reference-Architecture/Client/MixedReality-Azure-Unity/README.md new file mode 100644 index 0000000..4505a6b --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/README.md @@ -0,0 +1,5 @@ +# MixedReality Azure for Unity + +This portion of the project provides reference implementations for leveraging Azure services in a Unity environment. It contains the following modules: + +- [LUIS for XR](Assets/MixedRealityAzure/LUIS) - A powerful Natural Language replacement for voice commands. diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/UnityPackageManager/manifest.json b/Reference-Architecture/Client/MixedReality-Azure-Unity/UnityPackageManager/manifest.json new file mode 100644 index 0000000..526aca6 --- /dev/null +++ b/Reference-Architecture/Client/MixedReality-Azure-Unity/UnityPackageManager/manifest.json @@ -0,0 +1,4 @@ +{ + "dependencies": { + } +} diff --git a/Reference-Architecture/Client/MixedReality-Azure-Unity/UnityPackages/MR-LUIS-1.0.0.unitypackage b/Reference-Architecture/Client/MixedReality-Azure-Unity/UnityPackages/MR-LUIS-1.0.0.unitypackage new file mode 100644 index 0000000..8ce41e3 Binary files /dev/null and b/Reference-Architecture/Client/MixedReality-Azure-Unity/UnityPackages/MR-LUIS-1.0.0.unitypackage differ