├── Assets ├── SampleViewer └── SampleViewer.meta ├── Build ├── Build │ ├── Build.wasm │ ├── Build.data.unityweb │ └── Build.json ├── TemplateData │ ├── favicon.ico │ ├── fullscreen.png │ ├── webgl-logo.png │ ├── progressEmpty.Dark.png │ ├── progressEmpty.Light.png │ ├── progressFull.Dark.png │ ├── progressFull.Light.png │ ├── progressLogo.Dark.png │ ├── progressLogo.Light.png │ ├── UnityProgress.js │ └── style.css └── index.html ├── ProjectSettings ├── ProjectVersion.txt ├── CommonBurstAotSettings.json ├── ClusterInputManager.asset ├── PresetManager.asset ├── XRSettings.asset ├── TimeManager.asset ├── EditorBuildSettings.asset ├── VFXManager.asset ├── BurstAotSettings_WebGL.json ├── AudioManager.asset ├── TagManager.asset ├── UnityConnectSettings.asset ├── PackageManagerSettings.asset ├── EditorSettings.asset ├── DynamicsManager.asset ├── NavMeshAreas.asset ├── Physics2DSettings.asset ├── GraphicsSettings.asset ├── InputManager.asset ├── QualitySettings.asset └── ProjectSettings.asset ├── Packages ├── webxr-input-profiles-loader │ ├── LICENSE.md.meta │ ├── README.md.meta │ ├── CHANGELOG.md.meta │ ├── package.json.meta │ ├── Runtime.meta │ ├── Runtime │ │ ├── Scripts.meta │ │ ├── ShaderVariants.meta │ │ ├── Scripts │ │ │ ├── WebXRInputProfile.asmdef.meta │ │ │ ├── InputProfileLoader.cs.meta │ │ │ ├── InputProfileModel.cs.meta │ │ │ ├── WebGLDeferAgent.cs.meta │ │ │ ├── InputProfileStructure.cs.meta │ │ │ ├── WebXRInputProfile.asmdef │ │ │ ├── WebGLDeferAgent.cs │ │ │ ├── InputProfileStructure.cs │ │ │ ├── InputProfileModel.cs │ │ │ └── InputProfileLoader.cs │ │ └── ShaderVariants │ │ │ ├── glTFShaderVariantsBuiltInRP.shadervariants.meta │ │ │ ├── glTFShaderVariantsURP.shadervariants.meta │ │ │ ├── glTFShaderVariantsLegacyURP.shadervariants.meta │ │ │ ├── glTFShaderVariantsLegacyURP.shadervariants │ │ │ ├── glTFShaderVariantsURP.shadervariants │ │ │ └── glTFShaderVariantsBuiltInRP.shadervariants │ ├── Samples~ │ │ └── SampleViewer │ │ │ ├── Scenes │ │ │ └── SampleViewer.unity.meta │ │ │ ├── Scenes.meta │ │ │ ├── Scripts.meta │ │ │ └── Scripts │ │ │ ├── WebXRInputProfile.Viewer.asmdef.meta │ │ │ ├── InputProfileViewer.cs.meta │ │ │ ├── WebXRInputProfile.Viewer.asmdef │ │ │ └── InputProfileViewer.cs │ ├── package.json │ ├── LICENSE.md │ ├── README.md │ └── CHANGELOG.md ├── manifest.json └── packages-lock.json ├── index.html ├── LICENSE ├── .gitignore └── README.md /Assets/SampleViewer: -------------------------------------------------------------------------------- 1 | ../Packages/webxr-input-profiles-loader/Samples~/SampleViewer -------------------------------------------------------------------------------- /Build/Build/Build.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/De-Panther/webxr-input-profiles-loader/HEAD/Build/Build/Build.wasm -------------------------------------------------------------------------------- /ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 2019.4.33f1 2 | m_EditorVersionWithRevision: 2019.4.33f1 (c9b2b02eeeef) 3 | -------------------------------------------------------------------------------- /Build/Build/Build.data.unityweb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/De-Panther/webxr-input-profiles-loader/HEAD/Build/Build/Build.data.unityweb -------------------------------------------------------------------------------- /Build/TemplateData/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/De-Panther/webxr-input-profiles-loader/HEAD/Build/TemplateData/favicon.ico -------------------------------------------------------------------------------- /Build/TemplateData/fullscreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/De-Panther/webxr-input-profiles-loader/HEAD/Build/TemplateData/fullscreen.png -------------------------------------------------------------------------------- /Build/TemplateData/webgl-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/De-Panther/webxr-input-profiles-loader/HEAD/Build/TemplateData/webgl-logo.png -------------------------------------------------------------------------------- /ProjectSettings/CommonBurstAotSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "MonoBehaviour": { 3 | "Version": 4, 4 | "DisabledWarnings": "" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Build/TemplateData/progressEmpty.Dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/De-Panther/webxr-input-profiles-loader/HEAD/Build/TemplateData/progressEmpty.Dark.png -------------------------------------------------------------------------------- /Build/TemplateData/progressEmpty.Light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/De-Panther/webxr-input-profiles-loader/HEAD/Build/TemplateData/progressEmpty.Light.png -------------------------------------------------------------------------------- /Build/TemplateData/progressFull.Dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/De-Panther/webxr-input-profiles-loader/HEAD/Build/TemplateData/progressFull.Dark.png -------------------------------------------------------------------------------- /Build/TemplateData/progressFull.Light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/De-Panther/webxr-input-profiles-loader/HEAD/Build/TemplateData/progressFull.Light.png -------------------------------------------------------------------------------- /Build/TemplateData/progressLogo.Dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/De-Panther/webxr-input-profiles-loader/HEAD/Build/TemplateData/progressLogo.Dark.png -------------------------------------------------------------------------------- /Build/TemplateData/progressLogo.Light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/De-Panther/webxr-input-profiles-loader/HEAD/Build/TemplateData/progressLogo.Light.png -------------------------------------------------------------------------------- /ProjectSettings/ClusterInputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!236 &1 4 | ClusterInputManager: 5 | m_ObjectHideFlags: 0 6 | m_Inputs: [] 7 | -------------------------------------------------------------------------------- /ProjectSettings/PresetManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1386491679 &1 4 | PresetManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_DefaultPresets: {} 8 | -------------------------------------------------------------------------------- /Assets/SampleViewer.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b98003a7de758a54396bf5d1d5f31d95 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/LICENSE.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cdf25279ac9bb67458d7b8cdd0a89696 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/README.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 40b78e203ec94cb4fad290ce4ed87bc8 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /ProjectSettings/XRSettings.asset: -------------------------------------------------------------------------------- 1 | { 2 | "m_SettingKeys": [ 3 | "VR Device Disabled", 4 | "VR Device User Alert" 5 | ], 6 | "m_SettingValues": [ 7 | "False", 8 | "False" 9 | ] 10 | } -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/CHANGELOG.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8021da51d74f5754885d3caf2fc64a51 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/package.json.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6a305e13deb54b740b94e99ce243a5cf 3 | PackageManifestImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Runtime.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d41be3709298f864ab69004043ccd01d 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Runtime/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bc690ee845bb07b4781f963e4a7ae43e 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Runtime/ShaderVariants.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 45ac04f20b6fe9b40b29b4bd2e8ec7a5 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Samples~/SampleViewer/Scenes/SampleViewer.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7416a062a65ad2944ab4f216af691c25 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Runtime/Scripts/WebXRInputProfile.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 84a2d09f0bb073f40922f5ea5362abe7 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Samples~/SampleViewer/Scenes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 840b6b4bc83600844ae95fbdbf6cbe3c 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Samples~/SampleViewer/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fe5d5e68a71bc5c48b00f4347fa068ba 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!5 &1 4 | TimeManager: 5 | m_ObjectHideFlags: 0 6 | Fixed Timestep: 0.02 7 | Maximum Allowed Timestep: 0.33333334 8 | m_TimeScale: 1 9 | Maximum Particle Timestep: 0.03 10 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Samples~/SampleViewer/Scripts/WebXRInputProfile.Viewer.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7b8480f899ef627498520d2ee460756c 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Runtime/ShaderVariants/glTFShaderVariantsBuiltInRP.shadervariants.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 14ec05db04ad028438150751d08d01df 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Runtime/ShaderVariants/glTFShaderVariantsURP.shadervariants.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ad92b098823e2e44db91f5880254a0d1 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 20000000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Runtime/ShaderVariants/glTFShaderVariantsLegacyURP.shadervariants.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cf3940676a8602e48b07f48bb467b20c 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 20000000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | WebXR Input Profiles Loader in Unity 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1045 &1 4 | EditorBuildSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Scenes: 8 | - enabled: 1 9 | path: Assets/SampleViewer/Scenes/SampleViewer.unity 10 | guid: 7416a062a65ad2944ab4f216af691c25 11 | m_configObjects: {} 12 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Runtime/Scripts/InputProfileLoader.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 85e281af6e2852048a8e9b08ecf090c1 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Runtime/Scripts/InputProfileModel.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ef75d5555a273dd44898e82a31b3fbb3 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Runtime/Scripts/WebGLDeferAgent.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a15e897e180f94d4c85ea00ff7a85ca0 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Runtime/Scripts/InputProfileStructure.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4150b9d52f537a544a6a9f3b93fe6ccd 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Samples~/SampleViewer/Scripts/InputProfileViewer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9a4ebdb12d6bf3142bf2f78d4fe64d35 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /ProjectSettings/VFXManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!937362698 &1 4 | VFXManager: 5 | m_ObjectHideFlags: 0 6 | m_IndirectShader: {fileID: 0} 7 | m_CopyBufferShader: {fileID: 0} 8 | m_SortShader: {fileID: 0} 9 | m_StripUpdateShader: {fileID: 0} 10 | m_RenderPipeSettingsPath: 11 | m_FixedTimeStep: 0.016666668 12 | m_MaxDeltaTime: 0.05 13 | -------------------------------------------------------------------------------- /ProjectSettings/BurstAotSettings_WebGL.json: -------------------------------------------------------------------------------- 1 | { 2 | "MonoBehaviour": { 3 | "Version": 4, 4 | "EnableBurstCompilation": true, 5 | "EnableOptimisations": true, 6 | "EnableSafetyChecks": false, 7 | "EnableDebugInAllBuilds": false, 8 | "CpuMinTargetX32": 0, 9 | "CpuMaxTargetX32": 0, 10 | "CpuMinTargetX64": 0, 11 | "CpuMaxTargetX64": 0, 12 | "OptimizeFor": 0 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Runtime/Scripts/WebXRInputProfile.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "WebXRInputProfile", 3 | "references": [ 4 | "GUID:a42927d1d4a3b4cda9b076a7adecb9cc" 5 | ], 6 | "includePlatforms": [], 7 | "excludePlatforms": [], 8 | "allowUnsafeCode": false, 9 | "overrideReferences": false, 10 | "precompiledReferences": [], 11 | "autoReferenced": false, 12 | "defineConstraints": [], 13 | "versionDefines": [], 14 | "noEngineReferences": false 15 | } -------------------------------------------------------------------------------- /ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!11 &1 4 | AudioManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Volume: 1 8 | Rolloff Scale: 1 9 | Doppler Factor: 1 10 | Default Speaker Mode: 2 11 | m_SampleRate: 0 12 | m_DSPBufferSize: 1024 13 | m_VirtualVoiceCount: 512 14 | m_RealVoiceCount: 32 15 | m_SpatializerPlugin: 16 | m_AmbisonicDecoderPlugin: 17 | m_DisableAudio: 0 18 | m_VirtualizeEffects: 1 19 | m_RequestedDSPBufferSize: 1024 20 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Samples~/SampleViewer/Scripts/WebXRInputProfile.Viewer.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "WebXRInputProfile.Viewer", 3 | "references": [ 4 | "GUID:84a2d09f0bb073f40922f5ea5362abe7" 5 | ], 6 | "includePlatforms": [], 7 | "excludePlatforms": [], 8 | "allowUnsafeCode": false, 9 | "overrideReferences": false, 10 | "precompiledReferences": [], 11 | "autoReferenced": false, 12 | "defineConstraints": [], 13 | "versionDefines": [], 14 | "noEngineReferences": false 15 | } -------------------------------------------------------------------------------- /Build/Build/Build.json: -------------------------------------------------------------------------------- 1 | { 2 | "companyName": "De-Panther", 3 | "productName": "WebXR Input Profiles Loader", 4 | "productVersion": "0.1", 5 | "dataUrl": "Build.data.unityweb", 6 | "wasmCodeUrl": "Build.wasm", 7 | "wasmFrameworkUrl": "Build.wasm.framework.unityweb", 8 | "graphicsAPI": ["WebGL 2.0","WebGL 1.0"], 9 | "webglContextAttributes": {"preserveDrawingBuffer": false}, 10 | "splashScreenStyle": "Dark", 11 | "backgroundColor": "#231F20", 12 | "cacheControl": {"default": "must-revalidate"}, 13 | "developmentBuild": false, 14 | "multithreading": false, 15 | "unityVersion": "2019.4.33f1" 16 | } -------------------------------------------------------------------------------- /ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!78 &1 4 | TagManager: 5 | serializedVersion: 2 6 | tags: [] 7 | layers: 8 | - Default 9 | - TransparentFX 10 | - Ignore Raycast 11 | - 12 | - Water 13 | - UI 14 | - 15 | - 16 | - 17 | - 18 | - 19 | - 20 | - 21 | - 22 | - 23 | - 24 | - 25 | - 26 | - 27 | - 28 | - 29 | - 30 | - 31 | - 32 | - 33 | - 34 | - 35 | - 36 | - 37 | - 38 | - 39 | - 40 | m_SortingLayers: 41 | - name: Default 42 | uniqueID: 0 43 | locked: 0 44 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Runtime/Scripts/WebGLDeferAgent.cs: -------------------------------------------------------------------------------- 1 | using GLTFast; 2 | using System.Threading.Tasks; 3 | using UnityEngine; 4 | 5 | namespace WebXRInputProfile 6 | { 7 | public class WebGLDeferAgent : MonoBehaviour, IDeferAgent 8 | { 9 | public bool ShouldDefer() 10 | { 11 | return false; 12 | } 13 | 14 | public bool ShouldDefer(float duration) 15 | { 16 | return false; 17 | } 18 | 19 | public async Task BreakPoint() 20 | { 21 | await Task.Yield(); 22 | } 23 | 24 | public async Task BreakPoint(float duration) 25 | { 26 | await Task.Yield(); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "com.de-panther.webxr-input-profiles-loader", 3 | "displayName": "WebXR Input Profiles Loader", 4 | "version": "0.6.2", 5 | "unity": "2019.4", 6 | "description": "Load WebXR Input Profiles in Unity", 7 | "keywords": [ 8 | "webxr", 9 | "xr", 10 | "ar", 11 | "vr" 12 | ], 13 | "author": { 14 | "name": "De-Panther", 15 | "url": "https://github.com/De-Panther/webxr-input-profiles-loader" 16 | }, 17 | "samples": [ 18 | { 19 | "displayName": "Sample Viewer Scene", 20 | "description": "Sample Scene with Input Profiles Viewer", 21 | "path": "Samples~/SampleViewer" 22 | } 23 | ], 24 | "dependencies": { 25 | "com.unity.nuget.newtonsoft-json": "2.0.0", 26 | "com.unity.cloud.gltfast": "5.2.0" 27 | }, 28 | "unityRelease": "33f1" 29 | } -------------------------------------------------------------------------------- /ProjectSettings/UnityConnectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!310 &1 4 | UnityConnectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 1 7 | m_Enabled: 0 8 | m_TestMode: 0 9 | m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events 10 | m_EventUrl: https://cdp.cloud.unity3d.com/v1/events 11 | m_ConfigUrl: https://config.uca.cloud.unity3d.com 12 | m_TestInitMode: 0 13 | CrashReportingSettings: 14 | m_EventUrl: https://perf-events.cloud.unity3d.com 15 | m_Enabled: 0 16 | m_LogBufferSize: 10 17 | m_CaptureEditorExceptions: 1 18 | UnityPurchasingSettings: 19 | m_Enabled: 0 20 | m_TestMode: 0 21 | UnityAnalyticsSettings: 22 | m_Enabled: 0 23 | m_TestMode: 0 24 | m_InitializeOnStartup: 1 25 | UnityAdsSettings: 26 | m_Enabled: 0 27 | m_InitializeOnStartup: 1 28 | m_TestMode: 0 29 | m_IosGameId: 30 | m_AndroidGameId: 31 | m_GameIds: {} 32 | m_GameId: 33 | PerformanceReportingSettings: 34 | m_Enabled: 0 35 | -------------------------------------------------------------------------------- /ProjectSettings/PackageManagerSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &1 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 61 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} 13 | m_Name: 14 | m_EditorClassIdentifier: 15 | m_ScopedRegistriesSettingsExpanded: 1 16 | oneTimeWarningShown: 0 17 | m_Registries: 18 | - m_Id: main 19 | m_Name: 20 | m_Url: https://packages.unity.com 21 | m_Scopes: [] 22 | m_IsDefault: 1 23 | m_UserSelectedRegistryName: 24 | m_UserAddingNewScopedRegistry: 0 25 | m_RegistryInfoDraft: 26 | m_ErrorMessage: 27 | m_Original: 28 | m_Id: 29 | m_Name: 30 | m_Url: 31 | m_Scopes: [] 32 | m_IsDefault: 0 33 | m_Modified: 0 34 | m_Name: 35 | m_Url: 36 | m_Scopes: 37 | - 38 | m_SelectedScopeIndex: 0 39 | -------------------------------------------------------------------------------- /Build/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Unity WebGL Player | WebXR Input Profiles Loader 7 | 8 | 9 | 10 | 11 | 14 | 15 | 16 |
17 |
18 | 23 |
24 | 25 | 26 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Oren Weizman 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Oren Weizman 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!159 &1 4 | EditorSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 9 7 | m_ExternalVersionControlSupport: Visible Meta Files 8 | m_SerializationMode: 2 9 | m_LineEndingsForNewScripts: 0 10 | m_DefaultBehaviorMode: 0 11 | m_PrefabRegularEnvironment: {fileID: 0} 12 | m_PrefabUIEnvironment: {fileID: 0} 13 | m_SpritePackerMode: 0 14 | m_SpritePackerPaddingPower: 1 15 | m_EtcTextureCompressorBehavior: 1 16 | m_EtcTextureFastCompressor: 1 17 | m_EtcTextureNormalCompressor: 2 18 | m_EtcTextureBestCompressor: 4 19 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref 20 | m_ProjectGenerationRootNamespace: 21 | m_CollabEditorSettings: 22 | inProgressEnabled: 1 23 | m_EnableTextureStreamingInEditMode: 1 24 | m_EnableTextureStreamingInPlayMode: 1 25 | m_AsyncShaderCompilation: 1 26 | m_EnterPlayModeOptionsEnabled: 0 27 | m_EnterPlayModeOptions: 3 28 | m_ShowLightmapResolutionOverlay: 1 29 | m_UseLegacyProbeSampleCount: 0 30 | m_AssetPipelineMode: 1 31 | m_CacheServerMode: 0 32 | m_CacheServerEndpoint: 33 | m_CacheServerNamespacePrefix: default 34 | m_CacheServerEnableDownload: 1 35 | m_CacheServerEnableUpload: 1 36 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # This .gitignore file should be placed at the root of your Unity project directory 2 | # 3 | # Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore 4 | # 5 | /[Ll]ibrary/ 6 | /[Tt]emp/ 7 | /[Oo]bj/ 8 | /[Bb]uilds/ 9 | /[Ll]ogs/ 10 | /[Mm]emoryCaptures/ 11 | 12 | # Asset meta data should only be ignored when the corresponding asset is also ignored 13 | !/[Aa]ssets/**/*.meta 14 | 15 | # Uncomment this line if you wish to ignore the asset store tools plugin 16 | # /[Aa]ssets/AssetStoreTools* 17 | 18 | # Autogenerated Jetbrains Rider plugin 19 | [Aa]ssets/Plugins/Editor/JetBrains* 20 | 21 | # Visual Studio cache directory 22 | .vs/ 23 | 24 | # Gradle cache directory 25 | .gradle/ 26 | 27 | # Autogenerated VS/MD/Consulo solution and project files 28 | ExportedObj/ 29 | .consulo/ 30 | *.csproj 31 | *.unityproj 32 | *.sln 33 | *.suo 34 | *.tmp 35 | *.user 36 | *.userprefs 37 | *.pidb 38 | *.booproj 39 | *.svd 40 | *.pdb 41 | *.mdb 42 | *.opendb 43 | *.VC.db 44 | 45 | # Unity3D generated meta files 46 | *.pidb.meta 47 | *.pdb.meta 48 | *.mdb.meta 49 | 50 | # Unity3D generated file on crash reports 51 | sysinfo.txt 52 | 53 | # Builds 54 | *.apk 55 | *.unitypackage 56 | 57 | # Crashlytics generated file 58 | crashlytics-build.properties 59 | 60 | /.vscode 61 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/README.md: -------------------------------------------------------------------------------- 1 | # WebXR Input Profiles Loader 2 | 3 | WebXR Input Profiles Loader in Unity. Based on [WebXR Input Profiles](https://github.com/immersive-web/webxr-input-profiles) 4 | 5 | The package is intended to be used with WebXR exporters in general, and not only with [WebXR Export](https://github.com/De-Panther/unity-webxr-export) 6 | 7 | The package uses [glTFast](https://docs.unity3d.com/Packages/com.unity.cloud.gltfast@latest) to load the models, and Unity's package of Newtonsoft Json.NET to parse the profiles. 8 | 9 | You might need to add Shader Variants of the Input Profiles Models to the build for the shaders to work. More info about that can be found at the glTFast docs. 10 | 11 | You can use `glTFShaderVariantsURP`, `glTFShaderVariantsLegacyURP` or `glTFShaderVariantsBuiltInRP` in `Project Settings > Graphics > Preloaded Shaders` depending on the active render pipeline. 12 | 13 | ## Setting package using OpenUPM 14 | 15 | Set a `Scoped Registry` in `Project Settings > Package Manager` for OpenUPM. 16 | 17 | ``` 18 | Name: OpenUPM 19 | URL: https://package.openupm.com 20 | Scope(s): com.de-panther 21 | ``` 22 | 23 | Then in `Window > Package Manager` selecting `Packages: My Registries` and the WebXR Input Profiles Loader package would be available for install. 24 | -------------------------------------------------------------------------------- /Build/TemplateData/UnityProgress.js: -------------------------------------------------------------------------------- 1 | function UnityProgress(unityInstance, progress) { 2 | if (!unityInstance.Module) 3 | return; 4 | if (!unityInstance.logo) { 5 | unityInstance.logo = document.createElement("div"); 6 | unityInstance.logo.className = "logo " + unityInstance.Module.splashScreenStyle; 7 | unityInstance.container.appendChild(unityInstance.logo); 8 | } 9 | if (!unityInstance.progress) { 10 | unityInstance.progress = document.createElement("div"); 11 | unityInstance.progress.className = "progress " + unityInstance.Module.splashScreenStyle; 12 | unityInstance.progress.empty = document.createElement("div"); 13 | unityInstance.progress.empty.className = "empty"; 14 | unityInstance.progress.appendChild(unityInstance.progress.empty); 15 | unityInstance.progress.full = document.createElement("div"); 16 | unityInstance.progress.full.className = "full"; 17 | unityInstance.progress.appendChild(unityInstance.progress.full); 18 | unityInstance.container.appendChild(unityInstance.progress); 19 | } 20 | unityInstance.progress.full.style.width = (100 * progress) + "%"; 21 | unityInstance.progress.empty.style.width = (100 * (1 - progress)) + "%"; 22 | if (progress == 1) 23 | unityInstance.logo.style.display = unityInstance.progress.style.display = "none"; 24 | } -------------------------------------------------------------------------------- /ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!55 &1 4 | PhysicsManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 11 7 | m_Gravity: {x: 0, y: -9.81, z: 0} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_BounceThreshold: 2 10 | m_SleepThreshold: 0.005 11 | m_DefaultContactOffset: 0.01 12 | m_DefaultSolverIterations: 6 13 | m_DefaultSolverVelocityIterations: 1 14 | m_QueriesHitBackfaces: 0 15 | m_QueriesHitTriggers: 1 16 | m_EnableAdaptiveForce: 0 17 | m_ClothInterCollisionDistance: 0 18 | m_ClothInterCollisionStiffness: 0 19 | m_ContactsGeneration: 1 20 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 21 | m_AutoSimulation: 1 22 | m_AutoSyncTransforms: 0 23 | m_ReuseCollisionCallbacks: 1 24 | m_ClothInterCollisionSettingsToggle: 0 25 | m_ContactPairsMode: 0 26 | m_BroadphaseType: 0 27 | m_WorldBounds: 28 | m_Center: {x: 0, y: 0, z: 0} 29 | m_Extent: {x: 250, y: 250, z: 250} 30 | m_WorldSubdivisions: 8 31 | m_FrictionType: 0 32 | m_EnableEnhancedDeterminism: 0 33 | m_EnableUnifiedHeightmaps: 1 34 | m_DefaultMaxAngluarSpeed: 7 35 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Runtime/ShaderVariants/glTFShaderVariantsLegacyURP.shadervariants: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!200 &20000000 4 | ShaderVariantCollection: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_Name: glTFShaderVariantsLegacyURP 10 | m_Shaders: 11 | - first: {fileID: -6465566751694194690, guid: ba6d401c74b2c4f96af7edf0fe32241e, 12 | type: 3} 13 | second: 14 | variants: 15 | - keywords: 16 | passType: 8 17 | - keywords: _EMISSIVE 18 | passType: 8 19 | - keywords: _ADDITIONAL_LIGHTS_VERTEX 20 | passType: 13 21 | - keywords: _ADDITIONAL_LIGHTS_VERTEX _EMISSIVE 22 | passType: 13 23 | - first: {fileID: -6465566751694194690, guid: 90c26dfde11bf4ff69ef936c6e6b1ed1, 24 | type: 3} 25 | second: 26 | variants: 27 | - keywords: 28 | passType: 8 29 | - keywords: _OCCLUSION 30 | passType: 8 31 | - keywords: _EMISSIVE _OCCLUSION 32 | passType: 8 33 | - keywords: _ADDITIONAL_LIGHTS_VERTEX 34 | passType: 13 35 | - keywords: _ADDITIONAL_LIGHTS_VERTEX _OCCLUSION 36 | passType: 13 37 | - keywords: _ADDITIONAL_LIGHTS_VERTEX _EMISSIVE _OCCLUSION 38 | passType: 13 39 | -------------------------------------------------------------------------------- /Build/TemplateData/style.css: -------------------------------------------------------------------------------- 1 | .webgl-content * {border: 0; margin: 0; padding: 0} 2 | .webgl-content {position: absolute; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%);} 3 | 4 | .webgl-content .logo, .progress {position: absolute; left: 50%; top: 50%; -webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%);} 5 | .webgl-content .logo {background: url('progressLogo.Light.png') no-repeat center / contain; width: 154px; height: 130px;} 6 | .webgl-content .progress {height: 18px; width: 141px; margin-top: 90px;} 7 | .webgl-content .progress .empty {background: url('progressEmpty.Light.png') no-repeat right / cover; float: right; width: 100%; height: 100%; display: inline-block;} 8 | .webgl-content .progress .full {background: url('progressFull.Light.png') no-repeat left / cover; float: left; width: 0%; height: 100%; display: inline-block;} 9 | 10 | .webgl-content .logo.Dark {background-image: url('progressLogo.Dark.png');} 11 | .webgl-content .progress.Dark .empty {background-image: url('progressEmpty.Dark.png');} 12 | .webgl-content .progress.Dark .full {background-image: url('progressFull.Dark.png');} 13 | 14 | .webgl-content .footer {margin-top: 5px; height: 38px; line-height: 38px; font-family: Helvetica, Verdana, Arial, sans-serif; font-size: 18px;} 15 | .webgl-content .footer .webgl-logo, .title, .fullscreen {height: 100%; display: inline-block; background: transparent center no-repeat;} 16 | .webgl-content .footer .webgl-logo {background-image: url('webgl-logo.png'); width: 204px; float: left;} 17 | .webgl-content .footer .title {margin-right: 10px; float: right;} 18 | .webgl-content .footer .fullscreen {background-image: url('fullscreen.png'); width: 38px; float: right;} 19 | -------------------------------------------------------------------------------- /ProjectSettings/NavMeshAreas.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!126 &1 4 | NavMeshProjectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | areas: 8 | - name: Walkable 9 | cost: 1 10 | - name: Not Walkable 11 | cost: 1 12 | - name: Jump 13 | cost: 2 14 | - name: 15 | cost: 1 16 | - name: 17 | cost: 1 18 | - name: 19 | cost: 1 20 | - name: 21 | cost: 1 22 | - name: 23 | cost: 1 24 | - name: 25 | cost: 1 26 | - name: 27 | cost: 1 28 | - name: 29 | cost: 1 30 | - name: 31 | cost: 1 32 | - name: 33 | cost: 1 34 | - name: 35 | cost: 1 36 | - name: 37 | cost: 1 38 | - name: 39 | cost: 1 40 | - name: 41 | cost: 1 42 | - name: 43 | cost: 1 44 | - name: 45 | cost: 1 46 | - name: 47 | cost: 1 48 | - name: 49 | cost: 1 50 | - name: 51 | cost: 1 52 | - name: 53 | cost: 1 54 | - name: 55 | cost: 1 56 | - name: 57 | cost: 1 58 | - name: 59 | cost: 1 60 | - name: 61 | cost: 1 62 | - name: 63 | cost: 1 64 | - name: 65 | cost: 1 66 | - name: 67 | cost: 1 68 | - name: 69 | cost: 1 70 | - name: 71 | cost: 1 72 | m_LastAgentTypeID: -887442657 73 | m_Settings: 74 | - serializedVersion: 2 75 | agentTypeID: 0 76 | agentRadius: 0.5 77 | agentHeight: 2 78 | agentSlope: 45 79 | agentClimb: 0.75 80 | ledgeDropHeight: 0 81 | maxJumpAcrossDistance: 0 82 | minRegionArea: 2 83 | manualCellSize: 0 84 | cellSize: 0.16666667 85 | manualTileSize: 0 86 | tileSize: 256 87 | accuratePlacement: 0 88 | debug: 89 | m_Flags: 0 90 | m_SettingNames: 91 | - Humanoid 92 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # WebXR Input Profiles Loader 2 | 3 | WebXR Input Profiles Loader in Unity. Based on [WebXR Input Profiles](https://github.com/immersive-web/webxr-input-profiles). 4 | 5 | You can [try the demo here](https://de-panther.github.io/webxr-input-profiles-loader/). 6 | 7 | The package is intended to be used with WebXR exporters in general, and not only with [WebXR Export](https://github.com/De-Panther/unity-webxr-export). 8 | 9 | The package uses [glTFast](https://docs.unity3d.com/Packages/com.unity.cloud.gltfast@latest) to load the models, and Unity's package of [Newtonsoft Json.NET](https://docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@latest) to parse the profiles. 10 | 11 | ## Downloads 12 | 13 | You can get the package from [![openupm](https://img.shields.io/npm/v/com.de-panther.webxr-input-profiles-loader?label=openupm®istry_uri=https://package.openupm.com)](https://openupm.com/packages/com.de-panther.webxr-input-profiles-loader/). 14 | 15 | ### Setting package using OpenUPM 16 | 17 | Set a `Scoped Registry` in `Project Settings > Package Manager` for OpenUPM. 18 | 19 | ``` 20 | Name: OpenUPM 21 | URL: https://package.openupm.com 22 | Scope(s): com.de-panther 23 | ``` 24 | 25 | Then in `Window > Package Manager` selecting `Packages: My Registries` and the WebXR Input Profiles Loader package would be available for install. 26 | 27 | ## Troubleshooting 28 | 29 | You might need to add Shader Variants of the Input Profiles Models to the build for the shaders to work. More info about that can be found at the glTFast docs. 30 | 31 | You can use `glTFShaderVariantsURP`, `glTFShaderVariantsLegacyURP` or `glTFShaderVariantsBuiltInRP` in `Project Settings > Graphics > Preloaded Shaders` depending on the active render pipeline. 32 | 33 | ## Supported WebXR Exporters 34 | 35 | - [WebXR Export](https://github.com/De-Panther/unity-webxr-export). 36 | -------------------------------------------------------------------------------- /Packages/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.unity.cloud.gltfast": "5.2.0", 4 | "com.unity.collab-proxy": "1.14.1", 5 | "com.unity.ide.rider": "1.2.1", 6 | "com.unity.ide.visualstudio": "2.0.11", 7 | "com.unity.ide.vscode": "1.2.5", 8 | "com.unity.nuget.newtonsoft-json": "2.0.0", 9 | "com.unity.test-framework": "1.1.29", 10 | "com.unity.textmeshpro": "2.1.4", 11 | "com.unity.timeline": "1.2.18", 12 | "com.unity.ugui": "1.0.0", 13 | "com.unity.modules.ai": "1.0.0", 14 | "com.unity.modules.androidjni": "1.0.0", 15 | "com.unity.modules.animation": "1.0.0", 16 | "com.unity.modules.assetbundle": "1.0.0", 17 | "com.unity.modules.audio": "1.0.0", 18 | "com.unity.modules.cloth": "1.0.0", 19 | "com.unity.modules.director": "1.0.0", 20 | "com.unity.modules.imageconversion": "1.0.0", 21 | "com.unity.modules.imgui": "1.0.0", 22 | "com.unity.modules.jsonserialize": "1.0.0", 23 | "com.unity.modules.particlesystem": "1.0.0", 24 | "com.unity.modules.physics": "1.0.0", 25 | "com.unity.modules.physics2d": "1.0.0", 26 | "com.unity.modules.screencapture": "1.0.0", 27 | "com.unity.modules.terrain": "1.0.0", 28 | "com.unity.modules.terrainphysics": "1.0.0", 29 | "com.unity.modules.tilemap": "1.0.0", 30 | "com.unity.modules.ui": "1.0.0", 31 | "com.unity.modules.uielements": "1.0.0", 32 | "com.unity.modules.umbra": "1.0.0", 33 | "com.unity.modules.unityanalytics": "1.0.0", 34 | "com.unity.modules.unitywebrequest": "1.0.0", 35 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0", 36 | "com.unity.modules.unitywebrequestaudio": "1.0.0", 37 | "com.unity.modules.unitywebrequesttexture": "1.0.0", 38 | "com.unity.modules.unitywebrequestwww": "1.0.0", 39 | "com.unity.modules.vehicles": "1.0.0", 40 | "com.unity.modules.video": "1.0.0", 41 | "com.unity.modules.vr": "1.0.0", 42 | "com.unity.modules.wind": "1.0.0", 43 | "com.unity.modules.xr": "1.0.0" 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Runtime/ShaderVariants/glTFShaderVariantsURP.shadervariants: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!200 &20000000 4 | ShaderVariantCollection: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_Name: glTFShaderVariantsURP 10 | m_Shaders: 11 | - first: {fileID: -6465566751694194690, guid: b9d29dfa1474148e792ac720cbd45122, 12 | type: 3} 13 | second: 14 | variants: 15 | - keywords: 16 | passType: 8 17 | - keywords: _EMISSIVE 18 | passType: 8 19 | - keywords: _EMISSIVE _OCCLUSION 20 | passType: 8 21 | - keywords: _OCCLUSION 22 | passType: 8 23 | - keywords: STEREO_INSTANCING_ON _ADDITIONAL_LIGHTS_VERTEX 24 | passType: 13 25 | - keywords: STEREO_INSTANCING_ON _ADDITIONAL_LIGHTS_VERTEX _EMISSIVE 26 | passType: 13 27 | - keywords: STEREO_INSTANCING_ON _ADDITIONAL_LIGHTS_VERTEX _EMISSIVE _OCCLUSION 28 | passType: 13 29 | - keywords: STEREO_INSTANCING_ON _ADDITIONAL_LIGHTS_VERTEX _EMISSIVE _OCCLUSION 30 | _REFLECTION_PROBE_BLENDING _REFLECTION_PROBE_BOX_PROJECTION 31 | passType: 13 32 | - keywords: STEREO_INSTANCING_ON _ADDITIONAL_LIGHTS_VERTEX _EMISSIVE _REFLECTION_PROBE_BLENDING 33 | _REFLECTION_PROBE_BOX_PROJECTION 34 | passType: 13 35 | - keywords: STEREO_INSTANCING_ON _ADDITIONAL_LIGHTS_VERTEX _OCCLUSION 36 | passType: 13 37 | - keywords: STEREO_INSTANCING_ON _ADDITIONAL_LIGHTS_VERTEX _OCCLUSION _REFLECTION_PROBE_BLENDING 38 | _REFLECTION_PROBE_BOX_PROJECTION 39 | passType: 13 40 | - keywords: STEREO_INSTANCING_ON _ADDITIONAL_LIGHTS_VERTEX _REFLECTION_PROBE_BLENDING 41 | _REFLECTION_PROBE_BOX_PROJECTION 42 | passType: 13 43 | - keywords: _ADDITIONAL_LIGHTS_VERTEX _REFLECTION_PROBE_BLENDING _REFLECTION_PROBE_BOX_PROJECTION 44 | passType: 13 45 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Runtime/ShaderVariants/glTFShaderVariantsBuiltInRP.shadervariants: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!200 &20000000 4 | ShaderVariantCollection: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_Name: glTFShaderVariantsBuiltInRP 10 | m_Shaders: 11 | - first: {fileID: 4800000, guid: 99fa998bbbed3408aafa652b466d261d, type: 3} 12 | second: 13 | variants: 14 | - keywords: DIRECTIONAL LIGHTPROBE_SH SHADOWS_SCREEN 15 | passType: 4 16 | - keywords: DIRECTIONAL LIGHTPROBE_SH SHADOWS_SCREEN _NORMALMAP 17 | passType: 4 18 | - keywords: DIRECTIONAL LIGHTPROBE_SH _METALLICGLOSSMAP 19 | passType: 4 20 | - keywords: DIRECTIONAL LIGHTPROBE_SH SHADOWS_SCREEN _METALLICGLOSSMAP 21 | passType: 4 22 | - keywords: DIRECTIONAL LIGHTPROBE_SH SHADOWS_SCREEN _EMISSION _METALLICGLOSSMAP 23 | passType: 4 24 | - keywords: BILLBOARD_FACE_CAMERA_POS DIRECTIONAL LIGHTPROBE_SH SHADOWS_SCREEN 25 | SHADOWS_SOFT SHADOWS_SPLIT_SPHERES SOFTPARTICLES_ON UNITY_HDR_ON _METALLICGLOSSMAP 26 | passType: 4 27 | - keywords: DIRECTIONAL LIGHTPROBE_SH SHADOWS_SCREEN _METALLICGLOSSMAP _NORMALMAP 28 | _OCCLUSION 29 | passType: 4 30 | - keywords: DIRECTIONAL LIGHTPROBE_SH SHADOWS_SCREEN _EMISSION _METALLICGLOSSMAP 31 | _NORMALMAP _OCCLUSION 32 | passType: 4 33 | - keywords: BILLBOARD_FACE_CAMERA_POS DIRECTIONAL LIGHTPROBE_SH SHADOWS_SCREEN 34 | SHADOWS_SOFT SHADOWS_SPLIT_SPHERES SOFTPARTICLES_ON UNITY_HDR_ON _METALLICGLOSSMAP 35 | _NORMALMAP _OCCLUSION 36 | passType: 4 37 | - keywords: DIRECTIONAL _METALLICGLOSSMAP 38 | passType: 5 39 | - keywords: 40 | passType: 8 41 | - keywords: SHADOWS_DEPTH 42 | passType: 8 43 | - keywords: _METALLICGLOSSMAP 44 | passType: 8 45 | - keywords: SHADOWS_DEPTH _METALLICGLOSSMAP 46 | passType: 8 47 | - keywords: SHADOWS_DEPTH _METALLICGLOSSMAP _OCCLUSION 48 | passType: 8 49 | - keywords: _METALLICGLOSSMAP _NORMALMAP _OCCLUSION 50 | passType: 8 51 | -------------------------------------------------------------------------------- /ProjectSettings/Physics2DSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!19 &1 4 | Physics2DSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 4 7 | m_Gravity: {x: 0, y: -9.81} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_VelocityIterations: 8 10 | m_PositionIterations: 3 11 | m_VelocityThreshold: 1 12 | m_MaxLinearCorrection: 0.2 13 | m_MaxAngularCorrection: 8 14 | m_MaxTranslationSpeed: 100 15 | m_MaxRotationSpeed: 360 16 | m_BaumgarteScale: 0.2 17 | m_BaumgarteTimeOfImpactScale: 0.75 18 | m_TimeToSleep: 0.5 19 | m_LinearSleepTolerance: 0.01 20 | m_AngularSleepTolerance: 2 21 | m_DefaultContactOffset: 0.01 22 | m_JobOptions: 23 | serializedVersion: 2 24 | useMultithreading: 0 25 | useConsistencySorting: 0 26 | m_InterpolationPosesPerJob: 100 27 | m_NewContactsPerJob: 30 28 | m_CollideContactsPerJob: 100 29 | m_ClearFlagsPerJob: 200 30 | m_ClearBodyForcesPerJob: 200 31 | m_SyncDiscreteFixturesPerJob: 50 32 | m_SyncContinuousFixturesPerJob: 50 33 | m_FindNearestContactsPerJob: 100 34 | m_UpdateTriggerContactsPerJob: 100 35 | m_IslandSolverCostThreshold: 100 36 | m_IslandSolverBodyCostScale: 1 37 | m_IslandSolverContactCostScale: 10 38 | m_IslandSolverJointCostScale: 10 39 | m_IslandSolverBodiesPerJob: 50 40 | m_IslandSolverContactsPerJob: 50 41 | m_AutoSimulation: 1 42 | m_QueriesHitTriggers: 1 43 | m_QueriesStartInColliders: 1 44 | m_CallbacksOnDisable: 1 45 | m_ReuseCollisionCallbacks: 1 46 | m_AutoSyncTransforms: 0 47 | m_AlwaysShowColliders: 0 48 | m_ShowColliderSleep: 1 49 | m_ShowColliderContacts: 0 50 | m_ShowColliderAABB: 0 51 | m_ContactArrowScale: 0.2 52 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} 53 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} 54 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} 55 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} 56 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 57 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | All notable changes to this project will be documented in this file. 3 | 4 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), 5 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 6 | 7 | ## [Unreleased] 8 | 9 | ## [0.6.2] - 2024-01-17 10 | ### Fixed 11 | - Pose error after latest glTFast updates. 12 | 13 | ## [0.6.1] - 2024-01-17 14 | ### Added 15 | - glTFShaderVariantsURP and glTFShaderVariantsLegacyURP to the ShaderVariants folder. 16 | 17 | ### Changed 18 | - Renamed GLTFShaderVariants to glTFShaderVariantsBuiltInRP. 19 | 20 | ## [0.6.0] - 2024-01-15 21 | ### Changed 22 | - Use glTFast package from Unity registry. 23 | - Updated glTFast package to 5.2.0. 24 | 25 | ## [0.5.0] - 2024-01-11 26 | ### Changed 27 | - Updated glTFast package to 5.1.0. 28 | 29 | ## [0.4.0] - 2021-12-12 30 | ### Changed 31 | - Updated glTFast package to 4.4.8. 32 | - Minimum Unity version 2019.4.33f1. 33 | 34 | ## [0.3.7] - 2021-06-19 35 | ### Changed 36 | - Updated glTFast package to 4.0.1. 37 | 38 | ## [0.3.6] - 2021-05-06 39 | ### Added 40 | - GetChildTransform to InputProfileModel for WebXR Hands API support. 41 | 42 | ### Changed 43 | - Updated glTFast package to 3.2.1. 44 | 45 | ## [0.3.5] - 2021-02-13 46 | ### Fixed 47 | - Warning in DeferAgent file. 48 | 49 | ### Changed 50 | - Updated glTFast package to 3.0.2. 51 | - TimeBudgetDeferAgent to WebGLDeferAgent. 52 | - Sample scene lighting settings. 53 | 54 | ## [0.3.4] - 2021-02-07 55 | ### Fixed 56 | - More issues with loading models. 57 | 58 | ## [0.3.3] - 2021-02-06 59 | ### Fixed 60 | - Issues with loading models. 61 | 62 | ## [0.3.2] - 2021-02-06 63 | ### Changed 64 | - Updated glTFast package to 3.0.1. 65 | 66 | ## [0.3.1] - 2020-12-19 67 | ### Changed 68 | - Increment version due to error. 69 | 70 | ## [0.3.0] - 2020-12-19 71 | ### Changed 72 | - InputProfileLoader - Can set profilesUrl only on LoadProfilesList. 73 | - Moved ShaderVariants folder to package Runtime folder from Samples folder. 74 | - Use custom DeferAgent for loading gLTF models, for better loading performance. 75 | - Make sure to download a profile only once. 76 | - Updated glTFast package to 2.5.0. 77 | 78 | ## [0.2.0] - 2020-12-06 79 | ### Added 80 | - Support profilesList.json file. 81 | 82 | ## [0.1.0] - 2020-11-21 83 | ### Added 84 | - This package. 85 | -------------------------------------------------------------------------------- /ProjectSettings/GraphicsSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!30 &1 4 | GraphicsSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 13 7 | m_Deferred: 8 | m_Mode: 1 9 | m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} 10 | m_DeferredReflections: 11 | m_Mode: 1 12 | m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} 13 | m_ScreenSpaceShadows: 14 | m_Mode: 1 15 | m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} 16 | m_LegacyDeferred: 17 | m_Mode: 1 18 | m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} 19 | m_DepthNormals: 20 | m_Mode: 1 21 | m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} 22 | m_MotionVectors: 23 | m_Mode: 1 24 | m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} 25 | m_LightHalo: 26 | m_Mode: 1 27 | m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} 28 | m_LensFlare: 29 | m_Mode: 1 30 | m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} 31 | m_AlwaysIncludedShaders: 32 | - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} 33 | - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} 34 | - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} 35 | - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} 36 | - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} 37 | - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} 38 | - {fileID: 16000, guid: 0000000000000000f000000000000000, type: 0} 39 | - {fileID: 16001, guid: 0000000000000000f000000000000000, type: 0} 40 | - {fileID: 17000, guid: 0000000000000000f000000000000000, type: 0} 41 | m_PreloadedShaders: 42 | - {fileID: 20000000, guid: 14ec05db04ad028438150751d08d01df, type: 2} 43 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, 44 | type: 0} 45 | m_CustomRenderPipeline: {fileID: 0} 46 | m_TransparencySortMode: 0 47 | m_TransparencySortAxis: {x: 0, y: 0, z: 1} 48 | m_DefaultRenderingPath: 1 49 | m_DefaultMobileRenderingPath: 1 50 | m_TierSettings: [] 51 | m_LightmapStripping: 0 52 | m_FogStripping: 0 53 | m_InstancingStripping: 0 54 | m_LightmapKeepPlain: 1 55 | m_LightmapKeepDirCombined: 1 56 | m_LightmapKeepDynamicPlain: 1 57 | m_LightmapKeepDynamicDirCombined: 1 58 | m_LightmapKeepShadowMask: 1 59 | m_LightmapKeepSubtractive: 1 60 | m_FogKeepLinear: 1 61 | m_FogKeepExp: 1 62 | m_FogKeepExp2: 1 63 | m_AlbedoSwatchInfos: [] 64 | m_LightsUseLinearIntensity: 0 65 | m_LightsUseColorTemperature: 0 66 | m_LogWhenShaderIsCompiled: 0 67 | m_AllowEnlightenSupportForUpgradedProject: 0 68 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Runtime/Scripts/InputProfileStructure.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using UnityEngine; 5 | using Newtonsoft.Json; 6 | 7 | namespace WebXRInputProfile 8 | { 9 | [Serializable] 10 | public class Profile 11 | { 12 | public string profileId = string.Empty; 13 | public string[] fallbackProfileIds = new string[0]; 14 | public Layouts layouts; 15 | } 16 | 17 | [Serializable] 18 | public class Layouts 19 | { 20 | public Layout none; 21 | public Layout left; 22 | public Layout right; 23 | [JsonProperty("left-right")] 24 | public Layout left_right; 25 | [JsonProperty("left-right-none")] 26 | public Layout left_right_none; 27 | } 28 | 29 | [Serializable] 30 | public class Layout 31 | { 32 | public string selectComponentId; 33 | public Dictionary components; 34 | public string rootNodeName; 35 | public string assetPath; 36 | } 37 | 38 | [Serializable] 39 | public class Component 40 | { 41 | public GamepadIndices gamepadIndices; 42 | public string rootNodeName; 43 | public Dictionary visualResponses; 44 | } 45 | 46 | [Serializable] 47 | public class GamepadIndices 48 | { 49 | public int? button; 50 | public int? xAxis; 51 | public int? yAxis; 52 | } 53 | 54 | [Serializable] 55 | public class VisualResponse 56 | { 57 | public ComponentPropertyTypes componentProperty; 58 | public ValueNodePropertyTypes valueNodeProperty; 59 | public string valueNodeName; 60 | public string minNodeName; 61 | public string maxNodeName; 62 | } 63 | 64 | public enum ComponentPropertyTypes 65 | { 66 | button, 67 | xAxis, 68 | yAxis, 69 | state 70 | } 71 | 72 | public enum ValueNodePropertyTypes 73 | { 74 | transform, 75 | visibility 76 | } 77 | 78 | [Serializable] 79 | public class LayoutRouting 80 | { 81 | public string rootNodeName; 82 | public string assetPath; 83 | public VisualResponse[] buttons = new VisualResponse[7]; 84 | public VisualResponse[] axes = new VisualResponse[4]; 85 | } 86 | 87 | [Serializable] 88 | public class LayoutTransforms 89 | { 90 | public LayoutTransform[] buttons = new LayoutTransform[7]; 91 | public LayoutTransform[] axes = new LayoutTransform[4]; 92 | } 93 | 94 | [Serializable] 95 | public class LayoutTransform 96 | { 97 | public Transform valueNode; 98 | public Transform minNode; 99 | public Transform maxNode; 100 | } 101 | 102 | [Serializable] 103 | public class ProfileInfo 104 | { 105 | public string path = string.Empty; 106 | public bool deprecated = false; 107 | } 108 | } -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Samples~/SampleViewer/Scripts/InputProfileViewer.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | using UnityEngine.UI; 5 | 6 | namespace WebXRInputProfile.Viewer 7 | { 8 | public class InputProfileViewer : MonoBehaviour 9 | { 10 | public InputProfileModel inputProfileModel; 11 | public InputProfileLoader inputProfileLoader; 12 | public Dropdown profileNameDropdown; 13 | public Button loadProfile; 14 | public Button loadNone; 15 | public Button loadLeft; 16 | public Button loadRight; 17 | public Slider[] buttonsSliders; 18 | public Slider[] axesSliders; 19 | public Slider[] rotationsSliders; 20 | private string lastDownloadedProfile; 21 | 22 | void Start() 23 | { 24 | profileNameDropdown.ClearOptions(); 25 | var profilesPaths = inputProfileLoader.GetProfilesPaths(); 26 | if (profilesPaths == null || profilesPaths.Count == 0) 27 | { 28 | 29 | inputProfileLoader.LoadProfilesList(HandleProfilesList); 30 | } 31 | else 32 | { 33 | HandleProfilesList(profilesPaths); 34 | } 35 | } 36 | 37 | void HandleProfilesList(Dictionary profilesPaths) 38 | { 39 | if (profilesPaths == null || profilesPaths.Count == 0) 40 | { 41 | return; 42 | } 43 | List profileNames = new List(); 44 | foreach (var keyValPair in profilesPaths) 45 | { 46 | profileNames.Add(keyValPair.Key); 47 | } 48 | profileNameDropdown.AddOptions(profileNames); 49 | loadProfile.interactable = true; 50 | } 51 | 52 | public void LoadProfile() 53 | { 54 | lastDownloadedProfile = profileNameDropdown.options[profileNameDropdown.value].text; 55 | loadNone.interactable = false; 56 | loadLeft.interactable = false; 57 | loadRight.interactable = false; 58 | inputProfileLoader.LoadProfile(new string[]{lastDownloadedProfile}, OnProfileLoaded); 59 | } 60 | 61 | private void OnProfileLoaded(bool success) 62 | { 63 | loadNone.interactable = inputProfileLoader.HasModelForHand(lastDownloadedProfile, InputProfileLoader.Handedness.none); 64 | loadLeft.interactable = inputProfileLoader.HasModelForHand(lastDownloadedProfile, InputProfileLoader.Handedness.left); 65 | loadRight.interactable = inputProfileLoader.HasModelForHand(lastDownloadedProfile, InputProfileLoader.Handedness.right); 66 | } 67 | 68 | public void LoadNone() 69 | { 70 | LoadModel(InputProfileLoader.Handedness.none); 71 | } 72 | 73 | public void LoadLeft() 74 | { 75 | LoadModel(InputProfileLoader.Handedness.left); 76 | } 77 | 78 | public void LoadRight() 79 | { 80 | LoadModel(InputProfileLoader.Handedness.right); 81 | } 82 | 83 | private void LoadModel(InputProfileLoader.Handedness handedness) 84 | { 85 | if (inputProfileModel != null) 86 | { 87 | Destroy(inputProfileModel.gameObject); 88 | } 89 | inputProfileModel = inputProfileLoader.LoadModelForHand(lastDownloadedProfile, handedness); 90 | UpdateModelRotations(); 91 | for (int i = 0; i < buttonsSliders.Length; i++) 92 | { 93 | SetButtonValue(i); 94 | } 95 | for (int i = 0; i < axesSliders.Length; i++) 96 | { 97 | SetAxisValue(i); 98 | } 99 | } 100 | 101 | public void SetButtonValue(int index) 102 | { 103 | if (inputProfileModel) 104 | { 105 | inputProfileModel.SetButtonValue(index, buttonsSliders[index].value); 106 | } 107 | } 108 | 109 | public void SetAxisValue(int index) 110 | { 111 | if (inputProfileModel) 112 | { 113 | inputProfileModel.SetAxisValue(index, axesSliders[index].value); 114 | } 115 | } 116 | 117 | public void UpdateModelRotations() 118 | { 119 | if (inputProfileModel) 120 | { 121 | inputProfileModel.transform.localEulerAngles = new Vector3(rotationsSliders[0].value, 122 | rotationsSliders[1].value, 123 | rotationsSliders[2].value); 124 | } 125 | } 126 | } 127 | } 128 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Runtime/Scripts/InputProfileModel.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using GLTFast; 3 | 4 | namespace WebXRInputProfile 5 | { 6 | public class InputProfileModel : MonoBehaviour 7 | { 8 | private System.Action onLoadCallback; 9 | private float[] buttons = new float[7]; 10 | private float[] axes = new float[4]; 11 | 12 | private LayoutRouting layoutRouting; 13 | 14 | private LayoutTransforms layoutTransforms; 15 | 16 | private GltfAsset gltfAsset; 17 | private WebGLDeferAgent deferAgent; 18 | 19 | private GameObject gltfChild; 20 | private Transform gltfTransform; 21 | 22 | public async void Init(LayoutRouting layoutRouting, string url, System.Action callback = null) 23 | { 24 | this.layoutRouting = layoutRouting; 25 | onLoadCallback = callback; 26 | if (gltfChild == null) 27 | { 28 | #if UNITY_EDITOR 29 | gltfChild = new GameObject("gltfChild"); 30 | #else 31 | gltfChild = new GameObject(); 32 | #endif 33 | gltfAsset = gltfChild.AddComponent(); 34 | deferAgent = gltfChild.AddComponent(); 35 | gltfTransform = gltfChild.transform; 36 | gltfTransform.parent = transform; 37 | gltfTransform.localPosition = Vector3.zero; 38 | gltfTransform.localEulerAngles = new Vector3(0, 180, 0); 39 | } 40 | gltfAsset.LoadOnStartup = false; 41 | gltfAsset.Url = url; 42 | var loadResult = await gltfAsset.Load(gltfAsset.Url, null, deferAgent); 43 | OnGltfLoaded(loadResult); 44 | } 45 | 46 | private void OnGltfLoaded(bool success) 47 | { 48 | if (!success) 49 | { 50 | onLoadCallback?.Invoke(false); 51 | return; 52 | } 53 | if (layoutRouting != null) 54 | { 55 | layoutTransforms = new LayoutTransforms(); 56 | for (int i = 0; i < layoutRouting.buttons.Length; i++) 57 | { 58 | if (layoutRouting.buttons[i] != null) 59 | { 60 | layoutTransforms.buttons[i] = new LayoutTransform(); 61 | layoutTransforms.buttons[i].valueNode = TransformFindRecursive(gltfTransform, layoutRouting.buttons[i].valueNodeName); 62 | layoutTransforms.buttons[i].minNode = TransformFindRecursive(gltfTransform, layoutRouting.buttons[i].minNodeName); 63 | layoutTransforms.buttons[i].maxNode = TransformFindRecursive(gltfTransform, layoutRouting.buttons[i].maxNodeName); 64 | SetButtonValue(i, buttons[i]); 65 | } 66 | } 67 | for (int i = 0; i < layoutRouting.axes.Length; i++) 68 | { 69 | if (layoutRouting.axes[i] != null) 70 | { 71 | layoutTransforms.axes[i] = new LayoutTransform(); 72 | layoutTransforms.axes[i].valueNode = TransformFindRecursive(gltfTransform, layoutRouting.axes[i].valueNodeName); 73 | // In WebXR, yAxis is inverted. Not sure if here's the place to switch 74 | if (layoutRouting.axes[i].componentProperty == ComponentPropertyTypes.yAxis) 75 | { 76 | layoutTransforms.axes[i].minNode = TransformFindRecursive(gltfTransform, layoutRouting.axes[i].maxNodeName); 77 | layoutTransforms.axes[i].maxNode = TransformFindRecursive(gltfTransform, layoutRouting.axes[i].minNodeName); 78 | } 79 | else 80 | { 81 | layoutTransforms.axes[i].minNode = TransformFindRecursive(gltfTransform, layoutRouting.axes[i].minNodeName); 82 | layoutTransforms.axes[i].maxNode = TransformFindRecursive(gltfTransform, layoutRouting.axes[i].maxNodeName); 83 | } 84 | SetAxisValue(i, Mathf.Lerp(-1f, 1f, axes[i])); 85 | } 86 | } 87 | onLoadCallback?.Invoke(true); 88 | } 89 | else 90 | { 91 | onLoadCallback?.Invoke(false); 92 | } 93 | } 94 | 95 | private Transform TransformFindRecursive(Transform parent, string value) 96 | { 97 | Transform result = parent.Find(value); 98 | if (result != null) 99 | { 100 | return result; 101 | } 102 | foreach (Transform child in parent) 103 | { 104 | result = TransformFindRecursive(child, value); 105 | if (result != null) 106 | { 107 | break; 108 | } 109 | } 110 | return result; 111 | } 112 | 113 | public Transform GetChildTransform(string transformName) 114 | { 115 | return TransformFindRecursive(gltfTransform, transformName); 116 | } 117 | 118 | public bool SetButtonValue(int index, float value) 119 | { 120 | if (index < 0 || index >= buttons.Length) 121 | { 122 | Debug.LogError ("Index error"); 123 | return false; 124 | } 125 | buttons[index] = Mathf.Clamp01(value); 126 | if (layoutTransforms == null 127 | || layoutTransforms.buttons[index] == null 128 | || layoutTransforms.buttons[index].valueNode == null 129 | || layoutTransforms.buttons[index].minNode == null 130 | || layoutTransforms.buttons[index].maxNode == null) 131 | { 132 | return false; 133 | } 134 | var position = Vector3.Lerp(layoutTransforms.buttons[index].minNode.localPosition, 135 | layoutTransforms.buttons[index].maxNode.localPosition, 136 | buttons[index]); 137 | layoutTransforms.buttons[index].valueNode.localPosition = position; 138 | var rotation = Quaternion.Lerp(layoutTransforms.buttons[index].minNode.localRotation, 139 | layoutTransforms.buttons[index].maxNode.localRotation, 140 | buttons[index]); 141 | layoutTransforms.buttons[index].valueNode.localRotation = rotation; 142 | return true; 143 | } 144 | 145 | public bool SetAxisValue(int index, float value) 146 | { 147 | if (index < 0 || index >= axes.Length) 148 | { 149 | Debug.LogError ("Index error"); 150 | return false; 151 | } 152 | axes[index] = Mathf.Clamp(value, -1f, 1f); 153 | axes[index] = Mathf.InverseLerp(-1f, 1f, axes[index]); 154 | if (layoutTransforms == null 155 | || layoutTransforms.axes[index] == null 156 | || layoutTransforms.axes[index].valueNode == null 157 | || layoutTransforms.axes[index].minNode == null 158 | || layoutTransforms.axes[index].maxNode == null) 159 | { 160 | return false; 161 | } 162 | var position = Vector3.Lerp(layoutTransforms.axes[index].minNode.localPosition, 163 | layoutTransforms.axes[index].maxNode.localPosition, 164 | axes[index]); 165 | layoutTransforms.axes[index].valueNode.localPosition = position; 166 | var rotation = Quaternion.Lerp(layoutTransforms.axes[index].minNode.localRotation, 167 | layoutTransforms.axes[index].maxNode.localRotation, 168 | axes[index]); 169 | layoutTransforms.axes[index].valueNode.localRotation = rotation; 170 | return true; 171 | } 172 | 173 | } 174 | } 175 | -------------------------------------------------------------------------------- /ProjectSettings/InputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!13 &1 4 | InputManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Axes: 8 | - serializedVersion: 3 9 | m_Name: Horizontal 10 | descriptiveName: 11 | descriptiveNegativeName: 12 | negativeButton: left 13 | positiveButton: right 14 | altNegativeButton: a 15 | altPositiveButton: d 16 | gravity: 3 17 | dead: 0.001 18 | sensitivity: 3 19 | snap: 1 20 | invert: 0 21 | type: 0 22 | axis: 0 23 | joyNum: 0 24 | - serializedVersion: 3 25 | m_Name: Vertical 26 | descriptiveName: 27 | descriptiveNegativeName: 28 | negativeButton: down 29 | positiveButton: up 30 | altNegativeButton: s 31 | altPositiveButton: w 32 | gravity: 3 33 | dead: 0.001 34 | sensitivity: 3 35 | snap: 1 36 | invert: 0 37 | type: 0 38 | axis: 0 39 | joyNum: 0 40 | - serializedVersion: 3 41 | m_Name: Fire1 42 | descriptiveName: 43 | descriptiveNegativeName: 44 | negativeButton: 45 | positiveButton: left ctrl 46 | altNegativeButton: 47 | altPositiveButton: mouse 0 48 | gravity: 1000 49 | dead: 0.001 50 | sensitivity: 1000 51 | snap: 0 52 | invert: 0 53 | type: 0 54 | axis: 0 55 | joyNum: 0 56 | - serializedVersion: 3 57 | m_Name: Fire2 58 | descriptiveName: 59 | descriptiveNegativeName: 60 | negativeButton: 61 | positiveButton: left alt 62 | altNegativeButton: 63 | altPositiveButton: mouse 1 64 | gravity: 1000 65 | dead: 0.001 66 | sensitivity: 1000 67 | snap: 0 68 | invert: 0 69 | type: 0 70 | axis: 0 71 | joyNum: 0 72 | - serializedVersion: 3 73 | m_Name: Fire3 74 | descriptiveName: 75 | descriptiveNegativeName: 76 | negativeButton: 77 | positiveButton: left shift 78 | altNegativeButton: 79 | altPositiveButton: mouse 2 80 | gravity: 1000 81 | dead: 0.001 82 | sensitivity: 1000 83 | snap: 0 84 | invert: 0 85 | type: 0 86 | axis: 0 87 | joyNum: 0 88 | - serializedVersion: 3 89 | m_Name: Jump 90 | descriptiveName: 91 | descriptiveNegativeName: 92 | negativeButton: 93 | positiveButton: space 94 | altNegativeButton: 95 | altPositiveButton: 96 | gravity: 1000 97 | dead: 0.001 98 | sensitivity: 1000 99 | snap: 0 100 | invert: 0 101 | type: 0 102 | axis: 0 103 | joyNum: 0 104 | - serializedVersion: 3 105 | m_Name: Mouse X 106 | descriptiveName: 107 | descriptiveNegativeName: 108 | negativeButton: 109 | positiveButton: 110 | altNegativeButton: 111 | altPositiveButton: 112 | gravity: 0 113 | dead: 0 114 | sensitivity: 0.1 115 | snap: 0 116 | invert: 0 117 | type: 1 118 | axis: 0 119 | joyNum: 0 120 | - serializedVersion: 3 121 | m_Name: Mouse Y 122 | descriptiveName: 123 | descriptiveNegativeName: 124 | negativeButton: 125 | positiveButton: 126 | altNegativeButton: 127 | altPositiveButton: 128 | gravity: 0 129 | dead: 0 130 | sensitivity: 0.1 131 | snap: 0 132 | invert: 0 133 | type: 1 134 | axis: 1 135 | joyNum: 0 136 | - serializedVersion: 3 137 | m_Name: Mouse ScrollWheel 138 | descriptiveName: 139 | descriptiveNegativeName: 140 | negativeButton: 141 | positiveButton: 142 | altNegativeButton: 143 | altPositiveButton: 144 | gravity: 0 145 | dead: 0 146 | sensitivity: 0.1 147 | snap: 0 148 | invert: 0 149 | type: 1 150 | axis: 2 151 | joyNum: 0 152 | - serializedVersion: 3 153 | m_Name: Horizontal 154 | descriptiveName: 155 | descriptiveNegativeName: 156 | negativeButton: 157 | positiveButton: 158 | altNegativeButton: 159 | altPositiveButton: 160 | gravity: 0 161 | dead: 0.19 162 | sensitivity: 1 163 | snap: 0 164 | invert: 0 165 | type: 2 166 | axis: 0 167 | joyNum: 0 168 | - serializedVersion: 3 169 | m_Name: Vertical 170 | descriptiveName: 171 | descriptiveNegativeName: 172 | negativeButton: 173 | positiveButton: 174 | altNegativeButton: 175 | altPositiveButton: 176 | gravity: 0 177 | dead: 0.19 178 | sensitivity: 1 179 | snap: 0 180 | invert: 1 181 | type: 2 182 | axis: 1 183 | joyNum: 0 184 | - serializedVersion: 3 185 | m_Name: Fire1 186 | descriptiveName: 187 | descriptiveNegativeName: 188 | negativeButton: 189 | positiveButton: joystick button 0 190 | altNegativeButton: 191 | altPositiveButton: 192 | gravity: 1000 193 | dead: 0.001 194 | sensitivity: 1000 195 | snap: 0 196 | invert: 0 197 | type: 0 198 | axis: 0 199 | joyNum: 0 200 | - serializedVersion: 3 201 | m_Name: Fire2 202 | descriptiveName: 203 | descriptiveNegativeName: 204 | negativeButton: 205 | positiveButton: joystick button 1 206 | altNegativeButton: 207 | altPositiveButton: 208 | gravity: 1000 209 | dead: 0.001 210 | sensitivity: 1000 211 | snap: 0 212 | invert: 0 213 | type: 0 214 | axis: 0 215 | joyNum: 0 216 | - serializedVersion: 3 217 | m_Name: Fire3 218 | descriptiveName: 219 | descriptiveNegativeName: 220 | negativeButton: 221 | positiveButton: joystick button 2 222 | altNegativeButton: 223 | altPositiveButton: 224 | gravity: 1000 225 | dead: 0.001 226 | sensitivity: 1000 227 | snap: 0 228 | invert: 0 229 | type: 0 230 | axis: 0 231 | joyNum: 0 232 | - serializedVersion: 3 233 | m_Name: Jump 234 | descriptiveName: 235 | descriptiveNegativeName: 236 | negativeButton: 237 | positiveButton: joystick button 3 238 | altNegativeButton: 239 | altPositiveButton: 240 | gravity: 1000 241 | dead: 0.001 242 | sensitivity: 1000 243 | snap: 0 244 | invert: 0 245 | type: 0 246 | axis: 0 247 | joyNum: 0 248 | - serializedVersion: 3 249 | m_Name: Submit 250 | descriptiveName: 251 | descriptiveNegativeName: 252 | negativeButton: 253 | positiveButton: return 254 | altNegativeButton: 255 | altPositiveButton: joystick button 0 256 | gravity: 1000 257 | dead: 0.001 258 | sensitivity: 1000 259 | snap: 0 260 | invert: 0 261 | type: 0 262 | axis: 0 263 | joyNum: 0 264 | - serializedVersion: 3 265 | m_Name: Submit 266 | descriptiveName: 267 | descriptiveNegativeName: 268 | negativeButton: 269 | positiveButton: enter 270 | altNegativeButton: 271 | altPositiveButton: space 272 | gravity: 1000 273 | dead: 0.001 274 | sensitivity: 1000 275 | snap: 0 276 | invert: 0 277 | type: 0 278 | axis: 0 279 | joyNum: 0 280 | - serializedVersion: 3 281 | m_Name: Cancel 282 | descriptiveName: 283 | descriptiveNegativeName: 284 | negativeButton: 285 | positiveButton: escape 286 | altNegativeButton: 287 | altPositiveButton: joystick button 1 288 | gravity: 1000 289 | dead: 0.001 290 | sensitivity: 1000 291 | snap: 0 292 | invert: 0 293 | type: 0 294 | axis: 0 295 | joyNum: 0 296 | -------------------------------------------------------------------------------- /ProjectSettings/QualitySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!47 &1 4 | QualitySettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 5 7 | m_CurrentQuality: 5 8 | m_QualitySettings: 9 | - serializedVersion: 2 10 | name: Very Low 11 | pixelLightCount: 0 12 | shadows: 0 13 | shadowResolution: 0 14 | shadowProjection: 1 15 | shadowCascades: 1 16 | shadowDistance: 15 17 | shadowNearPlaneOffset: 3 18 | shadowCascade2Split: 0.33333334 19 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 20 | shadowmaskMode: 0 21 | blendWeights: 1 22 | textureQuality: 1 23 | anisotropicTextures: 0 24 | antiAliasing: 0 25 | softParticles: 0 26 | softVegetation: 0 27 | realtimeReflectionProbes: 0 28 | billboardsFaceCameraPosition: 0 29 | vSyncCount: 0 30 | lodBias: 0.3 31 | maximumLODLevel: 0 32 | streamingMipmapsActive: 0 33 | streamingMipmapsAddAllCameras: 1 34 | streamingMipmapsMemoryBudget: 512 35 | streamingMipmapsRenderersPerFrame: 512 36 | streamingMipmapsMaxLevelReduction: 2 37 | streamingMipmapsMaxFileIORequests: 1024 38 | particleRaycastBudget: 4 39 | asyncUploadTimeSlice: 2 40 | asyncUploadBufferSize: 16 41 | asyncUploadPersistentBuffer: 1 42 | resolutionScalingFixedDPIFactor: 1 43 | excludedTargetPlatforms: [] 44 | - serializedVersion: 2 45 | name: Low 46 | pixelLightCount: 0 47 | shadows: 0 48 | shadowResolution: 0 49 | shadowProjection: 1 50 | shadowCascades: 1 51 | shadowDistance: 20 52 | shadowNearPlaneOffset: 3 53 | shadowCascade2Split: 0.33333334 54 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 55 | shadowmaskMode: 0 56 | blendWeights: 2 57 | textureQuality: 0 58 | anisotropicTextures: 0 59 | antiAliasing: 0 60 | softParticles: 0 61 | softVegetation: 0 62 | realtimeReflectionProbes: 0 63 | billboardsFaceCameraPosition: 0 64 | vSyncCount: 0 65 | lodBias: 0.4 66 | maximumLODLevel: 0 67 | streamingMipmapsActive: 0 68 | streamingMipmapsAddAllCameras: 1 69 | streamingMipmapsMemoryBudget: 512 70 | streamingMipmapsRenderersPerFrame: 512 71 | streamingMipmapsMaxLevelReduction: 2 72 | streamingMipmapsMaxFileIORequests: 1024 73 | particleRaycastBudget: 16 74 | asyncUploadTimeSlice: 2 75 | asyncUploadBufferSize: 16 76 | asyncUploadPersistentBuffer: 1 77 | resolutionScalingFixedDPIFactor: 1 78 | excludedTargetPlatforms: [] 79 | - serializedVersion: 2 80 | name: Medium 81 | pixelLightCount: 1 82 | shadows: 1 83 | shadowResolution: 0 84 | shadowProjection: 1 85 | shadowCascades: 1 86 | shadowDistance: 20 87 | shadowNearPlaneOffset: 3 88 | shadowCascade2Split: 0.33333334 89 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 90 | shadowmaskMode: 0 91 | blendWeights: 2 92 | textureQuality: 0 93 | anisotropicTextures: 1 94 | antiAliasing: 0 95 | softParticles: 0 96 | softVegetation: 0 97 | realtimeReflectionProbes: 0 98 | billboardsFaceCameraPosition: 0 99 | vSyncCount: 1 100 | lodBias: 0.7 101 | maximumLODLevel: 0 102 | streamingMipmapsActive: 0 103 | streamingMipmapsAddAllCameras: 1 104 | streamingMipmapsMemoryBudget: 512 105 | streamingMipmapsRenderersPerFrame: 512 106 | streamingMipmapsMaxLevelReduction: 2 107 | streamingMipmapsMaxFileIORequests: 1024 108 | particleRaycastBudget: 64 109 | asyncUploadTimeSlice: 2 110 | asyncUploadBufferSize: 16 111 | asyncUploadPersistentBuffer: 1 112 | resolutionScalingFixedDPIFactor: 1 113 | excludedTargetPlatforms: [] 114 | - serializedVersion: 2 115 | name: High 116 | pixelLightCount: 2 117 | shadows: 2 118 | shadowResolution: 1 119 | shadowProjection: 1 120 | shadowCascades: 2 121 | shadowDistance: 40 122 | shadowNearPlaneOffset: 3 123 | shadowCascade2Split: 0.33333334 124 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 125 | shadowmaskMode: 1 126 | blendWeights: 2 127 | textureQuality: 0 128 | anisotropicTextures: 1 129 | antiAliasing: 0 130 | softParticles: 0 131 | softVegetation: 1 132 | realtimeReflectionProbes: 1 133 | billboardsFaceCameraPosition: 1 134 | vSyncCount: 1 135 | lodBias: 1 136 | maximumLODLevel: 0 137 | streamingMipmapsActive: 0 138 | streamingMipmapsAddAllCameras: 1 139 | streamingMipmapsMemoryBudget: 512 140 | streamingMipmapsRenderersPerFrame: 512 141 | streamingMipmapsMaxLevelReduction: 2 142 | streamingMipmapsMaxFileIORequests: 1024 143 | particleRaycastBudget: 256 144 | asyncUploadTimeSlice: 2 145 | asyncUploadBufferSize: 16 146 | asyncUploadPersistentBuffer: 1 147 | resolutionScalingFixedDPIFactor: 1 148 | excludedTargetPlatforms: [] 149 | - serializedVersion: 2 150 | name: Very High 151 | pixelLightCount: 3 152 | shadows: 2 153 | shadowResolution: 2 154 | shadowProjection: 1 155 | shadowCascades: 2 156 | shadowDistance: 70 157 | shadowNearPlaneOffset: 3 158 | shadowCascade2Split: 0.33333334 159 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 160 | shadowmaskMode: 1 161 | blendWeights: 4 162 | textureQuality: 0 163 | anisotropicTextures: 2 164 | antiAliasing: 2 165 | softParticles: 1 166 | softVegetation: 1 167 | realtimeReflectionProbes: 1 168 | billboardsFaceCameraPosition: 1 169 | vSyncCount: 1 170 | lodBias: 1.5 171 | maximumLODLevel: 0 172 | streamingMipmapsActive: 0 173 | streamingMipmapsAddAllCameras: 1 174 | streamingMipmapsMemoryBudget: 512 175 | streamingMipmapsRenderersPerFrame: 512 176 | streamingMipmapsMaxLevelReduction: 2 177 | streamingMipmapsMaxFileIORequests: 1024 178 | particleRaycastBudget: 1024 179 | asyncUploadTimeSlice: 2 180 | asyncUploadBufferSize: 16 181 | asyncUploadPersistentBuffer: 1 182 | resolutionScalingFixedDPIFactor: 1 183 | excludedTargetPlatforms: [] 184 | - serializedVersion: 2 185 | name: Ultra 186 | pixelLightCount: 4 187 | shadows: 2 188 | shadowResolution: 2 189 | shadowProjection: 1 190 | shadowCascades: 4 191 | shadowDistance: 150 192 | shadowNearPlaneOffset: 3 193 | shadowCascade2Split: 0.33333334 194 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 195 | shadowmaskMode: 1 196 | blendWeights: 4 197 | textureQuality: 0 198 | anisotropicTextures: 2 199 | antiAliasing: 2 200 | softParticles: 1 201 | softVegetation: 1 202 | realtimeReflectionProbes: 1 203 | billboardsFaceCameraPosition: 1 204 | vSyncCount: 1 205 | lodBias: 2 206 | maximumLODLevel: 0 207 | streamingMipmapsActive: 0 208 | streamingMipmapsAddAllCameras: 1 209 | streamingMipmapsMemoryBudget: 512 210 | streamingMipmapsRenderersPerFrame: 512 211 | streamingMipmapsMaxLevelReduction: 2 212 | streamingMipmapsMaxFileIORequests: 1024 213 | particleRaycastBudget: 4096 214 | asyncUploadTimeSlice: 2 215 | asyncUploadBufferSize: 16 216 | asyncUploadPersistentBuffer: 1 217 | resolutionScalingFixedDPIFactor: 1 218 | excludedTargetPlatforms: [] 219 | m_PerPlatformDefaultQuality: 220 | Android: 2 221 | Lumin: 5 222 | Nintendo 3DS: 5 223 | Nintendo Switch: 5 224 | PS4: 5 225 | PSP2: 2 226 | Stadia: 5 227 | Standalone: 5 228 | WebGL: 3 229 | Windows Store Apps: 5 230 | XboxOne: 5 231 | iPhone: 2 232 | tvOS: 2 233 | -------------------------------------------------------------------------------- /Packages/webxr-input-profiles-loader/Runtime/Scripts/InputProfileLoader.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | using UnityEngine.Networking; 5 | using Newtonsoft.Json; 6 | 7 | namespace WebXRInputProfile 8 | { 9 | public class InputProfileLoader : MonoBehaviour 10 | { 11 | private const string DEFAULT_PROFILES_URL = "https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets/dist/profiles/"; 12 | 13 | public enum Handedness 14 | { 15 | none = 0, 16 | left = 1, 17 | right = 2 18 | } 19 | 20 | // For cases where asked to download controllers separately 21 | private Dictionary downloadedProfiles = new Dictionary(); 22 | private Dictionary cachedLayoutRoutings = new Dictionary(); 23 | private Dictionary profilesPaths = null; 24 | 25 | public Dictionary GetProfilesPaths() 26 | { 27 | return profilesPaths; 28 | } 29 | 30 | private string profilesUrl = DEFAULT_PROFILES_URL; 31 | 32 | UnityWebRequest profilesListWebRequest = null; 33 | UnityWebRequest profileWebRequest = null; 34 | 35 | public void LoadProfilesList(System.Action> callback = null, string profilesUrl = null) 36 | { 37 | if (profilesPaths == null || profilesPaths.Count == 0 || (profilesUrl != null && profilesUrl != this.profilesUrl)) 38 | { 39 | this.profilesUrl = !string.IsNullOrEmpty(profilesUrl) ? profilesUrl : DEFAULT_PROFILES_URL; 40 | StartCoroutine(DownloadProfilesList(callback)); 41 | } 42 | else 43 | { 44 | callback(profilesPaths); 45 | } 46 | } 47 | 48 | IEnumerator DownloadProfilesList(System.Action> callback = null) 49 | { 50 | if (profilesListWebRequest == null) 51 | { 52 | profilesListWebRequest = UnityWebRequest.Get(profilesUrl + "profilesList.json"); 53 | yield return profilesListWebRequest.SendWebRequest(); 54 | } 55 | while (profilesListWebRequest != null && !profilesListWebRequest.isDone) 56 | { 57 | yield return null; 58 | } 59 | 60 | if (profilesListWebRequest != null) 61 | { 62 | if (!profilesListWebRequest.isNetworkError && !profilesListWebRequest.isHttpError) 63 | { 64 | var profilesList = JsonConvert.DeserializeObject>(profilesListWebRequest.downloadHandler.text); 65 | if (profilesList != null) 66 | { 67 | profilesPaths = new Dictionary(); 68 | foreach (var keyValPair in profilesList) 69 | { 70 | profilesPaths.Add(keyValPair.Key, keyValPair.Value.path); 71 | } 72 | } 73 | } 74 | profilesListWebRequest.Dispose(); 75 | profilesListWebRequest = null; 76 | } 77 | 78 | if (callback != null) 79 | { 80 | callback(profilesPaths); 81 | } 82 | } 83 | 84 | public void LoadProfile(string[] profileNames, System.Action callback = null) 85 | { 86 | if (profileNames == null || profileNames.Length == 0) 87 | { 88 | Debug.LogError("No profile name"); 89 | callback?.Invoke(false); 90 | return; 91 | } 92 | if (DownloadedProfileExist(profileNames)) 93 | { 94 | callback?.Invoke(true); 95 | return; 96 | } 97 | StartCoroutine(DownloadProfile(profileNames, callback)); 98 | } 99 | 100 | IEnumerator DownloadProfile(string[] profileNames, System.Action callback) 101 | { 102 | if (profilesPaths == null) 103 | { 104 | yield return DownloadProfilesList(); 105 | } 106 | string profilePath = string.Empty; 107 | string profileName = string.Empty; 108 | int profilesIndex = -1; 109 | if (profilesPaths != null) 110 | { 111 | for (int i = 0; i < profileNames.Length; i++) 112 | { 113 | if (profilesPaths.ContainsKey(profileNames[i])) 114 | { 115 | profileName = profileNames[i]; 116 | profilePath = profilesPaths[profileName]; 117 | profilesIndex = i; 118 | break; 119 | } 120 | } 121 | } 122 | if (profilesIndex == -1) 123 | { 124 | callback(false); 125 | yield break; 126 | } 127 | // if no path for profiles, group them together with the first profile that has path 128 | string[] similarProfiles = new string[profilesIndex + 1]; 129 | for (int i = 0; i < similarProfiles.Length; i++) 130 | { 131 | similarProfiles[i] = profileNames[i]; 132 | } 133 | 134 | if (profileWebRequest == null) 135 | { 136 | profileWebRequest = UnityWebRequest.Get(profilesUrl + profilePath); 137 | yield return profileWebRequest.SendWebRequest(); 138 | } 139 | 140 | while (profileWebRequest != null && !profileWebRequest.isDone) 141 | { 142 | yield return null; 143 | } 144 | 145 | if (profileWebRequest != null) 146 | { 147 | if (!profileWebRequest.isNetworkError && !profileWebRequest.isHttpError) 148 | { 149 | HandleProfileText(similarProfiles, profileWebRequest.downloadHandler.text, callback); 150 | } 151 | else if (callback != null) 152 | { 153 | callback(false); 154 | } 155 | profileWebRequest.Dispose(); 156 | profileWebRequest = null; 157 | } 158 | else 159 | { 160 | callback?.Invoke(DownloadedProfileExist(similarProfiles)); 161 | } 162 | } 163 | 164 | private void HandleProfileText(string[] profileNames, string profileText, System.Action callback) 165 | { 166 | if (DownloadedProfileExist(profileNames)) 167 | { 168 | callback?.Invoke(true); 169 | return; 170 | } 171 | var profile = JsonConvert.DeserializeObject(profileText); 172 | var layoutRoutings = CreateLayoutRoutings(profile); 173 | for (int i = 0; i < profileNames.Length; i++) 174 | { 175 | downloadedProfiles.Add(profileNames[i], profile); 176 | cachedLayoutRoutings.Add(profileNames[i], layoutRoutings); 177 | } 178 | callback?.Invoke(true); 179 | } 180 | 181 | private bool DownloadedProfileExist(string[] profileNames) 182 | { 183 | for (int i = 0; i < profileNames.Length; i++) 184 | { 185 | if (downloadedProfiles.ContainsKey(profileNames[i])) 186 | { 187 | for (int j = 0; j < i; j++) 188 | { 189 | downloadedProfiles.Add(profileNames[j], downloadedProfiles[profileNames[i]]); 190 | cachedLayoutRoutings.Add(profileNames[j], cachedLayoutRoutings[profileNames[i]]); 191 | } 192 | return true; 193 | } 194 | } 195 | return false; 196 | } 197 | 198 | private LayoutRouting[] CreateLayoutRoutings(Profile profile) 199 | { 200 | var layoutRoutings = new LayoutRouting[3]; 201 | if (profile.layouts.left_right_none != null) 202 | { 203 | var layoutRouting = GetLayoutRouting(profile.layouts.left_right_none); ; 204 | layoutRoutings[(int)Handedness.none] = layoutRouting; 205 | layoutRoutings[(int)Handedness.left] = layoutRouting; 206 | layoutRoutings[(int)Handedness.right] = layoutRouting; 207 | 208 | } 209 | else if (profile.layouts.left_right != null) 210 | { 211 | var layoutRouting = GetLayoutRouting(profile.layouts.left_right); ; 212 | layoutRoutings[(int)Handedness.left] = layoutRouting; 213 | layoutRoutings[(int)Handedness.right] = layoutRouting; 214 | } 215 | else 216 | { 217 | if (profile.layouts.left != null) 218 | { 219 | layoutRoutings[(int)Handedness.left] = GetLayoutRouting(profile.layouts.left); 220 | } 221 | if (profile.layouts.right != null) 222 | { 223 | layoutRoutings[(int)Handedness.right] = GetLayoutRouting(profile.layouts.right); 224 | } 225 | } 226 | 227 | if (profile.layouts.none != null) 228 | { 229 | layoutRoutings[(int)Handedness.none] = GetLayoutRouting(profile.layouts.none); 230 | } 231 | 232 | return layoutRoutings; 233 | } 234 | 235 | private LayoutRouting GetLayoutRouting(Layout layout) 236 | { 237 | var layoutRouting = new LayoutRouting(); 238 | layoutRouting.rootNodeName = layout.rootNodeName; 239 | layoutRouting.assetPath = layout.assetPath; 240 | foreach (var component in layout.components) 241 | { 242 | foreach (var visualResponse in component.Value.visualResponses) 243 | { 244 | switch (visualResponse.Value.componentProperty) 245 | { 246 | case ComponentPropertyTypes.button: 247 | layoutRouting.buttons[component.Value.gamepadIndices.button.Value] = visualResponse.Value; 248 | break; 249 | case ComponentPropertyTypes.xAxis: 250 | layoutRouting.axes[component.Value.gamepadIndices.xAxis.Value] = visualResponse.Value; 251 | break; 252 | case ComponentPropertyTypes.yAxis: 253 | layoutRouting.axes[component.Value.gamepadIndices.yAxis.Value] = visualResponse.Value; 254 | break; 255 | } 256 | } 257 | } 258 | return layoutRouting; 259 | } 260 | 261 | public InputProfileModel LoadModelForHand(string profileName, Handedness handedness, System.Action callback = null) 262 | { 263 | if (!downloadedProfiles.ContainsKey(profileName)) 264 | { 265 | Debug.LogError("No profile"); 266 | return null; 267 | } 268 | var layoutRoutings = cachedLayoutRoutings[profileName]; 269 | if (layoutRoutings[(int)handedness] == null) 270 | { 271 | Debug.LogError("No model for hand"); 272 | return null; 273 | } 274 | #if UNITY_EDITOR 275 | var modelObject = new GameObject(layoutRoutings[(int)handedness].rootNodeName); 276 | #else 277 | var modelObject = new GameObject(); 278 | #endif 279 | var inputProfileModel = modelObject.AddComponent(); 280 | string assetPath = profilesUrl + downloadedProfiles[profileName].profileId + "/" + layoutRoutings[(int)handedness].assetPath; 281 | inputProfileModel.Init(layoutRoutings[(int)handedness], assetPath, callback); 282 | return inputProfileModel; 283 | } 284 | 285 | public bool HasModelForHand(string profileName, Handedness handedness) 286 | { 287 | if (cachedLayoutRoutings.ContainsKey(profileName)) 288 | { 289 | return cachedLayoutRoutings[profileName][(int)handedness] != null; 290 | } 291 | return false; 292 | } 293 | } 294 | } 295 | -------------------------------------------------------------------------------- /Packages/packages-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.de-panther.webxr-input-profiles-loader": { 4 | "version": "file:webxr-input-profiles-loader", 5 | "depth": 0, 6 | "source": "embedded", 7 | "dependencies": { 8 | "com.unity.nuget.newtonsoft-json": "2.0.0", 9 | "com.unity.cloud.gltfast": "5.2.0" 10 | } 11 | }, 12 | "com.unity.burst": { 13 | "version": "1.6.6", 14 | "depth": 1, 15 | "source": "registry", 16 | "dependencies": { 17 | "com.unity.mathematics": "1.2.1" 18 | }, 19 | "url": "https://packages.unity.com" 20 | }, 21 | "com.unity.cloud.gltfast": { 22 | "version": "5.2.0", 23 | "depth": 0, 24 | "source": "registry", 25 | "dependencies": { 26 | "com.unity.modules.jsonserialize": "1.0.0", 27 | "com.unity.modules.unitywebrequest": "1.0.0", 28 | "com.unity.mathematics": "1.2.6", 29 | "com.unity.burst": "1.6.6" 30 | }, 31 | "url": "https://packages.unity.com" 32 | }, 33 | "com.unity.collab-proxy": { 34 | "version": "1.14.1", 35 | "depth": 0, 36 | "source": "registry", 37 | "dependencies": {}, 38 | "url": "https://packages.unity.com" 39 | }, 40 | "com.unity.ext.nunit": { 41 | "version": "1.0.6", 42 | "depth": 1, 43 | "source": "registry", 44 | "dependencies": {}, 45 | "url": "https://packages.unity.com" 46 | }, 47 | "com.unity.ide.rider": { 48 | "version": "1.2.1", 49 | "depth": 0, 50 | "source": "registry", 51 | "dependencies": { 52 | "com.unity.test-framework": "1.1.1" 53 | }, 54 | "url": "https://packages.unity.com" 55 | }, 56 | "com.unity.ide.visualstudio": { 57 | "version": "2.0.11", 58 | "depth": 0, 59 | "source": "registry", 60 | "dependencies": { 61 | "com.unity.test-framework": "1.1.9" 62 | }, 63 | "url": "https://packages.unity.com" 64 | }, 65 | "com.unity.ide.vscode": { 66 | "version": "1.2.5", 67 | "depth": 0, 68 | "source": "registry", 69 | "dependencies": {}, 70 | "url": "https://packages.unity.com" 71 | }, 72 | "com.unity.mathematics": { 73 | "version": "1.2.6", 74 | "depth": 1, 75 | "source": "registry", 76 | "dependencies": {}, 77 | "url": "https://packages.unity.com" 78 | }, 79 | "com.unity.nuget.newtonsoft-json": { 80 | "version": "2.0.0", 81 | "depth": 0, 82 | "source": "registry", 83 | "dependencies": {}, 84 | "url": "https://packages.unity.com" 85 | }, 86 | "com.unity.test-framework": { 87 | "version": "1.1.29", 88 | "depth": 0, 89 | "source": "registry", 90 | "dependencies": { 91 | "com.unity.ext.nunit": "1.0.6", 92 | "com.unity.modules.imgui": "1.0.0", 93 | "com.unity.modules.jsonserialize": "1.0.0" 94 | }, 95 | "url": "https://packages.unity.com" 96 | }, 97 | "com.unity.textmeshpro": { 98 | "version": "2.1.4", 99 | "depth": 0, 100 | "source": "registry", 101 | "dependencies": { 102 | "com.unity.ugui": "1.0.0" 103 | }, 104 | "url": "https://packages.unity.com" 105 | }, 106 | "com.unity.timeline": { 107 | "version": "1.2.18", 108 | "depth": 0, 109 | "source": "registry", 110 | "dependencies": { 111 | "com.unity.modules.director": "1.0.0", 112 | "com.unity.modules.animation": "1.0.0", 113 | "com.unity.modules.audio": "1.0.0", 114 | "com.unity.modules.particlesystem": "1.0.0" 115 | }, 116 | "url": "https://packages.unity.com" 117 | }, 118 | "com.unity.ugui": { 119 | "version": "1.0.0", 120 | "depth": 0, 121 | "source": "builtin", 122 | "dependencies": { 123 | "com.unity.modules.ui": "1.0.0", 124 | "com.unity.modules.imgui": "1.0.0" 125 | } 126 | }, 127 | "com.unity.modules.ai": { 128 | "version": "1.0.0", 129 | "depth": 0, 130 | "source": "builtin", 131 | "dependencies": {} 132 | }, 133 | "com.unity.modules.androidjni": { 134 | "version": "1.0.0", 135 | "depth": 0, 136 | "source": "builtin", 137 | "dependencies": {} 138 | }, 139 | "com.unity.modules.animation": { 140 | "version": "1.0.0", 141 | "depth": 0, 142 | "source": "builtin", 143 | "dependencies": {} 144 | }, 145 | "com.unity.modules.assetbundle": { 146 | "version": "1.0.0", 147 | "depth": 0, 148 | "source": "builtin", 149 | "dependencies": {} 150 | }, 151 | "com.unity.modules.audio": { 152 | "version": "1.0.0", 153 | "depth": 0, 154 | "source": "builtin", 155 | "dependencies": {} 156 | }, 157 | "com.unity.modules.cloth": { 158 | "version": "1.0.0", 159 | "depth": 0, 160 | "source": "builtin", 161 | "dependencies": { 162 | "com.unity.modules.physics": "1.0.0" 163 | } 164 | }, 165 | "com.unity.modules.director": { 166 | "version": "1.0.0", 167 | "depth": 0, 168 | "source": "builtin", 169 | "dependencies": { 170 | "com.unity.modules.audio": "1.0.0", 171 | "com.unity.modules.animation": "1.0.0" 172 | } 173 | }, 174 | "com.unity.modules.imageconversion": { 175 | "version": "1.0.0", 176 | "depth": 0, 177 | "source": "builtin", 178 | "dependencies": {} 179 | }, 180 | "com.unity.modules.imgui": { 181 | "version": "1.0.0", 182 | "depth": 0, 183 | "source": "builtin", 184 | "dependencies": {} 185 | }, 186 | "com.unity.modules.jsonserialize": { 187 | "version": "1.0.0", 188 | "depth": 0, 189 | "source": "builtin", 190 | "dependencies": {} 191 | }, 192 | "com.unity.modules.particlesystem": { 193 | "version": "1.0.0", 194 | "depth": 0, 195 | "source": "builtin", 196 | "dependencies": {} 197 | }, 198 | "com.unity.modules.physics": { 199 | "version": "1.0.0", 200 | "depth": 0, 201 | "source": "builtin", 202 | "dependencies": {} 203 | }, 204 | "com.unity.modules.physics2d": { 205 | "version": "1.0.0", 206 | "depth": 0, 207 | "source": "builtin", 208 | "dependencies": {} 209 | }, 210 | "com.unity.modules.screencapture": { 211 | "version": "1.0.0", 212 | "depth": 0, 213 | "source": "builtin", 214 | "dependencies": { 215 | "com.unity.modules.imageconversion": "1.0.0" 216 | } 217 | }, 218 | "com.unity.modules.subsystems": { 219 | "version": "1.0.0", 220 | "depth": 1, 221 | "source": "builtin", 222 | "dependencies": { 223 | "com.unity.modules.jsonserialize": "1.0.0" 224 | } 225 | }, 226 | "com.unity.modules.terrain": { 227 | "version": "1.0.0", 228 | "depth": 0, 229 | "source": "builtin", 230 | "dependencies": {} 231 | }, 232 | "com.unity.modules.terrainphysics": { 233 | "version": "1.0.0", 234 | "depth": 0, 235 | "source": "builtin", 236 | "dependencies": { 237 | "com.unity.modules.physics": "1.0.0", 238 | "com.unity.modules.terrain": "1.0.0" 239 | } 240 | }, 241 | "com.unity.modules.tilemap": { 242 | "version": "1.0.0", 243 | "depth": 0, 244 | "source": "builtin", 245 | "dependencies": { 246 | "com.unity.modules.physics2d": "1.0.0" 247 | } 248 | }, 249 | "com.unity.modules.ui": { 250 | "version": "1.0.0", 251 | "depth": 0, 252 | "source": "builtin", 253 | "dependencies": {} 254 | }, 255 | "com.unity.modules.uielements": { 256 | "version": "1.0.0", 257 | "depth": 0, 258 | "source": "builtin", 259 | "dependencies": { 260 | "com.unity.modules.imgui": "1.0.0", 261 | "com.unity.modules.jsonserialize": "1.0.0" 262 | } 263 | }, 264 | "com.unity.modules.umbra": { 265 | "version": "1.0.0", 266 | "depth": 0, 267 | "source": "builtin", 268 | "dependencies": {} 269 | }, 270 | "com.unity.modules.unityanalytics": { 271 | "version": "1.0.0", 272 | "depth": 0, 273 | "source": "builtin", 274 | "dependencies": { 275 | "com.unity.modules.unitywebrequest": "1.0.0", 276 | "com.unity.modules.jsonserialize": "1.0.0" 277 | } 278 | }, 279 | "com.unity.modules.unitywebrequest": { 280 | "version": "1.0.0", 281 | "depth": 0, 282 | "source": "builtin", 283 | "dependencies": {} 284 | }, 285 | "com.unity.modules.unitywebrequestassetbundle": { 286 | "version": "1.0.0", 287 | "depth": 0, 288 | "source": "builtin", 289 | "dependencies": { 290 | "com.unity.modules.assetbundle": "1.0.0", 291 | "com.unity.modules.unitywebrequest": "1.0.0" 292 | } 293 | }, 294 | "com.unity.modules.unitywebrequestaudio": { 295 | "version": "1.0.0", 296 | "depth": 0, 297 | "source": "builtin", 298 | "dependencies": { 299 | "com.unity.modules.unitywebrequest": "1.0.0", 300 | "com.unity.modules.audio": "1.0.0" 301 | } 302 | }, 303 | "com.unity.modules.unitywebrequesttexture": { 304 | "version": "1.0.0", 305 | "depth": 0, 306 | "source": "builtin", 307 | "dependencies": { 308 | "com.unity.modules.unitywebrequest": "1.0.0", 309 | "com.unity.modules.imageconversion": "1.0.0" 310 | } 311 | }, 312 | "com.unity.modules.unitywebrequestwww": { 313 | "version": "1.0.0", 314 | "depth": 0, 315 | "source": "builtin", 316 | "dependencies": { 317 | "com.unity.modules.unitywebrequest": "1.0.0", 318 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0", 319 | "com.unity.modules.unitywebrequestaudio": "1.0.0", 320 | "com.unity.modules.audio": "1.0.0", 321 | "com.unity.modules.assetbundle": "1.0.0", 322 | "com.unity.modules.imageconversion": "1.0.0" 323 | } 324 | }, 325 | "com.unity.modules.vehicles": { 326 | "version": "1.0.0", 327 | "depth": 0, 328 | "source": "builtin", 329 | "dependencies": { 330 | "com.unity.modules.physics": "1.0.0" 331 | } 332 | }, 333 | "com.unity.modules.video": { 334 | "version": "1.0.0", 335 | "depth": 0, 336 | "source": "builtin", 337 | "dependencies": { 338 | "com.unity.modules.audio": "1.0.0", 339 | "com.unity.modules.ui": "1.0.0", 340 | "com.unity.modules.unitywebrequest": "1.0.0" 341 | } 342 | }, 343 | "com.unity.modules.vr": { 344 | "version": "1.0.0", 345 | "depth": 0, 346 | "source": "builtin", 347 | "dependencies": { 348 | "com.unity.modules.jsonserialize": "1.0.0", 349 | "com.unity.modules.physics": "1.0.0", 350 | "com.unity.modules.xr": "1.0.0" 351 | } 352 | }, 353 | "com.unity.modules.wind": { 354 | "version": "1.0.0", 355 | "depth": 0, 356 | "source": "builtin", 357 | "dependencies": {} 358 | }, 359 | "com.unity.modules.xr": { 360 | "version": "1.0.0", 361 | "depth": 0, 362 | "source": "builtin", 363 | "dependencies": { 364 | "com.unity.modules.physics": "1.0.0", 365 | "com.unity.modules.jsonserialize": "1.0.0", 366 | "com.unity.modules.subsystems": "1.0.0" 367 | } 368 | } 369 | } 370 | } 371 | -------------------------------------------------------------------------------- /ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!129 &1 4 | PlayerSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 20 7 | productGUID: 137937ad47f6725448713d275af1a3d4 8 | AndroidProfiler: 0 9 | AndroidFilterTouchesWhenObscured: 0 10 | AndroidEnableSustainedPerformanceMode: 0 11 | defaultScreenOrientation: 4 12 | targetDevice: 2 13 | useOnDemandResources: 0 14 | accelerometerFrequency: 60 15 | companyName: De-Panther 16 | productName: WebXR Input Profiles Loader 17 | defaultCursor: {fileID: 0} 18 | cursorHotspot: {x: 0, y: 0} 19 | m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} 20 | m_ShowUnitySplashScreen: 1 21 | m_ShowUnitySplashLogo: 1 22 | m_SplashScreenOverlayOpacity: 1 23 | m_SplashScreenAnimation: 1 24 | m_SplashScreenLogoStyle: 1 25 | m_SplashScreenDrawMode: 0 26 | m_SplashScreenBackgroundAnimationZoom: 1 27 | m_SplashScreenLogoAnimationZoom: 1 28 | m_SplashScreenBackgroundLandscapeAspect: 1 29 | m_SplashScreenBackgroundPortraitAspect: 1 30 | m_SplashScreenBackgroundLandscapeUvs: 31 | serializedVersion: 2 32 | x: 0 33 | y: 0 34 | width: 1 35 | height: 1 36 | m_SplashScreenBackgroundPortraitUvs: 37 | serializedVersion: 2 38 | x: 0 39 | y: 0 40 | width: 1 41 | height: 1 42 | m_SplashScreenLogos: [] 43 | m_VirtualRealitySplashScreen: {fileID: 0} 44 | m_HolographicTrackingLossScreen: {fileID: 0} 45 | defaultScreenWidth: 1024 46 | defaultScreenHeight: 768 47 | defaultScreenWidthWeb: 960 48 | defaultScreenHeightWeb: 400 49 | m_StereoRenderingPath: 0 50 | m_ActiveColorSpace: 0 51 | m_MTRendering: 1 52 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000 53 | iosShowActivityIndicatorOnLoading: -1 54 | androidShowActivityIndicatorOnLoading: -1 55 | iosUseCustomAppBackgroundBehavior: 0 56 | iosAllowHTTPDownload: 1 57 | allowedAutorotateToPortrait: 1 58 | allowedAutorotateToPortraitUpsideDown: 1 59 | allowedAutorotateToLandscapeRight: 1 60 | allowedAutorotateToLandscapeLeft: 1 61 | useOSAutorotation: 1 62 | use32BitDisplayBuffer: 1 63 | preserveFramebufferAlpha: 0 64 | disableDepthAndStencilBuffers: 0 65 | androidStartInFullscreen: 1 66 | androidRenderOutsideSafeArea: 1 67 | androidUseSwappy: 0 68 | androidBlitType: 0 69 | defaultIsNativeResolution: 1 70 | macRetinaSupport: 1 71 | runInBackground: 1 72 | captureSingleScreen: 0 73 | muteOtherAudioSources: 0 74 | Prepare IOS For Recording: 0 75 | Force IOS Speakers When Recording: 0 76 | deferSystemGesturesMode: 0 77 | hideHomeButton: 0 78 | submitAnalytics: 1 79 | usePlayerLog: 1 80 | bakeCollisionMeshes: 0 81 | forceSingleInstance: 0 82 | useFlipModelSwapchain: 1 83 | resizableWindow: 0 84 | useMacAppStoreValidation: 0 85 | macAppStoreCategory: public.app-category.games 86 | gpuSkinning: 1 87 | xboxPIXTextureCapture: 0 88 | xboxEnableAvatar: 0 89 | xboxEnableKinect: 0 90 | xboxEnableKinectAutoTracking: 0 91 | xboxEnableFitness: 0 92 | visibleInBackground: 1 93 | allowFullscreenSwitch: 1 94 | fullscreenMode: 1 95 | xboxSpeechDB: 0 96 | xboxEnableHeadOrientation: 0 97 | xboxEnableGuest: 0 98 | xboxEnablePIXSampling: 0 99 | metalFramebufferOnly: 0 100 | xboxOneResolution: 0 101 | xboxOneSResolution: 0 102 | xboxOneXResolution: 3 103 | xboxOneMonoLoggingLevel: 0 104 | xboxOneLoggingLevel: 1 105 | xboxOneDisableEsram: 0 106 | xboxOneEnableTypeOptimization: 0 107 | xboxOnePresentImmediateThreshold: 0 108 | switchQueueCommandMemory: 0 109 | switchQueueControlMemory: 16384 110 | switchQueueComputeMemory: 262144 111 | switchNVNShaderPoolsGranularity: 33554432 112 | switchNVNDefaultPoolsGranularity: 16777216 113 | switchNVNOtherPoolsGranularity: 16777216 114 | switchNVNMaxPublicTextureIDCount: 0 115 | switchNVNMaxPublicSamplerIDCount: 0 116 | stadiaPresentMode: 0 117 | stadiaTargetFramerate: 0 118 | vulkanNumSwapchainBuffers: 3 119 | vulkanEnableSetSRGBWrite: 0 120 | vulkanEnableLateAcquireNextImage: 0 121 | m_SupportedAspectRatios: 122 | 4:3: 1 123 | 5:4: 1 124 | 16:10: 1 125 | 16:9: 1 126 | Others: 1 127 | bundleVersion: 0.1 128 | preloadedAssets: [] 129 | metroInputSource: 0 130 | wsaTransparentSwapchain: 0 131 | m_HolographicPauseOnTrackingLoss: 1 132 | xboxOneDisableKinectGpuReservation: 1 133 | xboxOneEnable7thCore: 1 134 | vrSettings: 135 | cardboard: 136 | depthFormat: 0 137 | enableTransitionView: 0 138 | daydream: 139 | depthFormat: 0 140 | useSustainedPerformanceMode: 0 141 | enableVideoLayer: 0 142 | useProtectedVideoMemory: 0 143 | minimumSupportedHeadTracking: 0 144 | maximumSupportedHeadTracking: 1 145 | hololens: 146 | depthFormat: 1 147 | depthBufferSharingEnabled: 1 148 | lumin: 149 | depthFormat: 0 150 | frameTiming: 2 151 | enableGLCache: 0 152 | glCacheMaxBlobSize: 524288 153 | glCacheMaxFileSize: 8388608 154 | oculus: 155 | sharedDepthBuffer: 1 156 | dashSupport: 1 157 | lowOverheadMode: 0 158 | protectedContext: 0 159 | v2Signing: 1 160 | enable360StereoCapture: 0 161 | isWsaHolographicRemotingEnabled: 0 162 | enableFrameTimingStats: 0 163 | useHDRDisplay: 0 164 | D3DHDRBitDepth: 0 165 | m_ColorGamuts: 00000000 166 | targetPixelDensity: 30 167 | resolutionScalingMode: 0 168 | androidSupportedAspectRatio: 1 169 | androidMaxAspectRatio: 2.1 170 | applicationIdentifier: {} 171 | buildNumber: {} 172 | AndroidBundleVersionCode: 1 173 | AndroidMinSdkVersion: 19 174 | AndroidTargetSdkVersion: 0 175 | AndroidPreferredInstallLocation: 1 176 | aotOptions: 177 | stripEngineCode: 1 178 | iPhoneStrippingLevel: 0 179 | iPhoneScriptCallOptimization: 0 180 | ForceInternetPermission: 0 181 | ForceSDCardPermission: 0 182 | CreateWallpaper: 0 183 | APKExpansionFiles: 0 184 | keepLoadedShadersAlive: 0 185 | StripUnusedMeshComponents: 1 186 | VertexChannelCompressionMask: 4054 187 | iPhoneSdkVersion: 988 188 | iOSTargetOSVersionString: 10.0 189 | tvOSSdkVersion: 0 190 | tvOSRequireExtendedGameController: 0 191 | tvOSTargetOSVersionString: 10.0 192 | uIPrerenderedIcon: 0 193 | uIRequiresPersistentWiFi: 0 194 | uIRequiresFullScreen: 1 195 | uIStatusBarHidden: 1 196 | uIExitOnSuspend: 0 197 | uIStatusBarStyle: 0 198 | appleTVSplashScreen: {fileID: 0} 199 | appleTVSplashScreen2x: {fileID: 0} 200 | tvOSSmallIconLayers: [] 201 | tvOSSmallIconLayers2x: [] 202 | tvOSLargeIconLayers: [] 203 | tvOSLargeIconLayers2x: [] 204 | tvOSTopShelfImageLayers: [] 205 | tvOSTopShelfImageLayers2x: [] 206 | tvOSTopShelfImageWideLayers: [] 207 | tvOSTopShelfImageWideLayers2x: [] 208 | iOSLaunchScreenType: 0 209 | iOSLaunchScreenPortrait: {fileID: 0} 210 | iOSLaunchScreenLandscape: {fileID: 0} 211 | iOSLaunchScreenBackgroundColor: 212 | serializedVersion: 2 213 | rgba: 0 214 | iOSLaunchScreenFillPct: 100 215 | iOSLaunchScreenSize: 100 216 | iOSLaunchScreenCustomXibPath: 217 | iOSLaunchScreeniPadType: 0 218 | iOSLaunchScreeniPadImage: {fileID: 0} 219 | iOSLaunchScreeniPadBackgroundColor: 220 | serializedVersion: 2 221 | rgba: 0 222 | iOSLaunchScreeniPadFillPct: 100 223 | iOSLaunchScreeniPadSize: 100 224 | iOSLaunchScreeniPadCustomXibPath: 225 | iOSUseLaunchScreenStoryboard: 0 226 | iOSLaunchScreenCustomStoryboardPath: 227 | iOSDeviceRequirements: [] 228 | iOSURLSchemes: [] 229 | iOSBackgroundModes: 0 230 | iOSMetalForceHardShadows: 0 231 | metalEditorSupport: 1 232 | metalAPIValidation: 1 233 | iOSRenderExtraFrameOnPause: 0 234 | appleDeveloperTeamID: 235 | iOSManualSigningProvisioningProfileID: 236 | tvOSManualSigningProvisioningProfileID: 237 | iOSManualSigningProvisioningProfileType: 0 238 | tvOSManualSigningProvisioningProfileType: 0 239 | appleEnableAutomaticSigning: 0 240 | iOSRequireARKit: 0 241 | iOSAutomaticallyDetectAndAddCapabilities: 1 242 | appleEnableProMotion: 0 243 | clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea 244 | templatePackageId: com.unity.template.3d@4.2.8 245 | templateDefaultScene: Assets/Scenes/SampleScene.unity 246 | AndroidTargetArchitectures: 1 247 | AndroidSplashScreenScale: 0 248 | androidSplashScreen: {fileID: 0} 249 | AndroidKeystoreName: 250 | AndroidKeyaliasName: 251 | AndroidBuildApkPerCpuArchitecture: 0 252 | AndroidTVCompatibility: 0 253 | AndroidIsGame: 1 254 | AndroidEnableTango: 0 255 | androidEnableBanner: 1 256 | androidUseLowAccuracyLocation: 0 257 | androidUseCustomKeystore: 0 258 | m_AndroidBanners: 259 | - width: 320 260 | height: 180 261 | banner: {fileID: 0} 262 | androidGamepadSupportLevel: 0 263 | AndroidValidateAppBundleSize: 1 264 | AndroidAppBundleSizeToValidate: 150 265 | m_BuildTargetIcons: [] 266 | m_BuildTargetPlatformIcons: [] 267 | m_BuildTargetBatching: 268 | - m_BuildTarget: Standalone 269 | m_StaticBatching: 1 270 | m_DynamicBatching: 0 271 | - m_BuildTarget: tvOS 272 | m_StaticBatching: 1 273 | m_DynamicBatching: 0 274 | - m_BuildTarget: Android 275 | m_StaticBatching: 1 276 | m_DynamicBatching: 0 277 | - m_BuildTarget: iPhone 278 | m_StaticBatching: 1 279 | m_DynamicBatching: 0 280 | - m_BuildTarget: WebGL 281 | m_StaticBatching: 0 282 | m_DynamicBatching: 0 283 | m_BuildTargetGraphicsJobs: 284 | - m_BuildTarget: MacStandaloneSupport 285 | m_GraphicsJobs: 0 286 | - m_BuildTarget: Switch 287 | m_GraphicsJobs: 1 288 | - m_BuildTarget: MetroSupport 289 | m_GraphicsJobs: 1 290 | - m_BuildTarget: AppleTVSupport 291 | m_GraphicsJobs: 0 292 | - m_BuildTarget: BJMSupport 293 | m_GraphicsJobs: 1 294 | - m_BuildTarget: LinuxStandaloneSupport 295 | m_GraphicsJobs: 1 296 | - m_BuildTarget: PS4Player 297 | m_GraphicsJobs: 1 298 | - m_BuildTarget: iOSSupport 299 | m_GraphicsJobs: 0 300 | - m_BuildTarget: WindowsStandaloneSupport 301 | m_GraphicsJobs: 1 302 | - m_BuildTarget: XboxOnePlayer 303 | m_GraphicsJobs: 1 304 | - m_BuildTarget: LuminSupport 305 | m_GraphicsJobs: 0 306 | - m_BuildTarget: AndroidPlayer 307 | m_GraphicsJobs: 0 308 | - m_BuildTarget: WebGLSupport 309 | m_GraphicsJobs: 0 310 | m_BuildTargetGraphicsJobMode: 311 | - m_BuildTarget: PS4Player 312 | m_GraphicsJobMode: 0 313 | - m_BuildTarget: XboxOnePlayer 314 | m_GraphicsJobMode: 0 315 | m_BuildTargetGraphicsAPIs: 316 | - m_BuildTarget: AndroidPlayer 317 | m_APIs: 150000000b000000 318 | m_Automatic: 0 319 | - m_BuildTarget: iOSSupport 320 | m_APIs: 10000000 321 | m_Automatic: 1 322 | - m_BuildTarget: AppleTVSupport 323 | m_APIs: 10000000 324 | m_Automatic: 0 325 | - m_BuildTarget: WebGLSupport 326 | m_APIs: 0b000000 327 | m_Automatic: 1 328 | m_BuildTargetVRSettings: 329 | - m_BuildTarget: Standalone 330 | m_Enabled: 0 331 | m_Devices: 332 | - Oculus 333 | - OpenVR 334 | openGLRequireES31: 0 335 | openGLRequireES31AEP: 0 336 | openGLRequireES32: 0 337 | m_TemplateCustomTags: {} 338 | mobileMTRendering: 339 | Android: 1 340 | iPhone: 1 341 | tvOS: 1 342 | m_BuildTargetGroupLightmapEncodingQuality: [] 343 | m_BuildTargetGroupLightmapSettings: [] 344 | playModeTestRunnerEnabled: 0 345 | runPlayModeTestAsEditModeTest: 0 346 | actionOnDotNetUnhandledException: 1 347 | enableInternalProfiler: 0 348 | logObjCUncaughtExceptions: 1 349 | enableCrashReportAPI: 0 350 | cameraUsageDescription: 351 | locationUsageDescription: 352 | microphoneUsageDescription: 353 | switchNetLibKey: 354 | switchSocketMemoryPoolSize: 6144 355 | switchSocketAllocatorPoolSize: 128 356 | switchSocketConcurrencyLimit: 14 357 | switchScreenResolutionBehavior: 2 358 | switchUseCPUProfiler: 0 359 | switchApplicationID: 0x01004b9000490000 360 | switchNSODependencies: 361 | switchTitleNames_0: 362 | switchTitleNames_1: 363 | switchTitleNames_2: 364 | switchTitleNames_3: 365 | switchTitleNames_4: 366 | switchTitleNames_5: 367 | switchTitleNames_6: 368 | switchTitleNames_7: 369 | switchTitleNames_8: 370 | switchTitleNames_9: 371 | switchTitleNames_10: 372 | switchTitleNames_11: 373 | switchTitleNames_12: 374 | switchTitleNames_13: 375 | switchTitleNames_14: 376 | switchPublisherNames_0: 377 | switchPublisherNames_1: 378 | switchPublisherNames_2: 379 | switchPublisherNames_3: 380 | switchPublisherNames_4: 381 | switchPublisherNames_5: 382 | switchPublisherNames_6: 383 | switchPublisherNames_7: 384 | switchPublisherNames_8: 385 | switchPublisherNames_9: 386 | switchPublisherNames_10: 387 | switchPublisherNames_11: 388 | switchPublisherNames_12: 389 | switchPublisherNames_13: 390 | switchPublisherNames_14: 391 | switchIcons_0: {fileID: 0} 392 | switchIcons_1: {fileID: 0} 393 | switchIcons_2: {fileID: 0} 394 | switchIcons_3: {fileID: 0} 395 | switchIcons_4: {fileID: 0} 396 | switchIcons_5: {fileID: 0} 397 | switchIcons_6: {fileID: 0} 398 | switchIcons_7: {fileID: 0} 399 | switchIcons_8: {fileID: 0} 400 | switchIcons_9: {fileID: 0} 401 | switchIcons_10: {fileID: 0} 402 | switchIcons_11: {fileID: 0} 403 | switchIcons_12: {fileID: 0} 404 | switchIcons_13: {fileID: 0} 405 | switchIcons_14: {fileID: 0} 406 | switchSmallIcons_0: {fileID: 0} 407 | switchSmallIcons_1: {fileID: 0} 408 | switchSmallIcons_2: {fileID: 0} 409 | switchSmallIcons_3: {fileID: 0} 410 | switchSmallIcons_4: {fileID: 0} 411 | switchSmallIcons_5: {fileID: 0} 412 | switchSmallIcons_6: {fileID: 0} 413 | switchSmallIcons_7: {fileID: 0} 414 | switchSmallIcons_8: {fileID: 0} 415 | switchSmallIcons_9: {fileID: 0} 416 | switchSmallIcons_10: {fileID: 0} 417 | switchSmallIcons_11: {fileID: 0} 418 | switchSmallIcons_12: {fileID: 0} 419 | switchSmallIcons_13: {fileID: 0} 420 | switchSmallIcons_14: {fileID: 0} 421 | switchManualHTML: 422 | switchAccessibleURLs: 423 | switchLegalInformation: 424 | switchMainThreadStackSize: 1048576 425 | switchPresenceGroupId: 426 | switchLogoHandling: 0 427 | switchReleaseVersion: 0 428 | switchDisplayVersion: 1.0.0 429 | switchStartupUserAccount: 0 430 | switchTouchScreenUsage: 0 431 | switchSupportedLanguagesMask: 0 432 | switchLogoType: 0 433 | switchApplicationErrorCodeCategory: 434 | switchUserAccountSaveDataSize: 0 435 | switchUserAccountSaveDataJournalSize: 0 436 | switchApplicationAttribute: 0 437 | switchCardSpecSize: -1 438 | switchCardSpecClock: -1 439 | switchRatingsMask: 0 440 | switchRatingsInt_0: 0 441 | switchRatingsInt_1: 0 442 | switchRatingsInt_2: 0 443 | switchRatingsInt_3: 0 444 | switchRatingsInt_4: 0 445 | switchRatingsInt_5: 0 446 | switchRatingsInt_6: 0 447 | switchRatingsInt_7: 0 448 | switchRatingsInt_8: 0 449 | switchRatingsInt_9: 0 450 | switchRatingsInt_10: 0 451 | switchRatingsInt_11: 0 452 | switchRatingsInt_12: 0 453 | switchLocalCommunicationIds_0: 454 | switchLocalCommunicationIds_1: 455 | switchLocalCommunicationIds_2: 456 | switchLocalCommunicationIds_3: 457 | switchLocalCommunicationIds_4: 458 | switchLocalCommunicationIds_5: 459 | switchLocalCommunicationIds_6: 460 | switchLocalCommunicationIds_7: 461 | switchParentalControl: 0 462 | switchAllowsScreenshot: 1 463 | switchAllowsVideoCapturing: 1 464 | switchAllowsRuntimeAddOnContentInstall: 0 465 | switchDataLossConfirmation: 0 466 | switchUserAccountLockEnabled: 0 467 | switchSystemResourceMemory: 16777216 468 | switchSupportedNpadStyles: 22 469 | switchNativeFsCacheSize: 32 470 | switchIsHoldTypeHorizontal: 0 471 | switchSupportedNpadCount: 8 472 | switchSocketConfigEnabled: 0 473 | switchTcpInitialSendBufferSize: 32 474 | switchTcpInitialReceiveBufferSize: 64 475 | switchTcpAutoSendBufferSizeMax: 256 476 | switchTcpAutoReceiveBufferSizeMax: 256 477 | switchUdpSendBufferSize: 9 478 | switchUdpReceiveBufferSize: 42 479 | switchSocketBufferEfficiency: 4 480 | switchSocketInitializeEnabled: 1 481 | switchNetworkInterfaceManagerInitializeEnabled: 1 482 | switchPlayerConnectionEnabled: 1 483 | ps4NPAgeRating: 12 484 | ps4NPTitleSecret: 485 | ps4NPTrophyPackPath: 486 | ps4ParentalLevel: 11 487 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000 488 | ps4Category: 0 489 | ps4MasterVersion: 01.00 490 | ps4AppVersion: 01.00 491 | ps4AppType: 0 492 | ps4ParamSfxPath: 493 | ps4VideoOutPixelFormat: 0 494 | ps4VideoOutInitialWidth: 1920 495 | ps4VideoOutBaseModeInitialWidth: 1920 496 | ps4VideoOutReprojectionRate: 60 497 | ps4PronunciationXMLPath: 498 | ps4PronunciationSIGPath: 499 | ps4BackgroundImagePath: 500 | ps4StartupImagePath: 501 | ps4StartupImagesFolder: 502 | ps4IconImagesFolder: 503 | ps4SaveDataImagePath: 504 | ps4SdkOverride: 505 | ps4BGMPath: 506 | ps4ShareFilePath: 507 | ps4ShareOverlayImagePath: 508 | ps4PrivacyGuardImagePath: 509 | ps4NPtitleDatPath: 510 | ps4RemotePlayKeyAssignment: -1 511 | ps4RemotePlayKeyMappingDir: 512 | ps4PlayTogetherPlayerCount: 0 513 | ps4EnterButtonAssignment: 1 514 | ps4ApplicationParam1: 0 515 | ps4ApplicationParam2: 0 516 | ps4ApplicationParam3: 0 517 | ps4ApplicationParam4: 0 518 | ps4DownloadDataSize: 0 519 | ps4GarlicHeapSize: 2048 520 | ps4ProGarlicHeapSize: 2560 521 | playerPrefsMaxSize: 32768 522 | ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ 523 | ps4pnSessions: 1 524 | ps4pnPresence: 1 525 | ps4pnFriends: 1 526 | ps4pnGameCustomData: 1 527 | playerPrefsSupport: 0 528 | enableApplicationExit: 0 529 | resetTempFolder: 1 530 | restrictedAudioUsageRights: 0 531 | ps4UseResolutionFallback: 0 532 | ps4ReprojectionSupport: 0 533 | ps4UseAudio3dBackend: 0 534 | ps4UseLowGarlicFragmentationMode: 1 535 | ps4SocialScreenEnabled: 0 536 | ps4ScriptOptimizationLevel: 0 537 | ps4Audio3dVirtualSpeakerCount: 14 538 | ps4attribCpuUsage: 0 539 | ps4PatchPkgPath: 540 | ps4PatchLatestPkgPath: 541 | ps4PatchChangeinfoPath: 542 | ps4PatchDayOne: 0 543 | ps4attribUserManagement: 0 544 | ps4attribMoveSupport: 0 545 | ps4attrib3DSupport: 0 546 | ps4attribShareSupport: 0 547 | ps4attribExclusiveVR: 0 548 | ps4disableAutoHideSplash: 0 549 | ps4videoRecordingFeaturesUsed: 0 550 | ps4contentSearchFeaturesUsed: 0 551 | ps4attribEyeToEyeDistanceSettingVR: 0 552 | ps4IncludedModules: [] 553 | ps4attribVROutputEnabled: 0 554 | monoEnv: 555 | splashScreenBackgroundSourceLandscape: {fileID: 0} 556 | splashScreenBackgroundSourcePortrait: {fileID: 0} 557 | blurSplashScreenBackground: 1 558 | spritePackerPolicy: 559 | webGLMemorySize: 16 560 | webGLExceptionSupport: 1 561 | webGLNameFilesAsHashes: 0 562 | webGLDataCaching: 1 563 | webGLDebugSymbols: 0 564 | webGLEmscriptenArgs: 565 | webGLModulesDirectory: 566 | webGLTemplate: APPLICATION:Default 567 | webGLAnalyzeBuildSize: 0 568 | webGLUseEmbeddedResources: 0 569 | webGLCompressionFormat: 2 570 | webGLLinkerTarget: 1 571 | webGLThreadsSupport: 0 572 | webGLWasmStreaming: 1 573 | scriptingDefineSymbols: {} 574 | platformArchitecture: {} 575 | scriptingBackend: {} 576 | il2cppCompilerConfiguration: {} 577 | managedStrippingLevel: {} 578 | incrementalIl2cppBuild: {} 579 | allowUnsafeCode: 0 580 | additionalIl2CppArgs: 581 | scriptingRuntimeVersion: 1 582 | gcIncremental: 0 583 | gcWBarrierValidation: 0 584 | apiCompatibilityLevelPerPlatform: {} 585 | m_RenderingPath: 1 586 | m_MobileRenderingPath: 1 587 | metroPackageName: Template_3D 588 | metroPackageVersion: 589 | metroCertificatePath: 590 | metroCertificatePassword: 591 | metroCertificateSubject: 592 | metroCertificateIssuer: 593 | metroCertificateNotAfter: 0000000000000000 594 | metroApplicationDescription: Template_3D 595 | wsaImages: {} 596 | metroTileShortName: 597 | metroTileShowName: 0 598 | metroMediumTileShowName: 0 599 | metroLargeTileShowName: 0 600 | metroWideTileShowName: 0 601 | metroSupportStreamingInstall: 0 602 | metroLastRequiredScene: 0 603 | metroDefaultTileSize: 1 604 | metroTileForegroundText: 2 605 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} 606 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, 607 | a: 1} 608 | metroSplashScreenUseBackgroundColor: 0 609 | platformCapabilities: {} 610 | metroTargetDeviceFamilies: {} 611 | metroFTAName: 612 | metroFTAFileTypes: [] 613 | metroProtocolName: 614 | XboxOneProductId: 615 | XboxOneUpdateKey: 616 | XboxOneSandboxId: 617 | XboxOneContentId: 618 | XboxOneTitleId: 619 | XboxOneSCId: 620 | XboxOneGameOsOverridePath: 621 | XboxOnePackagingOverridePath: 622 | XboxOneAppManifestOverridePath: 623 | XboxOneVersion: 1.0.0.0 624 | XboxOnePackageEncryption: 0 625 | XboxOnePackageUpdateGranularity: 2 626 | XboxOneDescription: 627 | XboxOneLanguage: 628 | - enus 629 | XboxOneCapability: [] 630 | XboxOneGameRating: {} 631 | XboxOneIsContentPackage: 0 632 | XboxOneEnableGPUVariability: 1 633 | XboxOneSockets: {} 634 | XboxOneSplashScreen: {fileID: 0} 635 | XboxOneAllowedProductIds: [] 636 | XboxOnePersistentLocalStorageSize: 0 637 | XboxOneXTitleMemory: 8 638 | XboxOneOverrideIdentityName: 639 | XboxOneOverrideIdentityPublisher: 640 | vrEditorSettings: 641 | daydream: 642 | daydreamIconForeground: {fileID: 0} 643 | daydreamIconBackground: {fileID: 0} 644 | cloudServicesEnabled: 645 | UNet: 1 646 | luminIcon: 647 | m_Name: 648 | m_ModelFolderPath: 649 | m_PortalFolderPath: 650 | luminCert: 651 | m_CertPath: 652 | m_SignPackage: 1 653 | luminIsChannelApp: 0 654 | luminVersion: 655 | m_VersionCode: 1 656 | m_VersionName: 657 | apiCompatibilityLevel: 6 658 | cloudProjectId: 659 | framebufferDepthMemorylessMode: 0 660 | projectName: 661 | organizationId: 662 | cloudEnabled: 0 663 | enableNativePlatformBackendsForNewInputSystem: 0 664 | disableOldInputManagerSupport: 0 665 | legacyClampBlendShapeWeights: 0 666 | --------------------------------------------------------------------------------