├── .github ├── screenshot.png └── workflows │ └── package.yml ├── .gitignore ├── LICENSE ├── Plugins ├── IndoorAtlas.meta └── IndoorAtlas │ ├── Android.meta │ ├── Android │ ├── AndroidManifest.xml │ ├── AndroidManifest.xml.meta │ ├── androidwrapper.aar │ ├── androidwrapper.aar.meta │ ├── indooratlas-android-sdk-3.6.0.aar │ └── indooratlas-android-sdk-3.6.0.aar.meta │ ├── Editor.meta │ ├── Editor │ ├── IndoorAtlasGameObjects.cs │ └── IndoorAtlasGameObjects.cs.meta │ ├── IndoorAtlasARWayfinding.cs │ ├── IndoorAtlasARWayfinding.cs.meta │ ├── IndoorAtlasApi.cs │ ├── IndoorAtlasApi.cs.meta │ ├── IndoorAtlasSession.cs │ ├── IndoorAtlasSession.cs.meta │ ├── IndoorAtlasUIInformationProvider.cs │ ├── IndoorAtlasUIInformationProvider.cs.meta │ ├── IndoorAtlasVRCamera.cs │ ├── IndoorAtlasVRCamera.cs.meta │ ├── IndoorAtlasWGSConversion.cs │ ├── IndoorAtlasWGSConversion.cs.meta │ ├── iOS.meta │ └── iOS │ ├── Editor.meta │ ├── Editor │ ├── XcodeFixes.cs │ └── XcodeFixes.cs.meta │ ├── IndoorAtlas.framework.meta │ ├── IndoorAtlas.framework │ ├── Headers.meta │ ├── Headers │ │ ├── IAFloor.h │ │ ├── IAFloor.h.meta │ │ ├── IAFloorPlan.h │ │ ├── IAFloorPlan.h.meta │ │ ├── IALocationManager.h │ │ ├── IALocationManager.h.meta │ │ ├── IndoorAtlas.h │ │ └── IndoorAtlas.h.meta │ ├── IndoorAtlas │ ├── IndoorAtlas.meta │ ├── Info.plist │ ├── Info.plist.meta │ ├── Modules.meta │ └── Modules │ │ ├── module.modulemap │ │ └── module.modulemap.meta │ ├── NativeBridge.m │ └── NativeBridge.m.meta ├── README.md ├── androidwrapper ├── build.gradle ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── libs │ └── classes.jar └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── indooratlas │ └── android │ └── unity │ └── Plugin.java └── example ├── .gitignore ├── Assets ├── Plugins ├── Plugins.meta ├── StreamingAssets.meta ├── XR.meta ├── XR │ ├── Loaders.meta │ ├── Loaders │ │ ├── AR Core Loader.asset │ │ ├── AR Core Loader.asset.meta │ │ ├── AR Kit Loader.asset │ │ └── AR Kit Loader.asset.meta │ ├── Settings.meta │ ├── Settings │ │ ├── AR Core Loader Settings.asset │ │ ├── AR Core Loader Settings.asset.meta │ │ ├── AR Core Settings.asset │ │ ├── AR Core Settings.asset.meta │ │ ├── AR Kit Loader Settings.asset │ │ ├── AR Kit Loader Settings.asset.meta │ │ ├── AR Kit Settings.asset │ │ └── AR Kit Settings.asset.meta │ ├── XRGeneralSettings.asset │ └── XRGeneralSettings.asset.meta ├── arrow.obj ├── arrow.obj.meta ├── arrow_stylish.obj ├── arrow_stylish.obj.meta ├── compass material.mat ├── compass material.mat.meta ├── examplescene.unity ├── examplescene.unity.meta ├── finish material.mat ├── finish material.mat.meta ├── finish texture.png ├── finish texture.png.meta ├── finish.obj ├── finish.obj.meta ├── template.mat ├── template.mat.meta ├── turn material.mat └── turn material.mat.meta ├── Packages ├── manifest.json └── packages-lock.json ├── ProjectSettings ├── AudioManager.asset ├── ClusterInputManager.asset ├── DynamicsManager.asset ├── EditorBuildSettings.asset ├── EditorSettings.asset ├── GraphicsSettings.asset ├── InputManager.asset ├── MemorySettings.asset ├── NavMeshAreas.asset ├── NetworkManager.asset ├── PackageManagerSettings.asset ├── Physics2DSettings.asset ├── PresetManager.asset ├── ProjectSettings.asset ├── ProjectVersion.txt ├── QualitySettings.asset ├── SceneTemplateSettings.json ├── TagManager.asset ├── TimeManager.asset ├── UnityConnectSettings.asset ├── VFXManager.asset ├── VersionControlSettings.asset ├── XRPackageSettings.asset ├── XRSettings.asset └── boot.config └── UserSettings ├── EditorUserSettings.asset ├── Layouts └── default-2021.dwlt ├── Search.index └── Search.settings /.github/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndoorAtlas/unity-plugin/4c6659bce5ee936bdb2c4393010fc852ba640289/.github/screenshot.png -------------------------------------------------------------------------------- /.github/workflows/package.yml: -------------------------------------------------------------------------------- 1 | name: Create Unity Package 2 | on: push 3 | 4 | jobs: 5 | package-private: 6 | if: ${{ github.repository == 'IndoorAtlas/unity-plugin-private-new' }} 7 | runs-on: [self-hosted, Linux] 8 | steps: 9 | - uses: actions/checkout@v2 10 | - run: | 11 | mkdir Assets pkg 12 | mv Plugins Assets/ 13 | cp example/Assets/Plugins.meta Assets/ 14 | find Assets -name \*.meta > metaList 15 | cat metaList 16 | - uses: pCYSl5EDgo/create-unitypackage@master 17 | with: 18 | package-path: pkg/indooratlas.unitypackage 19 | include-files: metaList 20 | - uses: actions/upload-artifact@master 21 | with: 22 | path: pkg 23 | name: indooratlas 24 | 25 | package-public: 26 | if: ${{ github.repository == 'IndoorAtlas/unity-plugin' }} 27 | runs-on: [ubuntu-latest] 28 | steps: 29 | - uses: actions/checkout@v2 30 | - run: | 31 | mkdir Assets pkg 32 | mv Plugins Assets/ 33 | cp example/Assets/Plugins.meta Assets/ 34 | find Assets -name \*.meta > metaList 35 | cat metaList 36 | - uses: pCYSl5EDgo/create-unitypackage@master 37 | with: 38 | package-path: pkg/indooratlas.unitypackage 39 | include-files: metaList 40 | - uses: actions/upload-artifact@master 41 | with: 42 | path: pkg 43 | name: indooratlas 44 | - uses: softprops/action-gh-release@v1 45 | if: startsWith(github.ref, 'refs/tags/') 46 | with: 47 | files: pkg/indooratlas.unitypackage 48 | fail_on_unmatched_files: true 49 | env: 50 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 51 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .idea/ 3 | androidwrapper/*.iml 4 | androidwrapper/.gradle/ 5 | androidwrapper/build/ 6 | androidwrapper/local.properties 7 | example/Logs/ 8 | example/ios 9 | example/android 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright 2016 IndoorAtlas 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 53423f5911e25452895ea9d4548830e7 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/Android.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2e8965de6622c4c90aadbf64a0b920b6 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/Android/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 32 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/Android/AndroidManifest.xml.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 12c5c67c787e0493b9d212b933647d86 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/Android/androidwrapper.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndoorAtlas/unity-plugin/4c6659bce5ee936bdb2c4393010fc852ba640289/Plugins/IndoorAtlas/Android/androidwrapper.aar -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/Android/androidwrapper.aar.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9b3f6b915fe024924bd7e7262b193f46 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | defineConstraints: [] 9 | isPreloaded: 0 10 | isOverridable: 0 11 | isExplicitlyReferenced: 0 12 | validateReferences: 1 13 | platformData: 14 | - first: 15 | Android: Android 16 | second: 17 | enabled: 1 18 | settings: {} 19 | - first: 20 | Any: 21 | second: 22 | enabled: 0 23 | settings: {} 24 | - first: 25 | Editor: Editor 26 | second: 27 | enabled: 0 28 | settings: 29 | DefaultValueInitialized: true 30 | userData: 31 | assetBundleName: 32 | assetBundleVariant: 33 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/Android/indooratlas-android-sdk-3.6.0.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndoorAtlas/unity-plugin/4c6659bce5ee936bdb2c4393010fc852ba640289/Plugins/IndoorAtlas/Android/indooratlas-android-sdk-3.6.0.aar -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/Android/indooratlas-android-sdk-3.6.0.aar.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 98d7d0d79d1f24df68e5e06df0eb4c7e 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | defineConstraints: [] 9 | isPreloaded: 0 10 | isOverridable: 0 11 | isExplicitlyReferenced: 0 12 | validateReferences: 1 13 | platformData: 14 | - first: 15 | Android: Android 16 | second: 17 | enabled: 1 18 | settings: {} 19 | - first: 20 | Any: 21 | second: 22 | enabled: 0 23 | settings: {} 24 | - first: 25 | Editor: Editor 26 | second: 27 | enabled: 0 28 | settings: 29 | DefaultValueInitialized: true 30 | userData: 31 | assetBundleName: 32 | assetBundleVariant: 33 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 96a6a0b265ea04949a93b3fb5265ee1f 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/Editor/IndoorAtlasGameObjects.cs: -------------------------------------------------------------------------------- 1 | using UnityEditor; 2 | using UnityEngine; 3 | using IndoorAtlas; 4 | 5 | public class IndoorAtlasGameObjects { 6 | [MenuItem("GameObject/IndoorAtlas/Session", false, 10)] 7 | public static void CreateSession(MenuCommand menuCommand) { 8 | GameObject go = new GameObject("IndoorAtlas Session"); 9 | GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject); 10 | go.AddComponent(typeof(IndoorAtlasSession)); 11 | Undo.RegisterCreatedObjectUndo(go, "Create " + go.name); 12 | Selection.activeObject = go; 13 | } 14 | 15 | [MenuItem("GameObject/IndoorAtlas/VR Camera", false, 10)] 16 | public static void CreateVRCamera(MenuCommand menuCommand) { 17 | GameObject go = new GameObject("IndoorAtlas VR Camera"); 18 | GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject); 19 | go.AddComponent(typeof(IndoorAtlasVRCamera)); 20 | Undo.RegisterCreatedObjectUndo(go, "Create " + go.name); 21 | Selection.activeObject = go; 22 | } 23 | 24 | [MenuItem("GameObject/IndoorAtlas/AR Wayfinding", false, 10)] 25 | public static void CreateARSessionOrigin(MenuCommand menuCommand) { 26 | GameObject go = new GameObject("IndoorAtlas AR Wayfinding"); 27 | go.AddComponent(typeof(IndoorAtlasARWayfinding)); 28 | GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject); 29 | Undo.RegisterCreatedObjectUndo(go, "Create " + go.name); 30 | Selection.activeObject = go; 31 | } 32 | 33 | [MenuItem("GameObject/IndoorAtlas/UI Information Provider", false, 10)] 34 | public static void CreateTraceIdProvider(MenuCommand menuCommand) { 35 | GameObject go = new GameObject("IndoorAtlas UI Information Provider"); 36 | go.AddComponent(typeof(IndoorAtlasUIInformationProvider)); 37 | GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject); 38 | Undo.RegisterCreatedObjectUndo(go, "Create " + go.name); 39 | Selection.activeObject = go; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/Editor/IndoorAtlasGameObjects.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6650693a0c26347e98978e5283260fad 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/IndoorAtlasARWayfinding.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEngine.XR.ARFoundation; 3 | using UnityEngine.XR.ARSubsystems; 4 | 5 | namespace IndoorAtlas { 6 | 7 | [DisallowMultipleComponent] 8 | [AddComponentMenu("IndoorAtlas/IndoorAtlas AR Wayfinding")] 9 | public class IndoorAtlasARWayfinding : MonoBehaviour { 10 | LocationManager manager = null; 11 | 12 | [Header("IndoorAtlas AR wayfinding configuration")] 13 | 14 | [SerializeField] 15 | [Tooltip("The LatLngFloor that marks the target for navigation.")] 16 | LatLngFloor m_target; 17 | 18 | /// 19 | /// The LatLngFloor that marks the target for navigation. 20 | /// 21 | public LatLngFloor target 22 | { 23 | get { return m_target; } 24 | set { 25 | m_target = value; 26 | if (manager != null && m_wayfinding) { 27 | InstantiateTurns(); 28 | manager.StopMonitoringForWayfinding(); 29 | manager.StartMonitoringForWayfinding(m_target); 30 | } 31 | } 32 | } 33 | 34 | [SerializeField] 35 | [Tooltip("Enable wayfinding?")] 36 | bool m_wayfinding = true; 37 | 38 | public bool wayfinding 39 | { 40 | get { return m_wayfinding; } 41 | set { 42 | if (m_wayfinding == value) return; 43 | if (manager != null) InstantiateTurns(); 44 | if ((m_wayfinding = value)) { 45 | if (manager != null) { 46 | manager.StartMonitoringForWayfinding(m_target); 47 | } 48 | } else { 49 | if (manager != null) { 50 | manager.StopMonitoringForWayfinding(); 51 | } 52 | } 53 | } 54 | } 55 | 56 | [SerializeField] 57 | [Tooltip("The ARPlaneManager for capturing horizontal planes")] 58 | ARPlaneManager m_planeManager; 59 | 60 | /// 61 | /// The LatLngFloor that marks the target for navigation. 62 | /// 63 | public ARPlaneManager planeManager 64 | { 65 | get { return m_planeManager; } 66 | set { m_planeManager = value; } 67 | } 68 | 69 | [SerializeField] 70 | [Tooltip("The Camera to associate with the AR device.")] 71 | Camera m_camera; 72 | ARCameraManager m_cameraManager; 73 | 74 | bool IsTracking() { 75 | switch(ARSession.notTrackingReason) 76 | { 77 | case NotTrackingReason.None: 78 | return true; 79 | case NotTrackingReason.Initializing: 80 | break; 81 | case NotTrackingReason.Relocalizing: 82 | break; 83 | case NotTrackingReason.InsufficientLight: 84 | break; 85 | case NotTrackingReason.InsufficientFeatures: 86 | break; 87 | case NotTrackingReason.ExcessiveMotion: 88 | break; 89 | case NotTrackingReason.Unsupported: 90 | break; 91 | } 92 | return false; 93 | } 94 | 95 | void OnArFrame(ARCameraFrameEventArgs eventArgs) { 96 | if (manager == null || !IsTracking()) return; 97 | foreach (ARPlane plane in m_planeManager.trackables) { 98 | if (plane.alignment != PlaneAlignment.HorizontalUp) continue; 99 | manager.AddArPlane(plane.center.x, plane.center.y, plane.center.z, plane.extents.x, plane.extents.y); 100 | } 101 | manager.SetArPoseMatrix(m_camera.transform.localToWorldMatrix); 102 | } 103 | 104 | void RegisterFrameEvent() { 105 | if (manager == null) return; 106 | m_cameraManager.frameReceived += OnArFrame; 107 | } 108 | 109 | /// 110 | /// The Camera to associate with the AR device. 111 | /// 112 | #if UNITY_EDITOR 113 | public new Camera camera 114 | #else 115 | public Camera camera 116 | #endif 117 | { 118 | get { return m_camera; } 119 | set { 120 | m_camera = value; 121 | if (m_cameraManager != null) m_cameraManager.frameReceived -= OnArFrame; 122 | m_cameraManager = m_camera.GetComponent(); 123 | RegisterFrameEvent(); 124 | } 125 | } 126 | 127 | [SerializeField] 128 | [Tooltip("The GameObject that points to the navigation direction.")] 129 | GameObject m_compass; 130 | 131 | /// 132 | /// The GameObject that points to the navigation direction. 133 | /// 134 | public GameObject compass 135 | { 136 | get { return m_compass; } 137 | set { m_compass = value; } 138 | } 139 | 140 | [SerializeField] 141 | [Tooltip("The GameObject that represents the navigation goal.")] 142 | GameObject m_goal; 143 | 144 | /// 145 | /// The GameObject that represents the navigation goal. 146 | /// 147 | public GameObject goal 148 | { 149 | get { return m_goal; } 150 | set { m_goal = value; } 151 | } 152 | 153 | [SerializeField] 154 | [Tooltip("The GameObject that represents a navigation turn instruction.")] 155 | GameObject m_turn; 156 | GameObject[] turns = null; 157 | 158 | POI[] pois = null; 159 | GameObject[] poi_objects = null; 160 | 161 | void SetObjectsActive(bool active) { 162 | if (m_compass) m_compass.SetActive(active); 163 | if (m_goal) m_goal.SetActive(active); 164 | if (turns != null) foreach (GameObject turn in turns) turn.SetActive(active); 165 | if (poi_objects != null) foreach (GameObject poi in poi_objects) poi.SetActive(active); 166 | } 167 | 168 | void DestroyTurns() { 169 | if (turns != null) { 170 | for (int i = 1; i < turns.Length; ++i) Destroy(turns[i]); 171 | m_turn.SetActive(false); 172 | turns = null; 173 | } 174 | } 175 | 176 | void InstantiateTurns() { 177 | DestroyTurns(); 178 | if (m_turn) { 179 | m_turn.SetActive(false); 180 | turns = new GameObject[16]; // pool of 16 maximum turns (pretty optimistic) 181 | turns[0] = m_turn; 182 | for (int i = 1; i < turns.Length; ++i) turns[i] = Instantiate(m_turn); 183 | } 184 | } 185 | 186 | void DestroyPOIObjects() { 187 | if (poi_objects != null) { 188 | for (int i = 0; i < poi_objects.Length; ++i) Destroy(poi_objects[i]); 189 | poi_objects = null; 190 | } 191 | } 192 | 193 | void InstantiatePOIObjects() { 194 | DestroyPOIObjects(); 195 | if (pois != null) { 196 | poi_objects = new GameObject[pois.Length]; 197 | for (int i = 0; i < pois.Length; ++i) { 198 | var text = new GameObject(pois[i].id); 199 | var mesh = text.AddComponent(); 200 | text.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f); 201 | mesh.text = pois[i].name; 202 | text.SetActive(false); 203 | poi_objects[i] = text; 204 | } 205 | } 206 | } 207 | 208 | /// 209 | /// The GameObject that represents a navigation turn instruction. 210 | /// 211 | public GameObject turn 212 | { 213 | get { return m_turn; } 214 | set { m_turn = value; InstantiateTurns(); } 215 | } 216 | 217 | void Awake() { 218 | m_cameraManager = m_camera.GetComponent(); 219 | } 220 | 221 | void OnEnable() { 222 | if (manager != null) return; 223 | manager = new LocationManager(); 224 | manager.GetArIsConverged(); // ensures that the ar session is created 225 | if (m_wayfinding) { 226 | manager.StopMonitoringForWayfinding(); 227 | manager.StartMonitoringForWayfinding(m_target); 228 | } 229 | InstantiateTurns(); 230 | Application.onBeforeRender += OnBeforeRender; 231 | RegisterFrameEvent(); 232 | } 233 | 234 | void OnDisable() { 235 | if (manager == null) return; 236 | m_cameraManager.frameReceived -= OnArFrame; 237 | Application.onBeforeRender -= OnBeforeRender; 238 | manager.StopMonitoringForWayfinding(); 239 | manager.ReleaseArSession(); 240 | manager = null; 241 | DestroyTurns(); 242 | SetObjectsActive(false); 243 | } 244 | 245 | void OnBeforeRender() { 246 | if (manager == null) return; 247 | 248 | manager.SetArCameraToWorldMatrix(m_camera.cameraToWorldMatrix); 249 | if (!m_wayfinding || !manager.GetArIsConverged() || !IsTracking()) { 250 | SetObjectsActive(false); 251 | return; 252 | } 253 | 254 | Matrix4x4 matrix; 255 | if (m_compass) { 256 | if ((matrix = manager.GetArCompassMatrix()) != Matrix4x4.identity) { 257 | m_compass.transform.rotation = Quaternion.LookRotation(matrix.GetColumn(2), matrix.GetColumn(1)); 258 | m_compass.transform.position = matrix.GetColumn(3); 259 | m_compass.SetActive(true); 260 | } else { 261 | m_compass.SetActive(false); 262 | } 263 | } 264 | 265 | if (m_goal) { 266 | if ((matrix = manager.GetArGoalMatrix()) != Matrix4x4.identity) { 267 | m_goal.transform.rotation = Quaternion.LookRotation(matrix.GetColumn(2), matrix.GetColumn(1)); 268 | m_goal.transform.position = matrix.GetColumn(3); 269 | m_goal.SetActive(true); 270 | } else { 271 | m_goal.SetActive(false); 272 | } 273 | } 274 | 275 | if (turns != null) { 276 | int t = 0; 277 | int count = manager.GetArTurnCount(); 278 | for (int i = 0; i < count && t < turns.Length; ++i) { 279 | if ((matrix = manager.GetArTurnMatrix(i)) != Matrix4x4.identity) { 280 | turns[t].transform.rotation = Quaternion.LookRotation(matrix.GetColumn(2), matrix.GetColumn(1)); 281 | turns[t].transform.position = matrix.GetColumn(3); 282 | turns[t].SetActive(true); 283 | ++t; 284 | } 285 | } 286 | for (; t < turns.Length; ++t) turns[t].SetActive(false); 287 | } 288 | 289 | if (pois != null) { 290 | for (int i = 0; i < pois.Length; ++i) { 291 | matrix = manager.GeoToAr(pois[i].position.coordinate.latitude, pois[i].position.coordinate.longitude, pois[i].position.floor, 0, 0.2f); 292 | poi_objects[i].transform.rotation = Quaternion.LookRotation(matrix.GetColumn(2), matrix.GetColumn(1)); 293 | poi_objects[i].transform.position = matrix.GetColumn(3); 294 | poi_objects[i].transform.LookAt(m_camera.transform); 295 | poi_objects[i].transform.Rotate(0, 180, 0); 296 | poi_objects[i].SetActive(true); 297 | } 298 | } 299 | } 300 | 301 | void IndoorAtlasOnEnterRegion(Region region) { 302 | if (region.type == Region.Type.Venue) { 303 | pois = region.venue.pois; 304 | InstantiatePOIObjects(); 305 | } 306 | } 307 | 308 | void IndoorAtlasOnExitRegion(Region region) { 309 | if (region.type == Region.Type.Venue) { 310 | DestroyPOIObjects(); 311 | pois = null; 312 | } 313 | } 314 | } 315 | 316 | } 317 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/IndoorAtlasARWayfinding.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d4ce401af64e34204b6332a6b58c2834 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/IndoorAtlasApi.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fd01e5d0d31834c3cb4c1cb6991ddf37 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/IndoorAtlasSession.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | namespace IndoorAtlas { 4 | 5 | [DisallowMultipleComponent] 6 | [DefaultExecutionOrder(-1)] 7 | [AddComponentMenu("IndoorAtlas/IndoorAtlas Session")] 8 | public class IndoorAtlasSession : MonoBehaviour { 9 | LocationManager manager = null; 10 | 11 | [Header("IndoorAtlas API credentials")] 12 | 13 | [SerializeField] 14 | [Tooltip("IndoorAtlas API key.")] 15 | string apiKey; 16 | 17 | [SerializeField] 18 | [Tooltip("IndoorAtlas API secret.")] 19 | string apiSecret; 20 | 21 | [SerializeField] 22 | [Tooltip("IndoorAtlas API endpoint (blank for default).")] 23 | string apiEndpoint; 24 | 25 | [Header("IndoorAtlas session configuration")] 26 | 27 | [SerializeField] 28 | [Tooltip("The minimum distance measured in meters that the device must move horizontally before an update event is generated.")] 29 | double m_distanceFilter = 0.7; 30 | 31 | public double distanceFilter 32 | { 33 | get { return m_distanceFilter; } 34 | set { 35 | m_distanceFilter = value; 36 | if (manager != null) manager.SetDistanceFilter(value); 37 | } 38 | } 39 | 40 | [SerializeField] 41 | [Tooltip("The minimum amount of time measured in seconds that must be elapsed before an update event is generated.")] 42 | double m_timeFilter = 2.0; 43 | 44 | public double timeFilter 45 | { 46 | get { return m_timeFilter; } 47 | set { 48 | m_timeFilter = value; 49 | if (manager != null) manager.SetTimeFilter(value); 50 | } 51 | } 52 | 53 | [SerializeField] 54 | [Tooltip("The minimum angular change in degrees required to generate a new heading event.")] 55 | double m_headingFilter = 1.0; 56 | 57 | public double headingFilter 58 | { 59 | get { return m_headingFilter; } 60 | set { 61 | m_headingFilter = value; 62 | if (manager != null) manager.SetHeadingFilter(value); 63 | } 64 | } 65 | 66 | [SerializeField] 67 | [Tooltip("The minimum angular change in degrees required to generate a new attitude event.")] 68 | double m_attitudeFilter = 1.0; 69 | 70 | public double attitudeFilter 71 | { 72 | get { return m_attitudeFilter; } 73 | set { 74 | m_attitudeFilter = value; 75 | if (manager != null) manager.SetAttitudeFilter(value); 76 | } 77 | } 78 | 79 | void WarnIfMultipleSessions() { 80 | var sessions = FindObjectsOfType(); 81 | if (sessions.Length > 1) { 82 | // Compile a list of session names 83 | string sessionNames = ""; 84 | foreach (var session in sessions) { 85 | sessionNames += string.Format("\t{0}\n", session.name); 86 | } 87 | Debug.LogWarningFormat( 88 | "Multiple active IndoorAtlas Sessions found. " + 89 | "These will conflict with each other, so " + 90 | "you should only have one active IndoorAtlas Session at a time. " + 91 | "Found these active sessions:\n{0}", sessionNames); 92 | } 93 | } 94 | 95 | void OnEnable() { 96 | if (manager != null) return; 97 | #if DEVELOPMENT_BUILD || UNITY_EDITOR 98 | WarnIfMultipleSessions(); 99 | #endif 100 | manager = new LocationManager(); 101 | manager.Init(apiKey, apiSecret, apiEndpoint, name); 102 | manager.SetDistanceFilter(m_distanceFilter); 103 | manager.SetTimeFilter(m_timeFilter); 104 | manager.SetHeadingFilter(m_headingFilter); 105 | manager.SetAttitudeFilter(m_attitudeFilter); 106 | manager.StartUpdatingLocation(); 107 | } 108 | 109 | void OnDisable() { 110 | if (manager == null) return; 111 | manager.StopUpdatingLocation(); 112 | manager.Close(); 113 | manager = null; 114 | } 115 | 116 | void NativeIndoorAtlasOnLocationChanged(string data) { 117 | #if DEVELOPMENT_BUILD 118 | Debug.Log("IndoorAtlas: IndoorAtlasOnLocationChanged()"); 119 | #endif 120 | IndoorAtlas.Location location = JsonUtility.FromJson(data); 121 | BroadcastMessage("IndoorAtlasOnLocationChanged", location, SendMessageOptions.DontRequireReceiver); 122 | } 123 | 124 | void NativeIndoorAtlasOnStatusChanged(string data) { 125 | #if DEVELOPMENT_BUILD 126 | Debug.Log("IndoorAtlas: IndoorAtlasOnStatusChanged()"); 127 | #endif 128 | IndoorAtlas.Status serviceStatus = JsonUtility.FromJson (data); 129 | BroadcastMessage("IndoorAtlasOnStatusChanged", serviceStatus, SendMessageOptions.DontRequireReceiver); 130 | } 131 | 132 | void NativeIndoorAtlasOnHeadingChanged(string data) { 133 | #if DEVELOPMENT_BUILD 134 | Debug.Log("IndoorAtlas: IndoorAtlasOnHeadingChanged()"); 135 | #endif 136 | IndoorAtlas.Heading heading = JsonUtility.FromJson(data); 137 | BroadcastMessage("IndoorAtlasOnHeadingChanged", heading, SendMessageOptions.DontRequireReceiver); 138 | } 139 | 140 | void NativeIndoorAtlasOnOrientationChanged(string data) { 141 | #if DEVELOPMENT_BUILD 142 | Debug.Log("IndoorAtlas: IndoorAtlasOnOrientationChanged()"); 143 | #endif 144 | Quaternion orientation = JsonUtility.FromJson(data).getQuaternion(); 145 | Quaternion rot = Quaternion.Inverse(new Quaternion(orientation.x, orientation.y, -orientation.z, orientation.w)); 146 | Quaternion unityRot = Quaternion.Euler(new Vector3(90.0f, 0.0f, 0.0f)) * rot; 147 | BroadcastMessage("IndoorAtlasOnOrientationChanged", unityRot, SendMessageOptions.DontRequireReceiver); 148 | } 149 | 150 | void NativeIndoorAtlasOnEnterRegion(string data) { 151 | #if DEVELOPMENT_BUILD 152 | Debug.Log("IndoorAtlas: IndoorAtlasOnEnterRegion()"); 153 | #endif 154 | IndoorAtlas.Region region = JsonUtility.FromJson(data); 155 | BroadcastMessage("IndoorAtlasOnEnterRegion", region, SendMessageOptions.DontRequireReceiver); 156 | } 157 | 158 | void NativeIndoorAtlasOnExitRegion(string data) { 159 | #if DEVELOPMENT_BUILD 160 | Debug.Log("IndoorAtlas: IndoorAtlasOnExitRegion()"); 161 | #endif 162 | IndoorAtlas.Region region = JsonUtility.FromJson(data); 163 | BroadcastMessage("IndoorAtlasOnExitRegion", region, SendMessageOptions.DontRequireReceiver); 164 | } 165 | 166 | void NativeIndoorAtlasOnRoute(string data) { 167 | #if DEVELOPMENT_BUILD 168 | Debug.Log("IndoorAtlas: IndoorAtlasOnRoute()"); 169 | #endif 170 | IndoorAtlas.Route route = JsonUtility.FromJson(data); 171 | BroadcastMessage("IndoorAtlasOnRoute", route, SendMessageOptions.DontRequireReceiver); 172 | } 173 | } 174 | 175 | } 176 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/IndoorAtlasSession.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 14b0be713f5f4450e83f94857a97873e 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/IndoorAtlasUIInformationProvider.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEngine.UI; 3 | using UnityEngine.Events; 4 | using System.Collections.Generic; 5 | 6 | namespace IndoorAtlas { 7 | 8 | [AddComponentMenu("IndoorAtlas/IndoorAtlas UI Information Provider")] 9 | public class IndoorAtlasUIInformationProvider : MonoBehaviour { 10 | LocationManager manager = null; 11 | Region currentVenue = null; 12 | UnityAction poiAction = null; 13 | 14 | [Header("IndoorAtlas information provider configuration")] 15 | 16 | [SerializeField] 17 | [Tooltip("The Text widget for traceId.")] 18 | public Text m_traceId; 19 | 20 | /// 21 | /// The Text widget for traceId. 22 | /// 23 | public Text traceId { 24 | get { return m_traceId; } 25 | set { m_traceId = value; } 26 | } 27 | 28 | [SerializeField] 29 | [Tooltip("The Text widget for current region.")] 30 | public Text m_region; 31 | 32 | /// 33 | /// The Text widget for current region. 34 | /// 35 | public Text region { 36 | get { return m_region; } 37 | set { m_region = value; } 38 | } 39 | 40 | [SerializeField] 41 | [Tooltip("The AR Wayfinding component for changing wayfinding target.")] 42 | public IndoorAtlasARWayfinding m_wayfinder; 43 | 44 | /// 45 | /// The AR Wayfinding Component for changing wayfinding target. 46 | /// 47 | public IndoorAtlasARWayfinding wayfinder { 48 | get { return m_wayfinder; } 49 | set { m_wayfinder = value; } 50 | } 51 | 52 | [SerializeField] 53 | [Tooltip("The Dropdown widget for pois.")] 54 | public Dropdown m_poi; 55 | 56 | void onPoiChanged() { 57 | if (m_poi && m_wayfinder) { 58 | if (m_poi.value == 0) { 59 | m_wayfinder.wayfinding = false; 60 | return; 61 | } 62 | if (currentVenue == null) return; 63 | m_wayfinder.target = currentVenue.venue.pois[m_poi.value - 1].position; 64 | m_wayfinder.wayfinding = true; 65 | } 66 | } 67 | 68 | /// 69 | /// The Dropdown widget for pois. 70 | /// 71 | public Dropdown poi { 72 | get { return m_poi; } 73 | set { 74 | if (poiAction != null) { 75 | if (m_poi) m_poi.onValueChanged.RemoveListener(poiAction); 76 | } 77 | m_poi = value; 78 | if (m_poi) { 79 | poiAction = delegate{onPoiChanged();}; 80 | m_poi.onValueChanged.AddListener(poiAction); 81 | } else if (poiAction != null) { 82 | poiAction = null; 83 | } 84 | } 85 | } 86 | 87 | void IndoorAtlasOnEnterRegion(Region region) { 88 | if (m_region) m_region.text = region.name; 89 | if (region.type == Region.Type.Venue) { 90 | currentVenue = region; 91 | if (m_poi) { 92 | m_poi.ClearOptions(); 93 | List options = new List{"None"}; 94 | foreach (POI poi in currentVenue.venue.pois) options.Add(poi.name); 95 | m_poi.AddOptions(options); 96 | } 97 | } 98 | } 99 | 100 | void IndoorAtlasOnExitRegion(Region region) { 101 | if (region.type == Region.Type.FloorPlan && currentVenue != null) { 102 | if (m_region) m_region.text = currentVenue.name; 103 | } else if (region.type == Region.Type.Venue) { 104 | currentVenue = null; 105 | if (m_poi) { 106 | m_poi.ClearOptions(); 107 | List options = new List{"None"}; 108 | m_poi.AddOptions(options); 109 | } 110 | } 111 | } 112 | 113 | void UpdateText() { 114 | if (m_traceId) m_traceId.text = manager.GetTraceId(); 115 | } 116 | 117 | void Awake() { 118 | if (m_poi) { 119 | m_poi.ClearOptions(); 120 | List options = new List{"None"}; 121 | m_poi.AddOptions(options); 122 | if (poiAction != null) m_poi.onValueChanged.RemoveListener(poiAction); 123 | poiAction = delegate{onPoiChanged();}; 124 | m_poi.onValueChanged.AddListener(poiAction); 125 | } 126 | } 127 | 128 | void OnEnable() { 129 | manager = new LocationManager(); 130 | if (m_traceId) InvokeRepeating("UpdateText", 0.0f, 1.0f); 131 | } 132 | 133 | void OnDisable() { 134 | CancelInvoke(); 135 | manager = null; 136 | } 137 | } 138 | 139 | } 140 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/IndoorAtlasUIInformationProvider.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: de8fb9dfdd2524dd1843933af20b53d6 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/IndoorAtlasVRCamera.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | namespace IndoorAtlas { 4 | 5 | [RequireComponent(typeof(Camera))] 6 | [AddComponentMenu("IndoorAtlas/IndoorAtlas VR Camera")] 7 | public class IndoorAtlasVRCamera : MonoBehaviour { 8 | Camera m_camera; 9 | 10 | void Awake() { 11 | m_camera = GetComponent(); 12 | } 13 | 14 | void IndoorAtlasOnOrientationChanged(Quaternion orientation) { 15 | m_camera.transform.rotation = orientation; 16 | } 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/IndoorAtlasVRCamera.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6086a8dfd5e744c1aa271b590856e7a8 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/IndoorAtlasWGSConversion.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | namespace IndoorAtlas { 6 | /// 7 | /// A utility class which converts IndoorAtlas SDK's location coordinates to metric 8 | /// (east, north) coordinates. This is achieved with a linear approximation around 9 | /// a fixed "linearization point" (origin). This point can be any fixed point 10 | /// in the 3D world whose (latitude, longitude) and (x, y, z) relation can be 11 | /// determined accurately. 12 | /// The origin has to be updated if the movement is "great" with respect to Earth's 13 | /// curvature (e.g. moving to another side of the world in a simulated environment). 14 | /// 15 | public class WGSConversion { 16 | private double lat0; 17 | private double lon0; 18 | private double deltaX; 19 | private double deltaY; 20 | private bool hasLinearizationPoint = false; 21 | 22 | /// 23 | /// Sets the origin in metric coordinates to (latitude, longitude) location. 24 | /// 25 | /// The latitude of origin in degrees 26 | /// The longitude of origin in degrees 27 | public void SetOrigin(double latitude, double longitude) { 28 | lat0 = latitude; 29 | lon0 = longitude; 30 | const double a = 6378137.0; // Earth's semimajor axis in meters in WGS84 31 | const double f = 1.0 / 298.257223563; // Earth's flattening in WGS84 32 | const double b = a * (1.0 - f); 33 | const double a2 = a * a; 34 | const double b2 = b * b; 35 | double sinlat = System.Math.Sin(System.Math.PI / 180.0 * latitude); 36 | double coslat = System.Math.Cos(System.Math.PI / 180.0 * latitude); 37 | double tmp = System.Math.Sqrt(a2 * coslat * coslat + b2 * sinlat * sinlat); 38 | deltaX = (System.Math.PI / 180.0) * (a2 / tmp) * coslat; 39 | deltaY = (System.Math.PI / 180.0) * (a2 * b2 / (tmp * tmp * tmp)); 40 | hasLinearizationPoint = true; 41 | } 42 | 43 | /// 44 | /// Converts a (latitude, longitude) pair to (east, north) metric coordinates 45 | /// with respect to the (previously set) origin. That is, what is the translation 46 | /// to east and north respectively from the origin to reach (latitude, longitude). 47 | /// 48 | /// Latitude in degrees 49 | /// Longitude in degrees 50 | /// Metric coordinates in a local (east, north) coordinate system. 51 | /// 52 | /// Thrown if setOrigin hasn't been called before this function call. 53 | /// 54 | public Vector2 WGStoEN(double latitude, double longitude) { 55 | if (!hasLinearizationPoint) throw new System.InvalidOperationException("Origin hasn't been set before the conversion."); 56 | return new Vector2((float)(deltaX * (longitude - lon0)), (float)(deltaY * (latitude - lat0))); 57 | } 58 | 59 | /// 60 | /// Checks if origin has been set successfully. 61 | /// 62 | /// True if converter has origin, false otherwise. 63 | public bool IsReady() { 64 | return hasLinearizationPoint; 65 | } 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/IndoorAtlasWGSConversion.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 89121d53048a949028b38960066b8f36 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/iOS.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 20b8341a0ac084d76a13a8df0bbe0bf5 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/iOS/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2db25366c7f81476787b37950e0e0837 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/iOS/Editor/XcodeFixes.cs: -------------------------------------------------------------------------------- 1 | #if UNITY_IOS 2 | using System.Diagnostics; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.IO; 6 | using UnityEditor; 7 | using UnityEditor.Callbacks; 8 | using UnityEditor.iOS.Xcode; 9 | using UnityEditor.iOS.Xcode.Extensions; 10 | 11 | // Utility class which provides automation mechanisms to import IndoorAtlas SDK 12 | // to the Unity generated Xcode project in the post build phase. The tasks are: 13 | // - Disabling bitcode 14 | // - Adding IndoorAtlas SDK dependency 15 | // - Add the neccessary plist keys 16 | public class XcodeFixes { 17 | [PostProcessBuildAttribute(1)] 18 | public int callbackOrder { get { return 999; } } 19 | 20 | [PostProcessBuild] 21 | public static void OnPostprocessBuild(BuildTarget target, string path) 22 | { 23 | if (target != BuildTarget.iOS) return; 24 | 25 | string projectPath = PBXProject.GetPBXProjectPath(path); 26 | PBXProject proj = new PBXProject(); 27 | proj.ReadFromString(File.ReadAllText(projectPath)); 28 | 29 | // Disable bitcode 30 | UnityEngine.Debug.Log("Bitcode will be disabled. IndoorAtlas.framework uses processor optimized assembly functions, so it is not possible to enable Bitcode."); 31 | #if UNITY_2019_3_OR_NEWER 32 | string mainGUID = proj.GetUnityMainTargetGuid(); 33 | proj.AddBuildProperty(proj.GetUnityFrameworkTargetGuid(), "ENABLE_BITCODE", "false"); 34 | proj.AddFrameworkToProject(proj.GetUnityFrameworkTargetGuid(), "CoreLocation.framework", false); 35 | #else 36 | string mainGUID = proj.TargetGuidByName(PBXProject.GetUnityTargetName()); 37 | proj.AddBuildProperty(proj.TargetGuidByName("UnityFramework"), "ENABLE_BITCODE", "false"); 38 | proj.AddFrameworkToProject(proj.TargetGuidByName("UnityFramework"), "CoreLocation.framework", false); 39 | #endif 40 | proj.AddBuildProperty(mainGUID, "ENABLE_BITCODE", "false"); 41 | 42 | // Add IndoorAtlas.framework 43 | // proj.AddFrameworkToProject(mainGUID, "Plugins/IndoorAtlas/iOS/IndoorAtlas.framework", false); 44 | string frameworkGUID = proj.FindFileGuidByProjectPath("Frameworks/Plugins/IndoorAtlas/iOS/IndoorAtlas.framework"); 45 | PBXProjectExtensions.AddFileToEmbedFrameworks(proj, mainGUID, frameworkGUID); 46 | proj.WriteToFile(projectPath); 47 | 48 | // Add NSLocationAlwaysUsageDescription and NSLocationWhenInUseUsageDescription 49 | string plistPath = path + "/Info.plist"; 50 | string locationUsageDescription = "IndoorAtlas demo project needs access to device location"; 51 | PlistDocument plist = new PlistDocument(); 52 | plist.ReadFromString(File.ReadAllText(plistPath)); 53 | plist.root.SetString("NSLocationAlwaysUsageDescription", locationUsageDescription); 54 | plist.root.SetString("NSLocationWhenInUseUsageDescription", locationUsageDescription); 55 | plist.root.SetString("NSLocationAlwaysAndWhenInUseUsageDescription", locationUsageDescription); 56 | plist.root.SetString("NSBluetoothAlwaysUsageDescription", "Needed for accurate positioning"); 57 | plist.root.SetString("NSBluetoothPeripheralUsageDescription", "Needed for accurate positioning"); 58 | plist.root.SetString("NSMotionUsageDescription", "Needed for accurate positioning"); 59 | File.WriteAllText(plistPath, plist.WriteToString()); 60 | } 61 | } 62 | #endif 63 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/iOS/Editor/XcodeFixes.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1d384a2b8566a4949a314662891a6056 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/iOS/IndoorAtlas.framework.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 82c1528abaf1442abbbcf1ebc6250df0 3 | folderAsset: yes 4 | PluginImporter: 5 | externalObjects: {} 6 | serializedVersion: 2 7 | iconMap: {} 8 | executionOrder: {} 9 | defineConstraints: [] 10 | isPreloaded: 0 11 | isOverridable: 0 12 | isExplicitlyReferenced: 0 13 | validateReferences: 1 14 | platformData: 15 | - first: 16 | Any: 17 | second: 18 | enabled: 1 19 | settings: {} 20 | - first: 21 | Editor: Editor 22 | second: 23 | enabled: 0 24 | settings: 25 | DefaultValueInitialized: true 26 | userData: 27 | assetBundleName: 28 | assetBundleVariant: 29 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/iOS/IndoorAtlas.framework/Headers.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 67b6e91cb444f423391fc7a0363d77f8 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/iOS/IndoorAtlas.framework/Headers/IAFloor.h: -------------------------------------------------------------------------------- 1 | // IndoorAtlas iOS SDK 2 | // IAFloor.h 3 | 4 | #import 5 | #define INDOORATLAS_API __attribute__((visibility("default"))) 6 | 7 | /** 8 | * IACertainty 9 | * 10 | * Discussion: 11 | * Type used for representing the certainty that something is true. 12 | * Has a value from 0.0 to 1.0, inclusive. A negative value indicates an invalid certainty. 13 | */ 14 | typedef double IACertainty; 15 | 16 | /** 17 | * IAFloor specifies the floor of the building on which the user is located. 18 | * It is a replacement for CoreLocation's CLFloor as the interface for that is not open. 19 | */ 20 | INDOORATLAS_API 21 | @interface IAFloor : NSObject 22 | 23 | /** 24 | * Initializes and returns a floor object with the specified level information. 25 | * @param level initializes level value 26 | */ 27 | + (nonnull IAFloor*)floorWithLevel:(NSInteger)level; 28 | 29 | /** 30 | * Floor level values correspond to the floor numbers assigned by the user in the mapping phase. 31 | * 32 | * It is erroneous to use the user's level in a building as an estimate of altitude. 33 | */ 34 | @property (nonatomic, readonly) NSInteger level; 35 | 36 | /** 37 | * Certainty that `IALocation` floor has the correct value. 38 | */ 39 | @property (nonatomic, readonly) IACertainty certainty; 40 | 41 | @end 42 | 43 | #undef INDOORATLAS_API 44 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/iOS/IndoorAtlas.framework/Headers/IAFloor.h.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a38cfd8ec54dd4f1e90cbea46707a024 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/iOS/IndoorAtlas.framework/Headers/IAFloorPlan.h: -------------------------------------------------------------------------------- 1 | // IndoorAtlas iOS SDK 2 | // IAFloorPlan.h 3 | 4 | #import 5 | #import 6 | #import 7 | #import 8 | #define INDOORATLAS_API __attribute__((visibility("default"))) 9 | 10 | /** 11 | * IAFloorPlan represents floor plan data received from service. 12 | */ 13 | INDOORATLAS_API 14 | @interface IAFloorPlan : NSObject 15 | 16 | /** 17 | * @name Floor plan information 18 | */ 19 | 20 | /** 21 | * Identifier of the floor plan. 22 | */ 23 | @property (nonatomic, readonly, nullable) NSString *floorPlanId; 24 | 25 | /** 26 | * Name of the floor plan. 27 | */ 28 | @property (nonatomic, readonly, nullable) NSString *name; 29 | 30 | /** 31 | * Image URL of the floor plan. 32 | */ 33 | @property (nonatomic, readonly, nullable) NSURL *imageUrl; 34 | 35 | /** 36 | * Width of the image bitmap in pixels. 37 | */ 38 | @property (nonatomic, readonly) NSUInteger width; 39 | 40 | /** 41 | * Height of the image bitmap in pixels. 42 | */ 43 | @property (nonatomic, readonly) NSUInteger height; 44 | 45 | /** 46 | * Conversion multiplier from pixels to meters. 47 | */ 48 | @property (nonatomic, readonly) float pixelToMeterConversion; 49 | 50 | /** 51 | * Conversion multiplier from meters to pixels. 52 | */ 53 | @property (nonatomic, readonly) float meterToPixelConversion; 54 | 55 | /** 56 | * Width of floor plan in meters. 57 | */ 58 | @property (nonatomic, readonly) float widthMeters; 59 | 60 | /** 61 | * Height of floor plan in meters. 62 | */ 63 | @property (nonatomic, readonly) float heightMeters; 64 | 65 | /** 66 | * Object containing the floor of floor plan. 67 | * If the object is nil, the floor is unspecified. 68 | */ 69 | @property (nonatomic, readonly, nullable) IAFloor *floor; 70 | 71 | /** 72 | * The approximate bearing of left side of floor plan in 73 | * degrees east of true north. 74 | */ 75 | @property (nonatomic, readonly) double bearing; 76 | 77 | /** 78 | * Corresponding WGS84 coordinate of center of floor plan bitmap placed 79 | * on the surface of Earth. 80 | */ 81 | @property (nonatomic, readonly) CLLocationCoordinate2D center; 82 | 83 | /** 84 | * Corresponding WGS84 coordinate of top left of floor plan bitmap placed 85 | * on the surface of Earth. 86 | */ 87 | @property (nonatomic, readonly) CLLocationCoordinate2D topLeft; 88 | 89 | /** 90 | * Corresponding WGS84 coordinate of top right of floor plan bitmap placed 91 | * on the surface of Earth. 92 | */ 93 | @property (nonatomic, readonly) CLLocationCoordinate2D topRight; 94 | 95 | /** 96 | * Corresponding WGS84 coordinate of bottom left of floor plan bitmap placed 97 | * on the surface of Earth. 98 | */ 99 | @property (nonatomic, readonly) CLLocationCoordinate2D bottomLeft; 100 | 101 | /** 102 | * Corresponding WGS84 coordinate of bottom right of floor plan bitmap placed 103 | * on the surface of Earth. 104 | */ 105 | @property (nonatomic, readonly) CLLocationCoordinate2D bottomRight; 106 | 107 | /** 108 | * Converts coordinate to corresponding point. 109 | * 110 | * @param coord WGS84 coordinate 111 | * @return corresponding pixel point on floor plan bitmap 112 | */ 113 | - (CGPoint)coordinateToPoint:(CLLocationCoordinate2D)coord; 114 | 115 | /** 116 | * Converts point to corresponding coordinate. 117 | * 118 | * @param point pixel point of floor plan bitmap 119 | * @return corresponding WGS84 coordinate 120 | */ 121 | - (CLLocationCoordinate2D)pointToCoordinate:(CGPoint)point; 122 | 123 | @end 124 | 125 | #undef INDOORATLAS_API 126 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/iOS/IndoorAtlas.framework/Headers/IAFloorPlan.h.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 23ea63c0fbb394bce9dfa3b60a61b2ab 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/iOS/IndoorAtlas.framework/Headers/IALocationManager.h.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3fa08d797c1b04ec6acad9b13a5fbf47 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/iOS/IndoorAtlas.framework/Headers/IndoorAtlas.h: -------------------------------------------------------------------------------- 1 | // IndoorAtlas iOS SDK 2 | // IndoorAtlas.h 3 | 4 | #import 5 | #import 6 | #import 7 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/iOS/IndoorAtlas.framework/Headers/IndoorAtlas.h.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6f21300041cf4429aa071ac4fcf4edd9 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/iOS/IndoorAtlas.framework/IndoorAtlas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndoorAtlas/unity-plugin/4c6659bce5ee936bdb2c4393010fc852ba640289/Plugins/IndoorAtlas/iOS/IndoorAtlas.framework/IndoorAtlas -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/iOS/IndoorAtlas.framework/IndoorAtlas.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2f29ed47e19c74fc58754234f80c2615 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/iOS/IndoorAtlas.framework/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndoorAtlas/unity-plugin/4c6659bce5ee936bdb2c4393010fc852ba640289/Plugins/IndoorAtlas/iOS/IndoorAtlas.framework/Info.plist -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/iOS/IndoorAtlas.framework/Info.plist.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fc2952e659ee945ce9b24d2348282005 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/iOS/IndoorAtlas.framework/Modules.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 33637f99c612a40d288fbab2da3f4111 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/iOS/IndoorAtlas.framework/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module IndoorAtlas { 2 | umbrella header "IndoorAtlas.h" 3 | header "IALocationManager.h" 4 | header "IAFloorPlan.h" 5 | header "IAFloor.h" 6 | export * module * { export * } 7 | } 8 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/iOS/IndoorAtlas.framework/Modules/module.modulemap.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2e262a01f9f1e49fcbd07fe290faa521 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/iOS/NativeBridge.m: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface IAUnityPlugin : NSObject 5 | @property (nonatomic, strong) IALocationManager *manager; 6 | @property (nonatomic, copy) NSString *key, *secret; 7 | @property (nonatomic, copy) NSString *gameObject; 8 | @end 9 | 10 | @interface IALocationManager () 11 | - (void)setObject:(id)object forKey:(NSString*)key; 12 | @end 13 | 14 | static NSString* 15 | dict_to_json(NSDictionary *dictionary) { 16 | NSError *error; 17 | NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:0 error:&error]; 18 | NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 19 | if (error) { 20 | NSException *serializationError = [NSException 21 | exceptionWithName:@"unableToSerializeDictionaryException" 22 | reason:@"Unable to serialize NSDictionary" 23 | userInfo:nil]; 24 | [serializationError raise]; 25 | } 26 | return jsonString; 27 | } 28 | 29 | static NSDictionary* 30 | geofence_to_dict(IAGeofence *geofence) { 31 | if (!geofence) return @{}; 32 | if (![geofence isKindOfClass:[IAGeofence class]]) return @{}; 33 | NSString *payload = (geofence.payload ? dict_to_json(geofence.payload) : @"{}"); 34 | NSMutableArray *points = [NSMutableArray array]; 35 | for (NSInteger i = 0; i < geofence.points.count; i += 2) { 36 | [points addObject:@{ 37 | @"latitude": geofence.points[i], 38 | @"longitude": geofence.points[i + 1] 39 | }]; 40 | } 41 | return @{ 42 | @"id": geofence.identifier, 43 | @"name": geofence.name, 44 | @"payload": payload, 45 | @"position": @{ 46 | @"coordinate": @{ 47 | @"latitude": @(geofence.coordinate.latitude), 48 | @"longitude": @(geofence.coordinate.longitude) 49 | }, 50 | @"floor": @(geofence.floor.level) 51 | }, 52 | @"points": points 53 | }; 54 | } 55 | 56 | static NSDictionary* 57 | poi_to_dict(IAPOI *poi) { 58 | if (!poi) return @{}; 59 | NSString *payload = (poi.payload ? dict_to_json(poi.payload) : @"{}"); 60 | return @{ 61 | @"id": poi.identifier, 62 | @"name": poi.name, 63 | @"payload": payload ? payload : @"{}", 64 | @"position": @{ 65 | @"coordinate": @{ 66 | @"latitude": @(poi.coordinate.latitude), 67 | @"longitude": @(poi.coordinate.longitude) 68 | }, 69 | @"floor": @(poi.floor.level) 70 | } 71 | }; 72 | } 73 | 74 | static NSDictionary* 75 | floorplan_to_dict(IAFloorPlan *plan) { 76 | if (!plan) return @{}; 77 | return @{ 78 | @"id": plan.floorPlanId, 79 | @"name": plan.name, 80 | @"imageUrl": plan.imageUrl.absoluteString, 81 | @"width": @(plan.width), 82 | @"height": @(plan.height), 83 | @"pixelToMeterConversion": @(plan.pixelToMeterConversion), 84 | @"meterToPixelConversion": @(plan.meterToPixelConversion), 85 | @"widthMeters": @(plan.widthMeters), 86 | @"heightMeters": @(plan.heightMeters), 87 | @"floor": @(plan.floor.level), 88 | }; 89 | } 90 | 91 | static NSDictionary* 92 | venue_to_dict(IAVenue *venue) { 93 | if (!venue) return @{}; 94 | NSMutableArray *floorplans = [NSMutableArray array]; 95 | for (IAFloorPlan *plan in venue.floorplans) [floorplans addObject:floorplan_to_dict(plan)]; 96 | NSMutableArray *geofences = [NSMutableArray array]; 97 | for (IAGeofence *geo in venue.geofences) [geofences addObject:geofence_to_dict(geo)]; 98 | NSMutableArray *pois = [NSMutableArray array]; 99 | for (IAPOI *poi in venue.pois) [pois addObject:poi_to_dict(poi)]; 100 | return @{ 101 | @"id": venue.id, 102 | @"name": venue.name, 103 | @"floorplans": floorplans, 104 | @"geofences": geofences, 105 | @"pois": pois 106 | }; 107 | } 108 | 109 | static NSString* 110 | region_to_json(IARegion *region) { 111 | return dict_to_json(@{ 112 | @"id": region.identifier, 113 | @"name": region.name, 114 | @"type": @(region.type), 115 | @"timestamp": region.timestamp ? @(region.timestamp.timeIntervalSince1970) : @(-1), 116 | @"venue": venue_to_dict(region.venue), 117 | @"floorplan": floorplan_to_dict(region.floorplan), 118 | @"geofence": geofence_to_dict((IAGeofence*)region) 119 | }); 120 | } 121 | 122 | static NSDictionary* 123 | route_point_to_dict(IARoutePoint *point) { 124 | return @{ 125 | @"position": @{ 126 | @"coordinate": @{ 127 | @"latitude": @(point.coordinate.latitude), 128 | @"longitude": @(point.coordinate.longitude) 129 | }, 130 | @"floor": @(point.floor), 131 | }, 132 | @"nodeIndex": @(point.nodeIndex) 133 | }; 134 | 135 | } 136 | 137 | static NSDictionary* 138 | route_leg_to_dict(IARouteLeg *leg) { 139 | return @{ 140 | @"begin": route_point_to_dict(leg.begin), 141 | @"end": route_point_to_dict(leg.end), 142 | @"length": @(leg.length), 143 | @"direction": @(leg.direction), 144 | @"edgeIndex": @(leg.edgeIndex), 145 | }; 146 | } 147 | 148 | static NSString* 149 | route_to_json(IARoute *route) { 150 | NSMutableArray *legs = [NSMutableArray array]; 151 | NSString *error = @"NO_ERROR"; 152 | switch (route.error) { 153 | case kIARouteErrorNoError: error = @"NO_ERROR"; break; 154 | case kIARouteErrorRoutingFailed: error = @"ROUTING_FAILED"; break; 155 | case kIARouteErrorGraphNotAvailable: error = @"GRAPH_NOT_AVAILABLE"; break; 156 | } 157 | for (IARouteLeg *leg in route.legs) [legs addObject:route_leg_to_dict(leg)]; 158 | return dict_to_json(@{ 159 | @"legs": legs, 160 | @"isSuccessful": @(route.isSuccessful), 161 | @"error": error 162 | }); 163 | } 164 | 165 | static NSString* 166 | location_to_json(IALocation *location) { 167 | if (!location) return @""; 168 | CLLocation *l = location.location; 169 | return dict_to_json(@{ 170 | @"accuracy": @(l.horizontalAccuracy), 171 | @"altitude": @(l.altitude), 172 | @"bearing": @(l.course), 173 | @"position": @{ 174 | @"coordinate": @{ 175 | @"latitude": @(l.coordinate.latitude), 176 | @"longitude": @(l.coordinate.longitude) 177 | }, 178 | @"floor": @(l.floor.level), 179 | }, 180 | @"timestamp": @([l.timestamp timeIntervalSince1970]) 181 | }); 182 | } 183 | 184 | @implementation IAUnityPlugin 185 | - (id)initWithObject:(NSString *)gameObjectName apiKey:(NSString *)apiKey apiSecret:(NSString *)apiSecret apiEndpoint:(NSString*)apiEndpoint { 186 | self = [super init]; 187 | self.gameObject = gameObjectName; 188 | self.manager = [IALocationManager sharedInstance]; 189 | self.manager.delegate = self; 190 | // TODO: get version from saner place 191 | [self.manager setObject:@{@"name": @"unity", @"version": @"0.0.1"} forKey:@"IAWrapper"]; 192 | if (apiEndpoint.length) [self.manager setObject:apiEndpoint forKey:@"IACustomEndpoint"]; 193 | [self.manager setApiKey:apiKey andSecret:apiSecret]; 194 | return self; 195 | } 196 | 197 | - (void)close { 198 | [self.manager stopUpdatingLocation]; 199 | } 200 | 201 | - (void)indoorLocationManager:(IALocationManager*)manager didUpdateLocations:(NSArray*)locations { 202 | (void)manager; 203 | NSString *json = location_to_json(locations.lastObject); 204 | UnitySendMessage(self.gameObject.UTF8String, "NativeIndoorAtlasOnLocationChanged", json.UTF8String); 205 | } 206 | 207 | - (void)indoorLocationManager:(IALocationManager *)manager didUpdateAttitude:(nonnull IAAttitude *)newAttitude { 208 | (void)manager; 209 | NSString *json = dict_to_json(@{ 210 | @"x": @(newAttitude.quaternion.x), 211 | @"y": @(newAttitude.quaternion.y), 212 | @"z": @(newAttitude.quaternion.z), 213 | @"w": @(newAttitude.quaternion.w), 214 | @"timestamp": @((long)([newAttitude.timestamp timeIntervalSince1970] * 1000.0)) 215 | }); 216 | UnitySendMessage(self.gameObject.UTF8String, "NativeIndoorAtlasOnOrientationChanged", json.UTF8String); 217 | } 218 | 219 | - (void)indoorLocationManager:(nonnull IALocationManager *)manager didUpdateHeading:(nonnull IAHeading *)newHeading { 220 | (void)manager; 221 | NSString *json = dict_to_json(@{ 222 | @"heading": @(newHeading.trueHeading), 223 | @"timestamp": @((long)(newHeading.timestamp.timeIntervalSince1970 * 1000.0)) 224 | }); 225 | UnitySendMessage(self.gameObject.UTF8String, "NativeIndoorAtlasOnHeadingChanged", json.UTF8String); 226 | } 227 | 228 | - (void)indoorLocationManager:(nonnull IALocationManager *)manager statusChanged:(nonnull IAStatus *)status { 229 | (void)manager; 230 | NSString *json = dict_to_json(@{@"status": @(status.type)}); 231 | UnitySendMessage(self.gameObject.UTF8String, "NativeIndoorAtlasOnStatusChanged", json.UTF8String); 232 | } 233 | 234 | - (void)indoorLocationManager:(IALocationManager *)manager didEnterRegion:(IARegion *)region { 235 | (void)manager; 236 | NSString *json = region_to_json(region); 237 | UnitySendMessage(self.gameObject.UTF8String, "NativeIndoorAtlasOnEnterRegion", json.UTF8String); 238 | } 239 | 240 | - (void)indoorLocationManager:(IALocationManager *)manager didExitRegion:(IARegion *)region { 241 | (void)manager; 242 | NSString *json = region_to_json(region); 243 | UnitySendMessage(self.gameObject.UTF8String, "NativeIndoorAtlasOnExitRegion", json.UTF8String); 244 | } 245 | 246 | - (void)indoorLocationManager:(IALocationManager *)manager didUpdateRoute:(IARoute *)route { 247 | (void)manager; 248 | NSString *json = route_to_json(route); 249 | UnitySendMessage(self.gameObject.UTF8String, "NativeIndoorAtlasOnRoute", json.UTF8String); 250 | } 251 | @end 252 | 253 | static IAUnityPlugin *_plugin; 254 | 255 | static NSDictionary* 256 | cstr_to_dict(const char *str) { 257 | NSData *data = [[NSData alloc] initWithBytesNoCopy:str length:strlen(str) freeWhenDone:false]; 258 | return [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; 259 | } 260 | 261 | static IAWayfindingRequest* 262 | cstr_to_wayfinding_request(const char *str) { 263 | NSDictionary *dict = cstr_to_dict(str); 264 | IAWayfindingRequest *request = [IAWayfindingRequest new]; 265 | request.coordinate = CLLocationCoordinate2DMake([dict[@"coordinate"][@"latitude"] doubleValue], [dict[@"coordinate"][@"longitude"] doubleValue]); 266 | request.floor = [dict[@"floor"] integerValue]; 267 | return request; 268 | } 269 | 270 | static IALocation* 271 | cstr_to_location(const char *str) { 272 | NSDictionary *dict = cstr_to_dict(str); 273 | CLLocationCoordinate2D coord = { 274 | .latitude = [dict[@"position"][@"coordinate"][@"latitude"] doubleValue], 275 | .longitude = [dict[@"position"][@"coordinate"][@"longitude"] doubleValue], 276 | }; 277 | CLLocation *clLoc = [CLLocation initWithCoordinate:coord altitude:0 horizontalAccuracy:[dict[@"accuracy"] floatValue] verticalAccuracy:-1 timestamp:[NSDate date]]; 278 | return [IALocation locationWithCLLocation:clLoc andFloor:[IAFloor floorWithLevel:[dict[@"position"][@"floor"] intValue]]]; 279 | } 280 | 281 | static const char* 282 | nsstring_to_unity_string(NSString *str) { 283 | NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding]; 284 | char *cpy = calloc(1, data.length + 1); // calloc initalizes with zero, thus zero terminates as well 285 | assert(cpy && "calloc failed"); 286 | memcpy(cpy, data.bytes, data.length); 287 | return cpy; 288 | } 289 | 290 | static void 291 | simd_float4x4_to_unity_matrix(const simd_float4x4 *in, float out[16]) { 292 | for (int i = 0; i < 4; ++i) { 293 | out[i * 4 + 0] = in->columns[i].x; 294 | out[i * 4 + 1] = in->columns[i].y; 295 | out[i * 4 + 2] = in->columns[i].z; 296 | out[i * 4 + 3] = in->columns[i].w; 297 | } 298 | } 299 | 300 | static void 301 | unity_matrix_to_simd_float4x4(const float in[16], simd_float4x4 *out) { 302 | for (int i = 0; i < 4; ++i) { 303 | out->columns[i].x = in[i * 4 + 0]; 304 | out->columns[i].y = in[i * 4 + 1]; 305 | out->columns[i].z = in[i * 4 + 2]; 306 | out->columns[i].w = in[i * 4 + 3]; 307 | } 308 | } 309 | 310 | bool 311 | indooratlas_close(void) { 312 | const bool ret = !!_plugin; 313 | [_plugin close]; 314 | _plugin = nil; 315 | return ret; 316 | } 317 | 318 | bool 319 | indooratlas_init(const char *apiKey, const char *apiSecret, const char *apiEndpoint, const char *gameObjectName) { 320 | if (_plugin) return false; 321 | NSString *key = [NSString stringWithUTF8String:apiKey]; 322 | NSString *secret = [NSString stringWithUTF8String:apiSecret]; 323 | NSString *endpoint = [NSString stringWithUTF8String:apiEndpoint]; 324 | NSString *object = [NSString stringWithUTF8String:gameObjectName]; 325 | _plugin = [[IAUnityPlugin alloc] initWithObject:object apiKey:key apiSecret:secret apiEndpoint:endpoint]; 326 | return !!_plugin; 327 | } 328 | 329 | const char* 330 | indooratlas_versionString(void) { 331 | return nsstring_to_unity_string([IALocationManager versionString]); 332 | } 333 | 334 | void 335 | indooratlas_setDistanceFilter(double filter) { 336 | [_plugin.manager setDistanceFilter:filter]; 337 | } 338 | 339 | double 340 | indooratlas_getDistanceFilter(void) { 341 | return [_plugin.manager distanceFilter]; 342 | } 343 | 344 | void 345 | indooratlas_setTimeFilter(double filter) { 346 | [_plugin.manager setTimeFilter:filter]; 347 | } 348 | 349 | double 350 | indooratlas_getTimeFilter(void) { 351 | return [_plugin.manager timeFilter]; 352 | } 353 | 354 | void 355 | indooratlas_setHeadingFilter(double filter) { 356 | [_plugin.manager setHeadingFilter:filter]; 357 | } 358 | 359 | double 360 | indooratlas_getHeadingFilter(void) { 361 | return [_plugin.manager headingFilter]; 362 | } 363 | 364 | void 365 | indooratlas_setAttitudeFilter(double filter) { 366 | [_plugin.manager setAttitudeFilter:filter]; 367 | } 368 | 369 | double 370 | indooratlas_getAttitudeFilter(void) { 371 | return [_plugin.manager attitudeFilter]; 372 | } 373 | 374 | void 375 | indooratlas_lockFloor(int floor) { 376 | [_plugin.manager lockFloor:floor]; 377 | } 378 | 379 | void 380 | indooratlas_unlockFloor(void) { 381 | [_plugin.manager unlockFloor]; 382 | } 383 | 384 | void 385 | indooratlas_lockIndoors(bool lock) { 386 | [_plugin.manager lockIndoors:lock]; 387 | } 388 | 389 | void 390 | indooratlas_startUpdatingLocation(void) { 391 | [_plugin.manager startUpdatingLocation]; 392 | } 393 | 394 | void 395 | indooratlas_stopUpdatingLocation(void) { 396 | [_plugin.manager stopUpdatingLocation]; 397 | } 398 | 399 | void 400 | indooratlas_startMonitoringForWayfinding(const char *to) { 401 | [_plugin.manager startMonitoringForWayfinding:cstr_to_wayfinding_request(to)]; 402 | } 403 | 404 | void 405 | indooratlas_stopMonitoringForWayfinding(void) { 406 | [_plugin.manager stopMonitoringForWayfinding]; 407 | } 408 | 409 | const char* 410 | indooratlas_traceID(void) { 411 | return nsstring_to_unity_string(_plugin.manager.extraInfo[kIATraceId]); 412 | } 413 | 414 | void 415 | indooratlas_releaseArSession(void) { 416 | [_plugin.manager releaseArSession]; 417 | } 418 | 419 | void 420 | indooratlas_setArPoseMatrix(const float matrix[16]) { 421 | simd_float4x4 simd; 422 | unity_matrix_to_simd_float4x4(matrix, &simd); 423 | [_plugin.manager.arSession setPoseMatrix:simd]; 424 | } 425 | 426 | void 427 | indooratlas_setArCameraToWorldMatrix(const float matrix[16]) { 428 | simd_float4x4 simd; 429 | unity_matrix_to_simd_float4x4(matrix, &simd); 430 | [_plugin.manager.arSession setCameraToWorldMatrix:simd]; 431 | } 432 | 433 | bool 434 | indooratlas_getArIsConverged(void) { 435 | return _plugin.manager.arSession.converged; 436 | } 437 | 438 | bool 439 | indooratlas_getArCompassMatrix(float matrix[16]) { 440 | simd_float4x4 simd = matrix_identity_float4x4; 441 | const bool ret = [_plugin.manager.arSession.wayfindingCompassArrow updateModelMatrix:&simd]; 442 | simd_float4x4_to_unity_matrix(&simd, matrix); 443 | return ret; 444 | } 445 | 446 | bool 447 | indooratlas_getArGoalMatrix(float matrix[16]) { 448 | simd_float4x4 simd = matrix_identity_float4x4; 449 | const bool ret = [_plugin.manager.arSession.wayfindingTarget updateModelMatrix:&simd]; 450 | simd_float4x4_to_unity_matrix(&simd, matrix); 451 | return ret; 452 | } 453 | 454 | int 455 | indooratlas_getArTurnCount(void) { 456 | return (int)_plugin.manager.arSession.wayfindingTurnArrows.count; 457 | } 458 | 459 | bool 460 | indooratlas_getArTurnMatrix(int index, float matrix[16]) { 461 | simd_float4x4 simd = matrix_identity_float4x4; 462 | const bool ret = [_plugin.manager.arSession.wayfindingTurnArrows[index] updateModelMatrix:&simd]; 463 | simd_float4x4_to_unity_matrix(&simd, matrix); 464 | return ret; 465 | } 466 | 467 | void 468 | indooratlas_addArPlane(float cx, float cy, float cz, float ex, float ez) { 469 | [_plugin.manager.arSession addPlaneWithCenterX:cx withCenterY:cy withCenterZ:cz withExtentX:ex withExtentZ:ez]; 470 | } 471 | 472 | void 473 | indooratlas_geoToAr(double lat, double lon, int floor, float heading, float zOffset, float matrix[16]) { 474 | CLLocationCoordinate2D coord = { lat, lon }; 475 | simd_float4x4 simd = [_plugin.manager.arSession geoToAr:coord floorNumber:floor heading:heading zOffset:zOffset]; 476 | simd_float4x4_to_unity_matrix(&simd, matrix); 477 | } 478 | 479 | const char* 480 | indooratlas_arToGeo(double x, double y, double z) { 481 | IALocation *l = [_plugin.manager.arSession arToGeo:x Y:y Z:z]; 482 | return nsstring_to_unity_string(location_to_json(l)); 483 | } 484 | 485 | void 486 | indooratlas_setLocation(const char *location) { 487 | [_plugin.manager setLocation:cstr_to_location(location)]; 488 | } 489 | -------------------------------------------------------------------------------- /Plugins/IndoorAtlas/iOS/NativeBridge.m.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ae1107116df8f47e1ad58a434e46e23e 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | defineConstraints: [] 9 | isPreloaded: 0 10 | isOverridable: 0 11 | isExplicitlyReferenced: 0 12 | validateReferences: 1 13 | platformData: 14 | - first: 15 | Any: 16 | second: 17 | enabled: 0 18 | settings: {} 19 | - first: 20 | Editor: Editor 21 | second: 22 | enabled: 0 23 | settings: 24 | DefaultValueInitialized: true 25 | - first: 26 | iPhone: iOS 27 | second: 28 | enabled: 1 29 | settings: {} 30 | - first: 31 | tvOS: tvOS 32 | second: 33 | enabled: 1 34 | settings: {} 35 | userData: 36 | assetBundleName: 37 | assetBundleVariant: 38 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # IndoorAtlas Unity Plugin 2 | 3 | [IndoorAtlas](https://www.indooratlas.com/) provides a unique Platform-as-a-Service (PaaS) solution that runs a disruptive geomagnetic positioning in its full-stack hybrid technology for accurately pinpointing a location inside a building. The IndoorAtlas SDK enables app developers to use high-accuracy indoor positioning in venues that have been fingerprinted. 4 | 5 | Getting started requires you to set up a free developer account and fingerprint your indoor venue using the [IndoorAtlas MapCreator 2](https://play.google.com/store/apps/details?id=com.indooratlas.android.apps.jaywalker). 6 | 7 | ## Getting Started 8 | 9 | * Set up your [free developer account](https://app.indooratlas.com) in the IndoorAtlas developer portal. Help with getting started is available in the [Quick Start Guide](http://docs.indooratlas.com/quick-start-guide.html). 10 | * To enable IndoorAtlas indoor positioning in a venue, the venue needs to be fingerprinted with the [IndoorAtlas MapCreator 2](https://play.google.com/store/apps/details?id=com.indooratlas.android.apps.jaywalker) tool. 11 | * To start developing your own app, create an [API key](https://app.indooratlas.com/apps). 12 | * An example Unity project is included in the example folder. 13 | 14 | It's recommended you use Unity version 2021.3.17f1 or higher. 15 | 16 | ## How to Use 17 | 18 | * IndoorAtlas API key and secret. You can generate credentials from [our website](https://app.indooratlas.com/apps). 19 | 20 | ## Example 21 | 22 | There's an example Unity project which implements basic AR wayfinding functionality using the `IndoorAtlas AR Wayfinding` component. 23 | To build and run it on a real device, you may have to change the bundle identifier field in the Player Settings and fill 24 | your IndoorAtlas credentials to `IndoorAtlas Session` component. You'll need a location with POIs so you can choose a POI from the drop-down list to navigate to. 25 | 26 | NOTE: For the AR functionality you will need a API key with AR support enabled. Please contact IndoorAtlas sales for this! 27 | 28 | ![Screenshot of the example](.github/screenshot.png) 29 | 30 | ## Scripting 31 | 32 | There is a `IndoorAtlasApi.cs` included that wraps most of our Android and iOS SDK functionality to C#. 33 | You may use this api in your own components. To get callbacks from the Android and iOS SDK, your component should be children of `IndoorAtlas Session` component, 34 | and implement onei or more of the following methods: 35 | 36 | * IndoorAtlasOnLocationChanged 37 | * IndoorAtlasOnStatusChanged 38 | * IndoorAtlasOnHeadingChanged 39 | * IndoorAtlasOnOrientationChanged 40 | * IndoorAtlasOnEnterRegion 41 | * IndoorAtlasOnExitRegion 42 | * IndoorAtlasOnRoute 43 | 44 | To get better idea of how these callbacks work and what are their arguments, check the `IndoorAtlasSession.cs` source file. 45 | 46 | ### Coodinate systems 47 | 48 | This repository contains `WGSConversion` class (in `IndoorAtlasWGSConversion.cs` file) which can be used to convert IndoorAtlas SDK's (latitude, longitude) coordinates to metric (east, north) coordinates. 49 | 50 | #### A numerical example 51 | 52 | Set first a fixed point ("origin") to your 3D scene with `SetOrigin` method, for example: 53 | 54 | ```C# 55 | IndoorAtlas.WGSConversion temp = new IndoorAtlas.WGSConversion (); 56 | temp.SetOrigin (63.357219, 27.403592); 57 | ``` 58 | 59 | Relative (east, north) transitions can be computed with `WGStoEN` method after the origin has been set, for example: 60 | ```C# 61 | Vector2 eastNorth = temp.WGStoEN (63.357860, 27.402245); 62 | Debug.Log ("East-North transition: " + eastNorth.x + ", " + eastNorth.y); 63 | ``` 64 | 65 | This gives a transition of (-67.42091, 71.45055) _from origin_, that is, a transition of ~67 meters to west and ~71 meters to north _from origin_. 66 | 67 | ## License 68 | 69 | Copyright 2021 IndoorAtlas Ltd. The Unity Plugin is released under the Apache License. See the LICENSE file for details. 70 | -------------------------------------------------------------------------------- /androidwrapper/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | mavenCentral() 4 | jcenter() 5 | google() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:3.5.0' 9 | } 10 | } 11 | 12 | allprojects { 13 | repositories { 14 | mavenCentral() 15 | jcenter() 16 | google() 17 | } 18 | } 19 | 20 | apply plugin: 'com.android.library' 21 | 22 | android { 23 | compileSdkVersion 33 24 | 25 | defaultConfig { 26 | minSdkVersion 21 27 | targetSdkVersion 30 28 | versionCode 1 29 | versionName "1.0" 30 | } 31 | 32 | buildTypes { 33 | debug { 34 | debuggable true 35 | } 36 | release { 37 | } 38 | } 39 | lintOptions { 40 | abortOnError false 41 | } 42 | 43 | sourceSets { 44 | main { 45 | java { 46 | srcDir 'src/main/java' 47 | } 48 | } 49 | } 50 | } 51 | 52 | dependencies { 53 | // Add UnityPlayer classes from the libs directory 54 | compileOnly fileTree(include: ['*.jar'], dir: 'libs') 55 | 56 | api 'com.indooratlas.android:indooratlas-android-sdk:3.6.0@aar' 57 | api 'com.android.support:support-v4:26.1.0' 58 | api 'com.android.support:appcompat-v7:26.1.0' 59 | } 60 | 61 | repositories{ 62 | maven { 63 | url "https://dl.cloudsmith.io/public/indooratlas/mvn-public/maven/" 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /androidwrapper/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndoorAtlas/unity-plugin/4c6659bce5ee936bdb2c4393010fc852ba640289/androidwrapper/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /androidwrapper/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Wed Sep 11 14:36:28 EEST 2019 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip 7 | -------------------------------------------------------------------------------- /androidwrapper/gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # 4 | # Copyright 2015 the original author or authors. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # https://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | ############################################################################## 20 | ## 21 | ## Gradle start up script for UN*X 22 | ## 23 | ############################################################################## 24 | 25 | # Attempt to set APP_HOME 26 | # Resolve links: $0 may be a link 27 | PRG="$0" 28 | # Need this for relative symlinks. 29 | while [ -h "$PRG" ] ; do 30 | ls=`ls -ld "$PRG"` 31 | link=`expr "$ls" : '.*-> \(.*\)$'` 32 | if expr "$link" : '/.*' > /dev/null; then 33 | PRG="$link" 34 | else 35 | PRG=`dirname "$PRG"`"/$link" 36 | fi 37 | done 38 | SAVED="`pwd`" 39 | cd "`dirname \"$PRG\"`/" >/dev/null 40 | APP_HOME="`pwd -P`" 41 | cd "$SAVED" >/dev/null 42 | 43 | APP_NAME="Gradle" 44 | APP_BASE_NAME=`basename "$0"` 45 | 46 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 47 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' 48 | 49 | # Use the maximum available, or set MAX_FD != -1 to use that value. 50 | MAX_FD="maximum" 51 | 52 | warn () { 53 | echo "$*" 54 | } 55 | 56 | die () { 57 | echo 58 | echo "$*" 59 | echo 60 | exit 1 61 | } 62 | 63 | # OS specific support (must be 'true' or 'false'). 64 | cygwin=false 65 | msys=false 66 | darwin=false 67 | nonstop=false 68 | case "`uname`" in 69 | CYGWIN* ) 70 | cygwin=true 71 | ;; 72 | Darwin* ) 73 | darwin=true 74 | ;; 75 | MINGW* ) 76 | msys=true 77 | ;; 78 | NONSTOP* ) 79 | nonstop=true 80 | ;; 81 | esac 82 | 83 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 84 | 85 | # Determine the Java command to use to start the JVM. 86 | if [ -n "$JAVA_HOME" ] ; then 87 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 88 | # IBM's JDK on AIX uses strange locations for the executables 89 | JAVACMD="$JAVA_HOME/jre/sh/java" 90 | else 91 | JAVACMD="$JAVA_HOME/bin/java" 92 | fi 93 | if [ ! -x "$JAVACMD" ] ; then 94 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 95 | 96 | Please set the JAVA_HOME variable in your environment to match the 97 | location of your Java installation." 98 | fi 99 | else 100 | JAVACMD="java" 101 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 102 | 103 | Please set the JAVA_HOME variable in your environment to match the 104 | location of your Java installation." 105 | fi 106 | 107 | # Increase the maximum file descriptors if we can. 108 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 109 | MAX_FD_LIMIT=`ulimit -H -n` 110 | if [ $? -eq 0 ] ; then 111 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 112 | MAX_FD="$MAX_FD_LIMIT" 113 | fi 114 | ulimit -n $MAX_FD 115 | if [ $? -ne 0 ] ; then 116 | warn "Could not set maximum file descriptor limit: $MAX_FD" 117 | fi 118 | else 119 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 120 | fi 121 | fi 122 | 123 | # For Darwin, add options to specify how the application appears in the dock 124 | if $darwin; then 125 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 126 | fi 127 | 128 | # For Cygwin or MSYS, switch paths to Windows format before running java 129 | if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then 130 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 131 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 132 | JAVACMD=`cygpath --unix "$JAVACMD"` 133 | 134 | # We build the pattern for arguments to be converted via cygpath 135 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 136 | SEP="" 137 | for dir in $ROOTDIRSRAW ; do 138 | ROOTDIRS="$ROOTDIRS$SEP$dir" 139 | SEP="|" 140 | done 141 | OURCYGPATTERN="(^($ROOTDIRS))" 142 | # Add a user-defined pattern to the cygpath arguments 143 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 144 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 145 | fi 146 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 147 | i=0 148 | for arg in "$@" ; do 149 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 150 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 151 | 152 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 153 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 154 | else 155 | eval `echo args$i`="\"$arg\"" 156 | fi 157 | i=$((i+1)) 158 | done 159 | case $i in 160 | (0) set -- ;; 161 | (1) set -- "$args0" ;; 162 | (2) set -- "$args0" "$args1" ;; 163 | (3) set -- "$args0" "$args1" "$args2" ;; 164 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 165 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 166 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 167 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 168 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 169 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 170 | esac 171 | fi 172 | 173 | # Escape application args 174 | save () { 175 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 176 | echo " " 177 | } 178 | APP_ARGS=$(save "$@") 179 | 180 | # Collect all arguments for the java command, following the shell quoting and substitution rules 181 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 182 | 183 | # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong 184 | if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then 185 | cd "$(dirname "$0")" 186 | fi 187 | 188 | exec "$JAVACMD" "$@" 189 | -------------------------------------------------------------------------------- /androidwrapper/gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%" == "" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%" == "" set DIRNAME=. 29 | set APP_BASE_NAME=%~n0 30 | set APP_HOME=%DIRNAME% 31 | 32 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 33 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 34 | 35 | @rem Find java.exe 36 | if defined JAVA_HOME goto findJavaFromJavaHome 37 | 38 | set JAVA_EXE=java.exe 39 | %JAVA_EXE% -version >NUL 2>&1 40 | if "%ERRORLEVEL%" == "0" goto init 41 | 42 | echo. 43 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 44 | echo. 45 | echo Please set the JAVA_HOME variable in your environment to match the 46 | echo location of your Java installation. 47 | 48 | goto fail 49 | 50 | :findJavaFromJavaHome 51 | set JAVA_HOME=%JAVA_HOME:"=% 52 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 53 | 54 | if exist "%JAVA_EXE%" goto init 55 | 56 | echo. 57 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 58 | echo. 59 | echo Please set the JAVA_HOME variable in your environment to match the 60 | echo location of your Java installation. 61 | 62 | goto fail 63 | 64 | :init 65 | @rem Get command-line arguments, handling Windows variants 66 | 67 | if not "%OS%" == "Windows_NT" goto win9xME_args 68 | 69 | :win9xME_args 70 | @rem Slurp the command line arguments. 71 | set CMD_LINE_ARGS= 72 | set _SKIP=2 73 | 74 | :win9xME_args_slurp 75 | if "x%~1" == "x" goto execute 76 | 77 | set CMD_LINE_ARGS=%* 78 | 79 | :execute 80 | @rem Setup the command line 81 | 82 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 83 | 84 | @rem Execute Gradle 85 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 86 | 87 | :end 88 | @rem End local scope for the variables with windows NT shell 89 | if "%ERRORLEVEL%"=="0" goto mainEnd 90 | 91 | :fail 92 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 93 | rem the _cmd.exe /c_ return code! 94 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 95 | exit /b 1 96 | 97 | :mainEnd 98 | if "%OS%"=="Windows_NT" endlocal 99 | 100 | :omega 101 | -------------------------------------------------------------------------------- /androidwrapper/libs/classes.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndoorAtlas/unity-plugin/4c6659bce5ee936bdb2c4393010fc852ba640289/androidwrapper/libs/classes.jar -------------------------------------------------------------------------------- /androidwrapper/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /example/.gitignore: -------------------------------------------------------------------------------- 1 | # Unity generated files 2 | # Source: https://github.com/github/gitignore/blob/master/Unity.gitignore 3 | [Ll]ibrary/ 4 | [Tt]emp/ 5 | [Oo]bj/ 6 | [Bb]uild/ 7 | [Bb]uilds/ 8 | Assets/AssetStoreTools* 9 | 10 | # Visual Studio 2015 cache directory 11 | .vs/ 12 | 13 | # Autogenerated VS/MD/Consulo solution and project files 14 | ExportedObj/ 15 | .consulo/ 16 | *.csproj 17 | *.unityproj 18 | *.sln 19 | *.suo 20 | *.tmp 21 | *.user 22 | *.userprefs 23 | *.pidb 24 | *.booproj 25 | *.svd 26 | *.pdb 27 | 28 | # Unity3D generated meta files 29 | *.pidb.meta 30 | 31 | # Unity3D Generated File On Crash Reports 32 | sysinfo.txt 33 | 34 | # Builds 35 | *.apk 36 | *.unitypackage 37 | -------------------------------------------------------------------------------- /example/Assets/Plugins: -------------------------------------------------------------------------------- 1 | ../../Plugins/ -------------------------------------------------------------------------------- /example/Assets/Plugins.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: dcf3d868e734b4a939c036b5d30efdf0 3 | folderAsset: yes 4 | timeCreated: 1504697473 5 | licenseType: Pro 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /example/Assets/StreamingAssets.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: df9b2cdea894c418e9af2f90ebc5442b 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /example/Assets/XR.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 53f00e22e87d84213b3c1d0bb8fb9170 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /example/Assets/XR/Loaders.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9f670f45ec4364c9aae6dda1ec7bbda8 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /example/Assets/XR/Loaders/AR Core Loader.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 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: 11500000, guid: 06042c85f885b4d1886f3ca5a1074eca, type: 3} 13 | m_Name: AR Core Loader 14 | m_EditorClassIdentifier: 15 | -------------------------------------------------------------------------------- /example/Assets/XR/Loaders/AR Core Loader.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b9727c9278aa748a6a2b0fea3fceda4c 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /example/Assets/XR/Loaders/AR Kit Loader.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 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: 11500000, guid: a18c4d6661b404073b154020b9e2d993, type: 3} 13 | m_Name: AR Kit Loader 14 | m_EditorClassIdentifier: 15 | -------------------------------------------------------------------------------- /example/Assets/XR/Loaders/AR Kit Loader.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8121879a57a0348f1bd72288f7a36754 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /example/Assets/XR/Settings.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f9bb48bcc0f674d7d8ac7a139cdb951f 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /example/Assets/XR/Settings/AR Core Loader Settings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 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: 11500000, guid: 00cb13c61b2744fd786f9f969ce96149, type: 3} 13 | m_Name: AR Core Loader Settings 14 | m_EditorClassIdentifier: 15 | m_StartAndStopSubsystems: 0 16 | -------------------------------------------------------------------------------- /example/Assets/XR/Settings/AR Core Loader Settings.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6e335361e41924207bd2e459d68db2ff 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /example/Assets/XR/Settings/AR Core Settings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 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: 11500000, guid: 9dae4501572e1418791be3e3bf1f7faa, type: 3} 13 | m_Name: AR Core Settings 14 | m_EditorClassIdentifier: 15 | m_Requirement: 0 16 | m_Depth: 0 17 | m_IgnoreGradleVersion: 0 18 | -------------------------------------------------------------------------------- /example/Assets/XR/Settings/AR Core Settings.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b5fdb627fe96040a58c94277289a6790 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 11400000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /example/Assets/XR/Settings/AR Kit Loader Settings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 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: 11500000, guid: 9cac560dd573c4c5088432b9d202f3e7, type: 3} 13 | m_Name: AR Kit Loader Settings 14 | m_EditorClassIdentifier: 15 | m_StartAndStopSubsystems: 0 16 | -------------------------------------------------------------------------------- /example/Assets/XR/Settings/AR Kit Loader Settings.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 814ff512ce88d41eabce8cac5d724ea3 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /example/Assets/XR/Settings/AR Kit Settings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 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: 11500000, guid: 7a3c2811d41034e52a6d6c33ac73a207, type: 3} 13 | m_Name: AR Kit Settings 14 | m_EditorClassIdentifier: 15 | m_Requirement: 0 16 | -------------------------------------------------------------------------------- /example/Assets/XR/Settings/AR Kit Settings.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 13697a1c871294a5fa7dc2cb1ee9a591 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 11400000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /example/Assets/XR/XRGeneralSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &-6573352588750502918 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 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: 11500000, guid: f4c3631f5e58749a59194e0cf6baf6d5, type: 3} 13 | m_Name: iOS Providers 14 | m_EditorClassIdentifier: 15 | m_RequiresSettingsUpdate: 0 16 | m_AutomaticLoading: 0 17 | m_AutomaticRunning: 0 18 | m_Loaders: 19 | - {fileID: 11400000, guid: 8121879a57a0348f1bd72288f7a36754, type: 2} 20 | --- !u!114 &11400000 21 | MonoBehaviour: 22 | m_ObjectHideFlags: 0 23 | m_CorrespondingSourceObject: {fileID: 0} 24 | m_PrefabInstance: {fileID: 0} 25 | m_PrefabAsset: {fileID: 0} 26 | m_GameObject: {fileID: 0} 27 | m_Enabled: 1 28 | m_EditorHideFlags: 0 29 | m_Script: {fileID: 11500000, guid: d2dc886499c26824283350fa532d087d, type: 3} 30 | m_Name: XRGeneralSettings 31 | m_EditorClassIdentifier: 32 | Keys: 0400000007000000 33 | Values: 34 | - {fileID: 7393501260922848161} 35 | - {fileID: 5811244143092264058} 36 | --- !u!114 &5811244143092264058 37 | MonoBehaviour: 38 | m_ObjectHideFlags: 0 39 | m_CorrespondingSourceObject: {fileID: 0} 40 | m_PrefabInstance: {fileID: 0} 41 | m_PrefabAsset: {fileID: 0} 42 | m_GameObject: {fileID: 0} 43 | m_Enabled: 1 44 | m_EditorHideFlags: 0 45 | m_Script: {fileID: 11500000, guid: d236b7d11115f2143951f1e14045df39, type: 3} 46 | m_Name: Android Settings 47 | m_EditorClassIdentifier: 48 | m_LoaderManagerInstance: {fileID: 6963159894050900061} 49 | m_InitManagerOnStart: 1 50 | --- !u!114 &6963159894050900061 51 | MonoBehaviour: 52 | m_ObjectHideFlags: 0 53 | m_CorrespondingSourceObject: {fileID: 0} 54 | m_PrefabInstance: {fileID: 0} 55 | m_PrefabAsset: {fileID: 0} 56 | m_GameObject: {fileID: 0} 57 | m_Enabled: 1 58 | m_EditorHideFlags: 0 59 | m_Script: {fileID: 11500000, guid: f4c3631f5e58749a59194e0cf6baf6d5, type: 3} 60 | m_Name: Android Providers 61 | m_EditorClassIdentifier: 62 | m_RequiresSettingsUpdate: 0 63 | m_AutomaticLoading: 0 64 | m_AutomaticRunning: 0 65 | m_Loaders: 66 | - {fileID: 11400000, guid: b9727c9278aa748a6a2b0fea3fceda4c, type: 2} 67 | --- !u!114 &7393501260922848161 68 | MonoBehaviour: 69 | m_ObjectHideFlags: 0 70 | m_CorrespondingSourceObject: {fileID: 0} 71 | m_PrefabInstance: {fileID: 0} 72 | m_PrefabAsset: {fileID: 0} 73 | m_GameObject: {fileID: 0} 74 | m_Enabled: 1 75 | m_EditorHideFlags: 0 76 | m_Script: {fileID: 11500000, guid: d236b7d11115f2143951f1e14045df39, type: 3} 77 | m_Name: iOS Settings 78 | m_EditorClassIdentifier: 79 | m_LoaderManagerInstance: {fileID: -6573352588750502918} 80 | m_InitManagerOnStart: 1 81 | -------------------------------------------------------------------------------- /example/Assets/XR/XRGeneralSettings.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 333d873be676d43348857333b9b2424f 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /example/Assets/arrow.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.83.1 OBJ File: 'arrow.blend' 2 | # www.blender.org 3 | o Curve.001 4 | v -0.051080 -0.287953 0.037420 5 | v -0.051080 0.009798 0.037420 6 | v -0.173824 0.009798 0.037420 7 | v -0.003112 0.304726 0.037420 8 | v 0.170422 0.009798 0.037420 9 | v 0.047679 0.009798 0.037420 10 | v 0.047679 -0.287953 0.037420 11 | v -0.051080 -0.287953 -0.037580 12 | v -0.051080 0.009798 -0.037580 13 | v -0.173824 0.009798 -0.037580 14 | v -0.003112 0.304726 -0.037580 15 | v 0.170422 0.009798 -0.037580 16 | v 0.047679 0.009798 -0.037580 17 | v 0.047679 -0.287953 -0.037580 18 | vt 0.166667 0.000000 19 | vt 0.500000 0.000000 20 | vt 0.333333 0.000000 21 | vt 1.000000 0.000000 22 | vt 0.000000 0.000000 23 | vt 0.833333 0.000000 24 | vt 0.666667 0.000000 25 | vt 0.166667 0.000000 26 | vt 0.333333 0.000000 27 | vt 0.500000 0.000000 28 | vt 1.000000 0.000000 29 | vt 0.000000 0.000000 30 | vt 0.833333 0.000000 31 | vt 0.666667 0.000000 32 | vn 0.0000 -0.0000 1.0000 33 | vn -0.0000 0.0000 -1.0000 34 | vn 0.0000 -1.0000 0.0000 35 | vn -0.8655 0.5010 0.0000 36 | vn -1.0000 0.0000 0.0000 37 | vn 1.0000 0.0000 0.0000 38 | vn 0.8619 0.5071 0.0000 39 | usemtl Material.002 40 | s off 41 | f 2/1/1 4/2/1 3/3/1 42 | f 7/4/1 2/1/1 1/5/1 43 | f 7/4/1 4/2/1 2/1/1 44 | f 7/4/1 6/6/1 4/2/1 45 | f 6/6/1 5/7/1 4/2/1 46 | f 9/8/2 10/9/2 11/10/2 47 | f 14/11/2 8/12/2 9/8/2 48 | f 14/11/2 9/8/2 11/10/2 49 | f 14/11/2 11/10/2 13/13/2 50 | f 13/13/2 11/10/2 12/14/2 51 | f 2/1/3 3/3/3 10/9/3 9/8/3 52 | f 3/3/4 4/2/4 11/10/4 10/9/4 53 | f 7/4/3 1/5/3 8/12/3 14/11/3 54 | f 1/5/5 2/1/5 9/8/5 8/12/5 55 | f 6/6/6 7/4/6 14/11/6 13/13/6 56 | f 5/7/3 6/6/3 13/13/3 12/14/3 57 | f 4/2/7 5/7/7 12/14/7 11/10/7 58 | -------------------------------------------------------------------------------- /example/Assets/arrow.obj.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cb5d654324f42494d9a9f6086f740b77 3 | ModelImporter: 4 | serializedVersion: 19301 5 | internalIDToNameTable: [] 6 | externalObjects: {} 7 | materials: 8 | materialImportMode: 1 9 | materialName: 0 10 | materialSearch: 1 11 | materialLocation: 1 12 | animations: 13 | legacyGenerateAnimations: 4 14 | bakeSimulation: 0 15 | resampleCurves: 1 16 | optimizeGameObjects: 0 17 | motionNodeName: 18 | rigImportErrors: 19 | rigImportWarnings: 20 | animationImportErrors: 21 | animationImportWarnings: 22 | animationRetargetingWarnings: 23 | animationDoRetargetingWarnings: 0 24 | importAnimatedCustomProperties: 0 25 | importConstraints: 0 26 | animationCompression: 1 27 | animationRotationError: 0.5 28 | animationPositionError: 0.5 29 | animationScaleError: 0.5 30 | animationWrapMode: 0 31 | extraExposedTransformPaths: [] 32 | extraUserProperties: [] 33 | clipAnimations: [] 34 | isReadable: 0 35 | meshes: 36 | lODScreenPercentages: [] 37 | globalScale: 1 38 | meshCompression: 0 39 | addColliders: 0 40 | useSRGBMaterialColor: 1 41 | sortHierarchyByName: 1 42 | importVisibility: 1 43 | importBlendShapes: 1 44 | importCameras: 1 45 | importLights: 1 46 | fileIdsGeneration: 2 47 | swapUVChannels: 0 48 | generateSecondaryUV: 0 49 | useFileUnits: 1 50 | keepQuads: 0 51 | weldVertices: 1 52 | preserveHierarchy: 0 53 | skinWeightsMode: 0 54 | maxBonesPerVertex: 4 55 | minBoneWeight: 0.001 56 | meshOptimizationFlags: -1 57 | indexFormat: 0 58 | secondaryUVAngleDistortion: 8 59 | secondaryUVAreaDistortion: 15.000001 60 | secondaryUVHardAngle: 88 61 | secondaryUVPackMargin: 4 62 | useFileScale: 1 63 | tangentSpace: 64 | normalSmoothAngle: 60 65 | normalImportMode: 0 66 | tangentImportMode: 3 67 | normalCalculationMode: 4 68 | legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 69 | blendShapeNormalImportMode: 1 70 | normalSmoothingSource: 0 71 | referencedClips: [] 72 | importAnimation: 1 73 | humanDescription: 74 | serializedVersion: 3 75 | human: [] 76 | skeleton: [] 77 | armTwist: 0.5 78 | foreArmTwist: 0.5 79 | upperLegTwist: 0.5 80 | legTwist: 0.5 81 | armStretch: 0.05 82 | legStretch: 0.05 83 | feetSpacing: 0 84 | globalScale: 1 85 | rootMotionBoneName: 86 | hasTranslationDoF: 0 87 | hasExtraRoot: 0 88 | skeletonHasParents: 1 89 | lastHumanDescriptionAvatarSource: {instanceID: 0} 90 | autoGenerateAvatarMappingIfUnspecified: 1 91 | animationType: 2 92 | humanoidOversampling: 1 93 | avatarSetup: 0 94 | additionalBone: 0 95 | userData: 96 | assetBundleName: 97 | assetBundleVariant: 98 | -------------------------------------------------------------------------------- /example/Assets/arrow_stylish.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.91.0 OBJ File: 'arrow-yellow.blend' 2 | # www.blender.org 3 | mtllib arrow-yellow1.mtl 4 | o icon_positionArrow.001_icon_positionArrow 5 | v -0.151619 -0.191035 -0.000000 6 | v -0.151619 -0.194138 -0.000000 7 | v -0.150474 -0.198154 -0.000000 8 | v -0.135433 -0.206733 -0.000000 9 | v -0.147368 -0.202717 -0.000000 10 | v -0.131019 -0.205090 -0.000000 11 | v -0.124970 -0.202352 -0.000000 12 | v -0.105352 -0.191583 -0.000000 13 | v -0.134289 -0.139379 -0.000000 14 | v 0.140371 -0.164021 -0.000000 15 | v 0.084948 -0.006133 -0.000000 16 | v 0.086746 -0.182274 -0.000000 17 | v 0.007946 0.209069 0.000000 18 | v -0.008730 0.207609 0.000000 19 | v 0.009907 0.207061 0.000000 20 | v -0.001373 0.212902 0.000000 21 | v -0.004153 0.211625 0.000000 22 | v 0.001406 0.212537 0.000000 23 | v 0.012196 0.203228 0.000000 24 | v -0.012490 0.201403 0.000000 25 | v 0.015302 0.196292 0.000000 26 | v -0.015597 0.194649 0.000000 27 | v -0.019357 0.185523 0.000000 28 | v 0.025275 0.168547 0.000000 29 | v -0.029657 0.158509 0.000000 30 | v -0.087695 -0.005038 -0.000000 31 | v 0.144621 -0.176981 -0.000000 32 | v 0.108327 -0.194686 -0.000000 33 | v 0.148381 -0.191035 -0.000000 34 | v 0.124185 -0.203082 -0.000000 35 | v 0.131215 -0.206368 -0.000000 36 | v 0.148381 -0.193956 -0.000000 37 | v 0.138899 -0.206368 -0.000000 38 | v 0.147237 -0.199067 -0.000000 39 | v 0.143967 -0.203812 -0.000000 40 | v 0.133995 -0.206915 -0.000000 41 | v -0.000883 -0.128975 -0.000000 42 | v -0.143117 -0.205820 -0.000000 43 | v -0.139520 -0.207098 -0.000000 44 | v -0.150474 -0.198154 -0.060000 45 | v -0.151619 -0.194138 -0.060000 46 | v -0.151619 -0.191035 -0.060000 47 | v -0.147368 -0.202717 -0.060000 48 | v -0.135433 -0.206733 -0.060000 49 | v -0.131019 -0.205090 -0.060000 50 | v -0.134289 -0.139379 -0.060000 51 | v -0.105352 -0.191583 -0.060000 52 | v -0.124970 -0.202352 -0.060000 53 | v 0.086746 -0.182274 -0.060000 54 | v 0.084948 -0.006133 -0.060000 55 | v 0.140371 -0.164021 -0.060000 56 | v 0.009907 0.207061 -0.060000 57 | v -0.008730 0.207609 -0.060000 58 | v 0.007946 0.209069 -0.060000 59 | v 0.001406 0.212537 -0.060000 60 | v -0.004153 0.211625 -0.060000 61 | v -0.001373 0.212902 -0.060000 62 | v 0.012196 0.203228 -0.060000 63 | v -0.012490 0.201403 -0.060000 64 | v 0.015302 0.196292 -0.060000 65 | v -0.015597 0.194649 -0.060000 66 | v -0.019357 0.185523 -0.060000 67 | v 0.025275 0.168547 -0.060000 68 | v -0.029657 0.158509 -0.060000 69 | v -0.087695 -0.005038 -0.060000 70 | v 0.108327 -0.194686 -0.060000 71 | v 0.144621 -0.176981 -0.060000 72 | v 0.131215 -0.206368 -0.060000 73 | v 0.124185 -0.203082 -0.060000 74 | v 0.148381 -0.191035 -0.060000 75 | v 0.147237 -0.199067 -0.060000 76 | v 0.138899 -0.206368 -0.060000 77 | v 0.148381 -0.193956 -0.060000 78 | v 0.143967 -0.203812 -0.060000 79 | v 0.133995 -0.206915 -0.060000 80 | v -0.000883 -0.128975 -0.060000 81 | v -0.143117 -0.205820 -0.060000 82 | v -0.139520 -0.207098 -0.060000 83 | vn 0.0000 -0.0000 1.0000 84 | vn -0.0000 0.0000 -1.0000 85 | vn -0.5896 -0.8077 0.0000 86 | vn -0.8267 -0.5627 0.0000 87 | vn -0.9617 -0.2741 0.0000 88 | vn -1.0000 0.0000 0.0000 89 | vn -0.9481 0.3181 0.0000 90 | vn -0.9448 0.3277 0.0000 91 | vn -0.9424 0.3344 0.0000 92 | vn -0.9344 0.3563 0.0000 93 | vn -0.9246 0.3809 0.0000 94 | vn -0.9085 0.4179 0.0000 95 | vn -0.8553 0.5182 0.0000 96 | vn -0.6594 0.7518 0.0000 97 | vn -0.4177 0.9086 0.0000 98 | vn 0.1302 0.9915 0.0000 99 | vn 0.4685 0.8835 0.0000 100 | vn 0.7153 0.6989 0.0000 101 | vn 0.8586 0.5127 0.0000 102 | vn 0.9127 0.4087 0.0000 103 | vn 0.9411 0.3383 0.0000 104 | vn 0.9463 0.3233 0.0000 105 | vn 0.9436 0.3312 0.0000 106 | vn 0.9502 0.3117 0.0000 107 | vn 0.9660 0.2585 0.0000 108 | vn 0.9660 0.2584 0.0000 109 | vn 1.0000 0.0000 0.0000 110 | vn 0.9758 -0.2185 0.0000 111 | vn 0.8235 -0.5674 0.0000 112 | vn 0.4502 -0.8929 0.0000 113 | vn 0.1110 -0.9938 0.0000 114 | vn -0.1934 -0.9811 0.0000 115 | vn -0.4234 -0.9059 0.0000 116 | vn -0.4679 -0.8838 0.0000 117 | vn -0.4986 -0.8668 0.0000 118 | vn -0.5197 -0.8544 0.0000 119 | vn 0.5141 -0.8578 0.0000 120 | vn 0.4812 -0.8766 0.0000 121 | vn 0.4123 -0.9110 0.0000 122 | vn 0.3488 -0.9372 0.0000 123 | vn 0.0890 -0.9960 0.0000 124 | vn -0.3347 -0.9423 0.0000 125 | usemtl dfff00 126 | s 1 127 | f 1//1 2//1 3//1 128 | f 4//1 1//1 5//1 129 | f 1//1 3//1 5//1 130 | f 4//1 6//1 1//1 131 | f 7//1 8//1 9//1 132 | f 10//1 11//1 12//1 133 | f 13//1 14//1 15//1 134 | f 16//1 17//1 18//1 135 | f 18//1 17//1 13//1 136 | f 13//1 17//1 14//1 137 | f 15//1 14//1 19//1 138 | f 19//1 14//1 20//1 139 | f 21//1 19//1 20//1 140 | f 22//1 21//1 20//1 141 | f 22//1 23//1 21//1 142 | f 21//1 23//1 24//1 143 | f 24//1 23//1 25//1 144 | f 11//1 24//1 25//1 145 | f 26//1 11//1 25//1 146 | f 27//1 10//1 28//1 147 | f 29//1 30//1 31//1 148 | f 32//1 33//1 34//1 149 | f 34//1 33//1 35//1 150 | f 32//1 29//1 33//1 151 | f 33//1 29//1 36//1 152 | f 36//1 29//1 31//1 153 | f 29//1 27//1 30//1 154 | f 9//1 8//1 37//1 155 | f 30//1 27//1 28//1 156 | f 28//1 10//1 12//1 157 | f 12//1 11//1 37//1 158 | f 9//1 37//1 26//1 159 | f 37//1 11//1 26//1 160 | f 7//1 9//1 1//1 161 | f 6//1 7//1 1//1 162 | f 4//1 5//1 38//1 163 | f 39//1 4//1 38//1 164 | f 40//2 41//2 42//2 165 | f 43//2 42//2 44//2 166 | f 43//2 40//2 42//2 167 | f 42//2 45//2 44//2 168 | f 46//2 47//2 48//2 169 | f 49//2 50//2 51//2 170 | f 52//2 53//2 54//2 171 | f 55//2 56//2 57//2 172 | f 54//2 56//2 55//2 173 | f 53//2 56//2 54//2 174 | f 58//2 53//2 52//2 175 | f 59//2 53//2 58//2 176 | f 59//2 58//2 60//2 177 | f 59//2 60//2 61//2 178 | f 60//2 62//2 61//2 179 | f 63//2 62//2 60//2 180 | f 64//2 62//2 63//2 181 | f 64//2 63//2 50//2 182 | f 64//2 50//2 65//2 183 | f 66//2 51//2 67//2 184 | f 68//2 69//2 70//2 185 | f 71//2 72//2 73//2 186 | f 74//2 72//2 71//2 187 | f 72//2 70//2 73//2 188 | f 75//2 70//2 72//2 189 | f 68//2 70//2 75//2 190 | f 69//2 67//2 70//2 191 | f 76//2 47//2 46//2 192 | f 66//2 67//2 69//2 193 | f 49//2 51//2 66//2 194 | f 76//2 50//2 49//2 195 | f 65//2 76//2 46//2 196 | f 65//2 50//2 76//2 197 | f 42//2 46//2 48//2 198 | f 42//2 48//2 45//2 199 | f 77//2 43//2 44//2 200 | f 77//2 44//2 78//2 201 | f 5//3 77//3 38//3 202 | f 5//3 43//3 77//3 203 | f 3//4 43//4 5//4 204 | f 3//4 40//4 43//4 205 | f 2//5 40//5 3//5 206 | f 2//5 41//5 40//5 207 | f 1//6 41//6 2//6 208 | f 1//6 42//6 41//6 209 | f 9//7 42//7 1//7 210 | f 9//7 46//7 42//7 211 | f 26//8 46//8 9//8 212 | f 26//8 65//8 46//8 213 | f 25//9 65//9 26//9 214 | f 25//9 64//9 65//9 215 | f 23//10 64//10 25//10 216 | f 23//10 62//10 64//10 217 | f 22//11 62//11 23//11 218 | f 22//11 61//11 62//11 219 | f 20//12 61//12 22//12 220 | f 20//12 59//12 61//12 221 | f 14//13 59//13 20//13 222 | f 14//13 53//13 59//13 223 | f 17//14 53//14 14//14 224 | f 17//14 56//14 53//14 225 | f 16//15 56//15 17//15 226 | f 16//15 57//15 56//15 227 | f 18//16 57//16 16//16 228 | f 18//16 55//16 57//16 229 | f 13//17 55//17 18//17 230 | f 13//17 54//17 55//17 231 | f 15//18 54//18 13//18 232 | f 15//18 52//18 54//18 233 | f 19//19 52//19 15//19 234 | f 19//19 58//19 52//19 235 | f 21//20 58//20 19//20 236 | f 21//20 60//20 58//20 237 | f 24//21 60//21 21//21 238 | f 24//21 63//21 60//21 239 | f 11//22 63//22 24//22 240 | f 11//22 50//22 63//22 241 | f 10//23 50//23 11//23 242 | f 10//23 51//23 50//23 243 | f 27//24 51//24 10//24 244 | f 27//24 67//24 51//24 245 | f 29//25 67//26 27//25 246 | f 29//25 70//26 67//26 247 | f 32//27 70//27 29//27 248 | f 32//27 73//27 70//27 249 | f 34//28 73//28 32//28 250 | f 34//28 71//28 73//28 251 | f 35//29 71//29 34//29 252 | f 35//29 74//29 71//29 253 | f 33//30 74//30 35//30 254 | f 33//30 72//30 74//30 255 | f 36//31 72//31 33//31 256 | f 36//31 75//31 72//31 257 | f 31//32 75//32 36//32 258 | f 31//32 68//32 75//32 259 | f 30//33 68//33 31//33 260 | f 30//33 69//33 68//33 261 | f 28//34 69//34 30//34 262 | f 28//34 66//34 69//34 263 | f 12//35 66//35 28//35 264 | f 12//35 49//35 66//35 265 | f 37//36 49//36 12//36 266 | f 37//36 76//36 49//36 267 | f 8//37 76//37 37//37 268 | f 8//37 47//37 76//37 269 | f 7//38 47//38 8//38 270 | f 7//38 48//38 47//38 271 | f 6//39 48//39 7//39 272 | f 6//39 45//39 48//39 273 | f 4//40 45//40 6//40 274 | f 4//40 44//40 45//40 275 | f 39//41 44//41 4//41 276 | f 39//41 78//41 44//41 277 | f 38//42 78//42 39//42 278 | f 38//42 77//42 78//42 279 | -------------------------------------------------------------------------------- /example/Assets/arrow_stylish.obj.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bbcbc7a02c8d2412db311923574a960c 3 | ModelImporter: 4 | serializedVersion: 20200 5 | internalIDToNameTable: [] 6 | externalObjects: {} 7 | materials: 8 | materialImportMode: 2 9 | materialName: 0 10 | materialSearch: 1 11 | materialLocation: 1 12 | animations: 13 | legacyGenerateAnimations: 4 14 | bakeSimulation: 0 15 | resampleCurves: 1 16 | optimizeGameObjects: 0 17 | motionNodeName: 18 | rigImportErrors: 19 | rigImportWarnings: 20 | animationImportErrors: 21 | animationImportWarnings: 22 | animationRetargetingWarnings: 23 | animationDoRetargetingWarnings: 0 24 | importAnimatedCustomProperties: 0 25 | importConstraints: 0 26 | animationCompression: 1 27 | animationRotationError: 0.5 28 | animationPositionError: 0.5 29 | animationScaleError: 0.5 30 | animationWrapMode: 0 31 | extraExposedTransformPaths: [] 32 | extraUserProperties: [] 33 | clipAnimations: [] 34 | isReadable: 0 35 | meshes: 36 | lODScreenPercentages: [] 37 | globalScale: 1 38 | meshCompression: 0 39 | addColliders: 0 40 | useSRGBMaterialColor: 1 41 | sortHierarchyByName: 1 42 | importVisibility: 1 43 | importBlendShapes: 1 44 | importCameras: 1 45 | importLights: 1 46 | fileIdsGeneration: 2 47 | swapUVChannels: 0 48 | generateSecondaryUV: 0 49 | useFileUnits: 1 50 | keepQuads: 0 51 | weldVertices: 1 52 | bakeAxisConversion: 0 53 | preserveHierarchy: 0 54 | skinWeightsMode: 0 55 | maxBonesPerVertex: 4 56 | minBoneWeight: 0.001 57 | meshOptimizationFlags: -1 58 | indexFormat: 0 59 | secondaryUVAngleDistortion: 8 60 | secondaryUVAreaDistortion: 15.000001 61 | secondaryUVHardAngle: 88 62 | secondaryUVMarginMethod: 1 63 | secondaryUVMinLightmapResolution: 40 64 | secondaryUVMinObjectScale: 1 65 | secondaryUVPackMargin: 4 66 | useFileScale: 1 67 | tangentSpace: 68 | normalSmoothAngle: 60 69 | normalImportMode: 0 70 | tangentImportMode: 3 71 | normalCalculationMode: 4 72 | legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 73 | blendShapeNormalImportMode: 1 74 | normalSmoothingSource: 0 75 | referencedClips: [] 76 | importAnimation: 1 77 | humanDescription: 78 | serializedVersion: 3 79 | human: [] 80 | skeleton: [] 81 | armTwist: 0.5 82 | foreArmTwist: 0.5 83 | upperLegTwist: 0.5 84 | legTwist: 0.5 85 | armStretch: 0.05 86 | legStretch: 0.05 87 | feetSpacing: 0 88 | globalScale: 1 89 | rootMotionBoneName: 90 | hasTranslationDoF: 0 91 | hasExtraRoot: 0 92 | skeletonHasParents: 1 93 | lastHumanDescriptionAvatarSource: {instanceID: 0} 94 | autoGenerateAvatarMappingIfUnspecified: 1 95 | animationType: 2 96 | humanoidOversampling: 1 97 | avatarSetup: 0 98 | addHumanoidExtraRootOnlyWhenUsingAvatar: 1 99 | additionalBone: 0 100 | userData: 101 | assetBundleName: 102 | assetBundleVariant: 103 | -------------------------------------------------------------------------------- /example/Assets/compass material.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: compass material 11 | m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _BumpMap: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - _DetailAlbedoMap: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | - _DetailMask: 31 | m_Texture: {fileID: 0} 32 | m_Scale: {x: 1, y: 1} 33 | m_Offset: {x: 0, y: 0} 34 | - _DetailNormalMap: 35 | m_Texture: {fileID: 0} 36 | m_Scale: {x: 1, y: 1} 37 | m_Offset: {x: 0, y: 0} 38 | - _EmissionMap: 39 | m_Texture: {fileID: 0} 40 | m_Scale: {x: 1, y: 1} 41 | m_Offset: {x: 0, y: 0} 42 | - _MainTex: 43 | m_Texture: {fileID: 0} 44 | m_Scale: {x: 1, y: 1} 45 | m_Offset: {x: 0, y: 0} 46 | - _MetallicGlossMap: 47 | m_Texture: {fileID: 0} 48 | m_Scale: {x: 1, y: 1} 49 | m_Offset: {x: 0, y: 0} 50 | - _OcclusionMap: 51 | m_Texture: {fileID: 0} 52 | m_Scale: {x: 1, y: 1} 53 | m_Offset: {x: 0, y: 0} 54 | - _ParallaxMap: 55 | m_Texture: {fileID: 0} 56 | m_Scale: {x: 1, y: 1} 57 | m_Offset: {x: 0, y: 0} 58 | m_Floats: 59 | - _BumpScale: 1 60 | - _Cutoff: 0.5 61 | - _DetailNormalMapScale: 1 62 | - _DstBlend: 0 63 | - _GlossMapScale: 1 64 | - _Glossiness: 0.5 65 | - _GlossyReflections: 1 66 | - _Metallic: 0 67 | - _Mode: 0 68 | - _OcclusionStrength: 1 69 | - _Parallax: 0.02 70 | - _SmoothnessTextureChannel: 0 71 | - _SpecularHighlights: 1 72 | - _SrcBlend: 1 73 | - _UVSec: 0 74 | - _ZWrite: 1 75 | m_Colors: 76 | - _Color: {r: 0, g: 0.49019608, b: 1, a: 1} 77 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} 78 | m_BuildTextureStacks: [] 79 | -------------------------------------------------------------------------------- /example/Assets/compass material.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 03f0b7088a12e4e16b9a4ec65757aec9 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /example/Assets/examplescene.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 019c77a6f1122477097d179919314747 3 | timeCreated: 1504697561 4 | licenseType: Pro 5 | DefaultImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /example/Assets/finish material.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: finish material 11 | m_Shader: {fileID: 10752, guid: 0000000000000000f000000000000000, type: 0} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _BumpMap: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - _DetailAlbedoMap: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | - _DetailMask: 31 | m_Texture: {fileID: 0} 32 | m_Scale: {x: 1, y: 1} 33 | m_Offset: {x: 0, y: 0} 34 | - _DetailNormalMap: 35 | m_Texture: {fileID: 0} 36 | m_Scale: {x: 1, y: 1} 37 | m_Offset: {x: 0, y: 0} 38 | - _EmissionMap: 39 | m_Texture: {fileID: 0} 40 | m_Scale: {x: 1, y: 1} 41 | m_Offset: {x: 0, y: 0} 42 | - _MainTex: 43 | m_Texture: {fileID: 2800000, guid: 3d45effa5567c4d9183bc5ecac8ec8bb, type: 3} 44 | m_Scale: {x: 1, y: 1} 45 | m_Offset: {x: 0, y: 0} 46 | - _MetallicGlossMap: 47 | m_Texture: {fileID: 0} 48 | m_Scale: {x: 1, y: 1} 49 | m_Offset: {x: 0, y: 0} 50 | - _OcclusionMap: 51 | m_Texture: {fileID: 0} 52 | m_Scale: {x: 1, y: 1} 53 | m_Offset: {x: 0, y: 0} 54 | - _ParallaxMap: 55 | m_Texture: {fileID: 0} 56 | m_Scale: {x: 1, y: 1} 57 | m_Offset: {x: 0, y: 0} 58 | m_Floats: 59 | - _BumpScale: 1 60 | - _Cutoff: 0.5 61 | - _DetailNormalMapScale: 1 62 | - _DstBlend: 0 63 | - _GlossMapScale: 1 64 | - _Glossiness: 0.5 65 | - _GlossyReflections: 1 66 | - _Metallic: 0 67 | - _Mode: 0 68 | - _OcclusionStrength: 1 69 | - _Parallax: 0.02 70 | - _SmoothnessTextureChannel: 0 71 | - _SpecularHighlights: 1 72 | - _SrcBlend: 1 73 | - _UVSec: 0 74 | - _ZWrite: 1 75 | m_Colors: 76 | - _Color: {r: 0.7686275, g: 0.7686275, b: 0.7686275, a: 1} 77 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} 78 | -------------------------------------------------------------------------------- /example/Assets/finish material.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 00c9aa637b75d4495bb0cfc6ef291e6d 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /example/Assets/finish texture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndoorAtlas/unity-plugin/4c6659bce5ee936bdb2c4393010fc852ba640289/example/Assets/finish texture.png -------------------------------------------------------------------------------- /example/Assets/finish texture.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3d45effa5567c4d9183bc5ecac8ec8bb 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: -1 36 | mipBias: -100 37 | wrapU: -1 38 | wrapV: -1 39 | wrapW: -1 40 | nPOTScale: 1 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 0 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 0 53 | spriteTessellationDetail: -1 54 | textureType: 0 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | applyGammaDecoding: 0 61 | platformSettings: 62 | - serializedVersion: 3 63 | buildTarget: DefaultTexturePlatform 64 | maxTextureSize: 2048 65 | resizeAlgorithm: 0 66 | textureFormat: -1 67 | textureCompression: 1 68 | compressionQuality: 50 69 | crunchedCompression: 0 70 | allowsAlphaSplitting: 0 71 | overridden: 0 72 | androidETC2FallbackOverride: 0 73 | forceMaximumCompressionQuality_BC6H_BC7: 0 74 | spriteSheet: 75 | serializedVersion: 2 76 | sprites: [] 77 | outline: [] 78 | physicsShape: [] 79 | bones: [] 80 | spriteID: 81 | internalID: 0 82 | vertices: [] 83 | indices: 84 | edges: [] 85 | weights: [] 86 | secondaryTextures: [] 87 | spritePackingTag: 88 | pSDRemoveMatte: 0 89 | pSDShowRemoveMatteOption: 0 90 | userData: 91 | assetBundleName: 92 | assetBundleVariant: 93 | -------------------------------------------------------------------------------- /example/Assets/finish.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.83.1 OBJ File: 'finish.blend' 2 | # www.blender.org 3 | mtllib finish.mtl 4 | o Finish_Cylinder.001 5 | v -0.054288 -0.379301 -0.030486 6 | v -0.054288 0.248064 -0.030486 7 | v -0.032731 -0.379301 -0.021557 8 | v -0.032731 0.248064 -0.021557 9 | v -0.023802 -0.379301 0.000000 10 | v -0.023802 0.248064 0.000000 11 | v -0.032731 -0.379301 0.021557 12 | v -0.032731 0.248064 0.021557 13 | v -0.054288 -0.379301 0.030486 14 | v -0.054288 0.248064 0.030486 15 | v -0.075845 -0.379301 0.021557 16 | v -0.075845 0.248064 0.021557 17 | v -0.084775 -0.379301 -0.000000 18 | v -0.084775 0.248064 -0.000000 19 | v -0.075845 -0.379301 -0.021557 20 | v -0.075845 0.248064 -0.021557 21 | v 0.032251 -0.026142 -0.015110 22 | v 0.032251 -0.026142 0.015110 23 | v -0.032251 0.049276 -0.015110 24 | v -0.032251 -0.015226 -0.015110 25 | v -0.032251 -0.015226 0.015110 26 | v 0.096752 -0.024267 -0.015110 27 | v 0.161254 0.051666 -0.015110 28 | v 0.161254 -0.012836 -0.015110 29 | v 0.161254 -0.012836 0.015110 30 | v 0.096752 0.040235 -0.015110 31 | v 0.096752 -0.024267 0.015110 32 | v 0.225756 0.051770 -0.015110 33 | v 0.225756 -0.012731 -0.015110 34 | v 0.225756 0.051770 0.015110 35 | v 0.225756 -0.012731 0.015110 36 | v 0.290257 -0.024227 -0.015110 37 | v 0.354759 0.032251 -0.015110 38 | v 0.290257 0.040275 0.015110 39 | v 0.290257 -0.024227 0.015110 40 | v 0.419261 0.032251 -0.015110 41 | v 0.419261 -0.032251 -0.015110 42 | v 0.419261 0.032251 0.015110 43 | v 0.419261 -0.032251 0.015110 44 | v 0.354759 -0.032251 -0.015110 45 | v 0.354759 0.032251 0.015110 46 | v 0.354759 -0.032251 0.015110 47 | v 0.032251 0.038359 0.015110 48 | v -0.032251 0.113778 -0.015110 49 | v -0.032251 0.049276 0.015110 50 | v 0.096752 0.104736 -0.015110 51 | v 0.032251 0.038359 -0.015110 52 | v 0.032251 0.102861 0.015110 53 | v 0.161254 0.051666 0.015110 54 | v 0.096752 0.040235 0.015110 55 | v 0.161254 0.116167 -0.015110 56 | v 0.290257 0.104776 -0.015110 57 | v 0.290257 0.040275 -0.015110 58 | v 0.419261 0.096752 -0.015110 59 | v 0.032251 0.102861 -0.015110 60 | v -0.032251 0.178279 0.015110 61 | v -0.032251 0.113778 0.015110 62 | v 0.096752 0.104736 0.015110 63 | v 0.161254 0.180669 0.015110 64 | v 0.161254 0.116167 0.015110 65 | v 0.096752 0.169238 0.015110 66 | v 0.225756 0.180773 -0.015110 67 | v 0.225756 0.116272 -0.015110 68 | v 0.290257 0.104776 0.015110 69 | v 0.225756 0.180773 0.015110 70 | v 0.225756 0.116272 0.015110 71 | v 0.354759 0.096752 -0.015110 72 | v 0.419261 0.096752 0.015110 73 | v 0.354759 0.096752 0.015110 74 | v 0.032251 0.231864 0.015110 75 | v -0.032251 0.242781 -0.015110 76 | v -0.032251 0.178279 -0.015110 77 | v -0.032251 0.242781 0.015110 78 | v 0.032251 0.231864 -0.015110 79 | v 0.032251 0.167363 -0.015110 80 | v 0.032251 0.167363 0.015110 81 | v 0.161254 0.180669 -0.015110 82 | v 0.161254 0.245171 0.015110 83 | v 0.096752 0.233740 -0.015110 84 | v 0.096752 0.169238 -0.015110 85 | v 0.096752 0.233740 0.015110 86 | v 0.225756 0.245275 -0.015110 87 | v 0.161254 0.245171 -0.015110 88 | v 0.290257 0.169278 -0.015110 89 | v 0.290257 0.233780 0.015110 90 | v 0.225756 0.245275 0.015110 91 | v 0.354759 0.225756 -0.015110 92 | v 0.290257 0.233780 -0.015110 93 | v 0.290257 0.169278 0.015110 94 | v 0.419261 0.225756 -0.015110 95 | v 0.419261 0.161254 -0.015110 96 | v 0.419261 0.225756 0.015110 97 | v 0.419261 0.161254 0.015110 98 | v 0.354759 0.161254 -0.015110 99 | v 0.354759 0.225756 0.015110 100 | v 0.354759 0.161254 0.015110 101 | vt 0.274485 0.452109 102 | vt 0.284538 0.452109 103 | vt 0.291647 0.454553 104 | vt 0.291647 0.458009 105 | vt 0.284538 0.460453 106 | vt 0.274485 0.460453 107 | vt 0.267376 0.458009 108 | vt 0.267376 0.454553 109 | vt 0.274485 0.443766 110 | vt 0.284538 0.443766 111 | vt 0.291647 0.446209 112 | vt 0.291647 0.449665 113 | vt 0.284538 0.452109 114 | vt 0.274485 0.452109 115 | vt 0.267376 0.449665 116 | vt 0.267376 0.446209 117 | vt 0.054191 0.470609 118 | vt 0.062103 0.423862 119 | vt 0.110188 0.423862 120 | vt 0.102277 0.470609 121 | vt 0.000000 0.000000 122 | vt 0.000000 0.249926 123 | vt 0.142954 0.249989 124 | vt 0.142933 0.000000 125 | vt 0.102277 0.492822 126 | vt 0.054191 0.492822 127 | vt 0.110188 0.539568 128 | vt 0.062103 0.539568 129 | vt 0.749732 0.468727 130 | vt 0.748127 0.413546 131 | vt 0.803355 0.413546 132 | vt 0.804959 0.468727 133 | vt 0.804959 0.494591 134 | vt 0.749732 0.494591 135 | vt 0.803355 0.549772 136 | vt 0.748127 0.549772 137 | vt 0.192040 0.498917 138 | vt 0.145356 0.507190 139 | vt 0.145356 0.459040 140 | vt 0.192040 0.450767 141 | vt 0.214253 0.450767 142 | vt 0.214253 0.498917 143 | vt 0.260936 0.459040 144 | vt 0.260936 0.507190 145 | vt 0.860451 0.494614 146 | vt 0.860540 0.549818 147 | vt 0.805336 0.549818 148 | vt 0.805247 0.494614 149 | vt 0.805247 0.468750 150 | vt 0.860451 0.468750 151 | vt 0.805336 0.413546 152 | vt 0.860540 0.413546 153 | vt 0.145356 0.381631 154 | vt 0.153675 0.334956 155 | vt 0.201833 0.334956 156 | vt 0.193514 0.381631 157 | vt 0.193514 0.403844 158 | vt 0.145356 0.403844 159 | vt 0.201833 0.450520 160 | vt 0.153675 0.450520 161 | vt 0.744524 0.494174 162 | vt 0.737710 0.548955 163 | vt 0.682080 0.548955 164 | vt 0.688895 0.494174 165 | vt 0.688895 0.468309 166 | vt 0.744524 0.468309 167 | vt 0.682080 0.413527 168 | vt 0.737710 0.413527 169 | vt 0.105212 0.371360 170 | vt 0.088280 0.334956 171 | vt 0.145109 0.334956 172 | vt 0.145109 0.391785 173 | vt 0.122839 0.415033 174 | vt 0.098697 0.380461 175 | vt 0.063077 0.353752 176 | vt 0.054191 0.423616 177 | vt 0.748127 0.550059 178 | vt 0.802557 0.559271 179 | vt 0.802557 0.615261 180 | vt 0.748127 0.606049 181 | vt 0.680431 0.130727 182 | vt 0.680431 0.380660 183 | vt 0.823661 0.380714 184 | vt 0.823385 0.130789 185 | vt 0.859677 0.606095 186 | vt 0.805247 0.615307 187 | vt 0.805247 0.559318 188 | vt 0.859677 0.550106 189 | vt 0.310969 0.565058 190 | vt 0.358360 0.563681 191 | vt 0.358360 0.611112 192 | vt 0.310969 0.612489 193 | vt 0.101582 0.645294 194 | vt 0.054191 0.643916 195 | vt 0.054191 0.596485 196 | vt 0.101582 0.597863 197 | vt 0.736437 0.605307 198 | vt 0.682080 0.614940 199 | vt 0.682080 0.558876 200 | vt 0.736437 0.549243 201 | vt 0.630288 0.582910 202 | vt 0.575931 0.573277 203 | vt 0.575931 0.517213 204 | vt 0.630288 0.526846 205 | vt 0.358380 0.660147 206 | vt 0.310969 0.660224 207 | vt 0.310969 0.612813 208 | vt 0.358380 0.612736 209 | vt 0.239698 0.665044 210 | vt 0.192287 0.664968 211 | vt 0.192287 0.617557 212 | vt 0.239698 0.617633 213 | vt 0.868460 0.410487 214 | vt 0.814112 0.400801 215 | vt 0.814112 0.344728 216 | vt 0.868460 0.354413 217 | vt 0.868460 0.334754 218 | vt 0.814112 0.344440 219 | vt 0.814112 0.288366 220 | vt 0.868460 0.278680 221 | vt 0.296050 0.388585 222 | vt 0.249002 0.382732 223 | vt 0.249002 0.334956 224 | vt 0.296050 0.340808 225 | vt 0.343346 0.382732 226 | vt 0.296297 0.388585 227 | vt 0.296297 0.340808 228 | vt 0.343346 0.334956 229 | vt 0.860828 0.494615 230 | vt 0.916032 0.494615 231 | vt 0.916032 0.549819 232 | vt 0.860828 0.549819 233 | vt 0.860828 0.468750 234 | vt 0.916032 0.468750 235 | vt 0.860828 0.413546 236 | vt 0.916032 0.413546 237 | vt 0.192287 0.561313 238 | vt 0.239033 0.569224 239 | vt 0.239033 0.617310 240 | vt 0.192287 0.609398 241 | vt 0.000000 0.499859 242 | vt 0.000000 0.749661 243 | vt 0.143428 0.749666 244 | vt 0.143230 0.499913 245 | vt 0.357715 0.555522 246 | vt 0.310969 0.563434 247 | vt 0.310969 0.515348 248 | vt 0.357715 0.507437 249 | vt 0.737261 0.670455 250 | vt 0.682080 0.672059 251 | vt 0.682080 0.616832 252 | vt 0.737261 0.615228 253 | vt 0.631111 0.640029 254 | vt 0.575931 0.638425 255 | vt 0.575931 0.583198 256 | vt 0.631111 0.584802 257 | vt 0.054191 0.548088 258 | vt 0.100875 0.539815 259 | vt 0.100875 0.587965 260 | vt 0.054191 0.596238 261 | vt 0.192040 0.617736 262 | vt 0.145356 0.609463 263 | vt 0.145356 0.561313 264 | vt 0.192040 0.569586 265 | vt 0.805247 0.670799 266 | vt 0.805247 0.615595 267 | vt 0.860451 0.615684 268 | vt 0.860451 0.670888 269 | vt 0.803331 0.670842 270 | vt 0.748127 0.670752 271 | vt 0.748127 0.615548 272 | vt 0.803331 0.615637 273 | vt 0.248755 0.448156 274 | vt 0.202080 0.439837 275 | vt 0.202080 0.391679 276 | vt 0.248755 0.399998 277 | vt 0.202080 0.343274 278 | vt 0.248755 0.334956 279 | vt 0.248755 0.383114 280 | vt 0.202080 0.391432 281 | vt 0.923529 0.403856 282 | vt 0.868748 0.397042 283 | vt 0.868748 0.341412 284 | vt 0.923529 0.348227 285 | vt 0.868748 0.285495 286 | vt 0.923529 0.278680 287 | vt 0.923529 0.334310 288 | vt 0.868748 0.341125 289 | vt 0.356329 0.437566 290 | vt 0.308918 0.437566 291 | vt 0.308918 0.390155 292 | vt 0.356329 0.390155 293 | vt 0.356329 0.459779 294 | vt 0.308918 0.459779 295 | vt 0.356329 0.507190 296 | vt 0.308918 0.507190 297 | vt 0.631920 0.462495 298 | vt 0.575931 0.462495 299 | vt 0.575931 0.436631 300 | vt 0.631920 0.436631 301 | vt 0.641132 0.382201 302 | vt 0.585143 0.382201 303 | vt 0.680431 0.630462 304 | vt 0.680431 0.880538 305 | vt 0.824000 0.880538 306 | vt 0.823858 0.630467 307 | vt 0.585143 0.516925 308 | vt 0.641132 0.516925 309 | vt 0.261913 0.554828 310 | vt 0.309344 0.554828 311 | vt 0.309344 0.577041 312 | vt 0.261913 0.577041 313 | vt 0.263291 0.624432 314 | vt 0.310722 0.624432 315 | vt 0.310722 0.507437 316 | vt 0.263291 0.507437 317 | vt 0.748127 0.333037 318 | vt 0.804192 0.333037 319 | vt 0.804192 0.358902 320 | vt 0.748127 0.358902 321 | vt 0.757761 0.413259 322 | vt 0.813825 0.413259 323 | vt 0.813825 0.278680 324 | vt 0.757761 0.278680 325 | vt 0.261183 0.437566 326 | vt 0.308594 0.437566 327 | vt 0.308594 0.459779 328 | vt 0.261183 0.459779 329 | vt 0.261260 0.507190 330 | vt 0.308671 0.507190 331 | vt 0.308671 0.390155 332 | vt 0.261260 0.390155 333 | vt 0.738154 0.358892 334 | vt 0.682080 0.358892 335 | vt 0.682080 0.333028 336 | vt 0.738154 0.333028 337 | vt 0.747840 0.278680 338 | vt 0.691766 0.278680 339 | vt 0.691766 0.413240 340 | vt 0.747840 0.413240 341 | vt 0.192404 0.555213 342 | vt 0.192404 0.507437 343 | vt 0.214618 0.507437 344 | vt 0.214618 0.555213 345 | vt 0.261666 0.561066 346 | vt 0.261666 0.513290 347 | vt 0.145356 0.513290 348 | vt 0.145356 0.561066 349 | vt 0.635338 0.321068 350 | vt 0.681793 0.344851 351 | vt 0.655863 0.371920 352 | vt 0.627752 0.331666 353 | vt 0.586277 0.300566 354 | vt 0.575931 0.381913 355 | vt 0.615622 0.278680 356 | vt 0.681793 0.278680 357 | vt 0.267376 0.443766 358 | vt 0.267376 0.536687 359 | vt 0.257322 0.536687 360 | vt 0.257322 0.443766 361 | vt 0.222997 0.443766 362 | vt 0.222997 0.536687 363 | vt 0.215888 0.536687 364 | vt 0.215888 0.443766 365 | vt 0.205834 0.536687 366 | vt 0.205834 0.443766 367 | vt 0.198725 0.536687 368 | vt 0.198725 0.443766 369 | vt 0.257322 0.443766 370 | vt 0.257322 0.536687 371 | vt 0.247269 0.536687 372 | vt 0.247269 0.443766 373 | vt 0.240160 0.536687 374 | vt 0.240160 0.443766 375 | vt 0.222997 0.536687 376 | vt 0.222997 0.443766 377 | vt 0.233051 0.443766 378 | vt 0.233051 0.536687 379 | vt 0.240159 0.443766 380 | vt 0.240160 0.536687 381 | vn 0.0000 1.0000 -0.0000 382 | vn 0.0000 -1.0000 0.0000 383 | vn 0.0000 0.0000 1.0000 384 | vn -1.0000 0.0000 0.0000 385 | vn -0.1669 -0.9860 0.0000 386 | vn 0.0000 0.0000 -1.0000 387 | vn 0.0291 -0.9996 0.0000 388 | vn 0.1745 -0.9847 0.0000 389 | vn 0.0016 -1.0000 0.0000 390 | vn -0.1755 -0.9845 0.0000 391 | vn -0.1234 -0.9924 0.0000 392 | vn 1.0000 0.0000 0.0000 393 | vn 0.1669 0.9860 0.0000 394 | vn -0.0291 0.9996 0.0000 395 | vn -0.1745 0.9847 0.0000 396 | vn -0.0016 1.0000 0.0000 397 | vn 0.1755 0.9845 0.0000 398 | vn 0.1234 0.9924 0.0000 399 | vn 0.0000 -0.6302 -0.7764 400 | vn 0.0000 0.6302 -0.7764 401 | vn 0.5490 0.6302 -0.5490 402 | vn 0.5490 -0.6302 -0.5490 403 | vn 0.7764 0.6302 0.0000 404 | vn 0.7764 -0.6302 0.0000 405 | vn 0.5490 0.6302 0.5490 406 | vn 0.5490 -0.6302 0.5490 407 | vn 0.0000 0.6302 0.7764 408 | vn 0.0000 -0.6302 0.7764 409 | vn -0.5490 0.6302 0.5490 410 | vn -0.5490 -0.6302 0.5490 411 | vn -0.7764 0.6302 0.0000 412 | vn -0.7764 -0.6302 0.0000 413 | vn -0.5490 0.6302 -0.5490 414 | vn -0.5490 -0.6302 -0.5490 415 | g Finish_Cylinder.001_Texture 416 | usemtl Texture 417 | s off 418 | f 4/1/1 2/2/1 16/3/1 14/4/1 12/5/1 10/6/1 8/7/1 6/8/1 419 | f 1/9/2 3/10/2 5/11/2 7/12/2 9/13/2 11/14/2 13/15/2 15/16/2 420 | f 18/17/3 43/18/3 45/19/3 21/20/3 421 | f 21/21/4 45/22/4 19/23/4 20/24/4 422 | f 20/25/5 17/26/5 18/17/5 21/20/5 423 | f 20/25/6 19/27/6 47/28/6 17/26/6 424 | f 27/29/3 50/30/3 43/31/3 18/32/3 425 | f 17/33/7 22/34/7 27/29/7 18/32/7 426 | f 17/33/6 47/35/6 26/36/6 22/34/6 427 | f 25/37/3 49/38/3 50/39/3 27/40/3 428 | f 22/41/8 24/42/8 25/37/8 27/40/8 429 | f 22/41/6 26/43/6 23/44/6 24/42/6 430 | f 31/45/3 30/46/3 49/47/3 25/48/3 431 | f 24/49/9 29/50/9 31/45/9 25/48/9 432 | f 24/49/6 23/51/6 28/52/6 29/50/6 433 | f 35/53/3 34/54/3 30/55/3 31/56/3 434 | f 29/57/10 32/58/10 35/53/10 31/56/10 435 | f 29/57/6 28/59/6 53/60/6 32/58/6 436 | f 42/61/3 41/62/3 34/63/3 35/64/3 437 | f 32/65/11 40/66/11 42/61/11 35/64/11 438 | f 32/65/6 53/67/6 33/68/6 40/66/6 439 | f 39/69/3 38/70/3 41/71/3 42/72/3 440 | f 40/73/2 37/74/2 39/69/2 42/72/2 441 | f 37/74/12 36/75/12 38/70/12 39/69/12 442 | f 40/73/6 33/76/6 36/75/6 37/74/6 443 | f 43/77/3 48/78/3 57/79/3 45/80/3 444 | f 45/81/4 57/82/4 44/83/4 19/84/4 445 | f 19/85/6 44/86/6 55/87/6 47/88/6 446 | f 50/89/3 58/90/3 48/91/3 43/92/3 447 | f 47/93/6 55/94/6 46/95/6 26/96/6 448 | f 49/97/3 60/98/3 58/99/3 50/100/3 449 | f 26/101/6 46/102/6 51/103/6 23/104/6 450 | f 30/105/3 66/106/3 60/107/3 49/108/3 451 | f 23/109/6 51/110/6 63/111/6 28/112/6 452 | f 34/113/3 64/114/3 66/115/3 30/116/3 453 | f 28/117/6 63/118/6 52/119/6 53/120/6 454 | f 41/121/3 69/122/3 64/123/3 34/124/3 455 | f 53/125/6 52/126/6 67/127/6 33/128/6 456 | f 38/129/3 68/130/3 69/131/3 41/132/3 457 | f 36/133/12 54/134/12 68/130/12 38/129/12 458 | f 33/135/6 67/136/6 54/134/6 36/133/6 459 | f 48/137/3 76/138/3 56/139/3 57/140/3 460 | f 57/141/4 56/142/4 72/143/4 44/144/4 461 | f 44/145/6 72/146/6 75/147/6 55/148/6 462 | f 58/149/3 61/150/3 76/151/3 48/152/3 463 | f 55/153/6 75/154/6 80/155/6 46/156/6 464 | f 60/157/3 59/158/3 61/159/3 58/160/3 465 | f 46/161/6 80/162/6 77/163/6 51/164/6 466 | f 66/165/3 65/166/3 59/167/3 60/168/3 467 | f 51/169/6 77/170/6 62/171/6 63/172/6 468 | f 64/173/3 89/174/3 65/175/3 66/176/3 469 | f 63/177/6 62/178/6 84/179/6 52/180/6 470 | f 69/181/3 96/182/3 89/183/3 64/184/3 471 | f 52/185/6 84/186/6 94/187/6 67/188/6 472 | f 68/189/3 93/190/3 96/191/3 69/192/3 473 | f 54/193/12 91/194/12 93/190/12 68/189/12 474 | f 67/195/6 94/196/6 91/194/6 54/193/6 475 | f 74/197/13 71/198/13 73/199/13 70/200/13 476 | f 76/201/3 70/200/3 73/199/3 56/202/3 477 | f 56/203/4 73/204/4 71/205/4 72/206/4 478 | f 72/207/6 71/198/6 74/197/6 75/208/6 479 | f 79/209/14 74/210/14 70/211/14 81/212/14 480 | f 61/213/3 81/212/3 70/211/3 76/214/3 481 | f 75/215/6 74/210/6 79/209/6 80/216/6 482 | f 83/217/15 79/218/15 81/219/15 78/220/15 483 | f 59/221/3 78/220/3 81/219/3 61/222/3 484 | f 80/223/6 79/218/6 83/217/6 77/224/6 485 | f 82/225/16 83/226/16 78/227/16 86/228/16 486 | f 65/229/3 86/228/3 78/227/3 59/230/3 487 | f 77/231/6 83/226/6 82/225/6 62/232/6 488 | f 88/233/17 82/234/17 86/235/17 85/236/17 489 | f 89/237/3 85/236/3 86/235/3 65/238/3 490 | f 62/239/6 82/234/6 88/233/6 84/240/6 491 | f 87/241/18 88/242/18 85/243/18 95/244/18 492 | f 96/245/3 95/244/3 85/243/3 89/246/3 493 | f 84/247/6 88/242/6 87/241/6 94/248/6 494 | f 90/249/1 87/250/1 95/251/1 92/252/1 495 | f 93/253/3 92/252/3 95/251/3 96/254/3 496 | f 91/255/12 90/249/12 92/252/12 93/253/12 497 | f 94/256/6 87/250/6 90/249/6 91/255/6 498 | s 1 499 | f 1/257/19 2/258/20 4/259/21 3/260/22 500 | f 3/261/22 4/262/21 6/263/23 5/264/24 501 | f 5/264/24 6/263/23 8/265/25 7/266/26 502 | f 7/266/26 8/265/25 10/267/27 9/268/28 503 | f 9/269/28 10/270/27 12/271/29 11/272/30 504 | f 11/272/30 12/271/29 14/273/31 13/274/32 505 | f 13/275/32 14/276/31 16/277/33 15/278/34 506 | f 15/278/34 16/277/33 2/279/20 1/280/19 507 | -------------------------------------------------------------------------------- /example/Assets/finish.obj.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7f03c4f8152a84ca1922df2d21a49594 3 | ModelImporter: 4 | serializedVersion: 19301 5 | internalIDToNameTable: [] 6 | externalObjects: 7 | - first: 8 | type: UnityEngine:Material 9 | assembly: UnityEngine.CoreModule 10 | name: Finish_Cylinder.001_TextureMat 11 | second: {fileID: -2583296935827431017, guid: 7f03c4f8152a84ca1922df2d21a49594, 12 | type: 3} 13 | materials: 14 | materialImportMode: 1 15 | materialName: 0 16 | materialSearch: 1 17 | materialLocation: 1 18 | animations: 19 | legacyGenerateAnimations: 4 20 | bakeSimulation: 0 21 | resampleCurves: 1 22 | optimizeGameObjects: 0 23 | motionNodeName: 24 | rigImportErrors: 25 | rigImportWarnings: 26 | animationImportErrors: 27 | animationImportWarnings: 28 | animationRetargetingWarnings: 29 | animationDoRetargetingWarnings: 0 30 | importAnimatedCustomProperties: 0 31 | importConstraints: 0 32 | animationCompression: 1 33 | animationRotationError: 0.5 34 | animationPositionError: 0.5 35 | animationScaleError: 0.5 36 | animationWrapMode: 0 37 | extraExposedTransformPaths: [] 38 | extraUserProperties: [] 39 | clipAnimations: [] 40 | isReadable: 0 41 | meshes: 42 | lODScreenPercentages: [] 43 | globalScale: 1 44 | meshCompression: 0 45 | addColliders: 0 46 | useSRGBMaterialColor: 1 47 | sortHierarchyByName: 1 48 | importVisibility: 1 49 | importBlendShapes: 1 50 | importCameras: 1 51 | importLights: 1 52 | fileIdsGeneration: 2 53 | swapUVChannels: 0 54 | generateSecondaryUV: 0 55 | useFileUnits: 1 56 | keepQuads: 0 57 | weldVertices: 1 58 | preserveHierarchy: 0 59 | skinWeightsMode: 0 60 | maxBonesPerVertex: 4 61 | minBoneWeight: 0.001 62 | meshOptimizationFlags: -1 63 | indexFormat: 0 64 | secondaryUVAngleDistortion: 8 65 | secondaryUVAreaDistortion: 15.000001 66 | secondaryUVHardAngle: 88 67 | secondaryUVPackMargin: 4 68 | useFileScale: 1 69 | tangentSpace: 70 | normalSmoothAngle: 60 71 | normalImportMode: 0 72 | tangentImportMode: 3 73 | normalCalculationMode: 4 74 | legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 75 | blendShapeNormalImportMode: 1 76 | normalSmoothingSource: 0 77 | referencedClips: [] 78 | importAnimation: 1 79 | humanDescription: 80 | serializedVersion: 3 81 | human: [] 82 | skeleton: [] 83 | armTwist: 0.5 84 | foreArmTwist: 0.5 85 | upperLegTwist: 0.5 86 | legTwist: 0.5 87 | armStretch: 0.05 88 | legStretch: 0.05 89 | feetSpacing: 0 90 | globalScale: 1 91 | rootMotionBoneName: 92 | hasTranslationDoF: 0 93 | hasExtraRoot: 0 94 | skeletonHasParents: 1 95 | lastHumanDescriptionAvatarSource: {instanceID: 0} 96 | autoGenerateAvatarMappingIfUnspecified: 1 97 | animationType: 2 98 | humanoidOversampling: 1 99 | avatarSetup: 0 100 | additionalBone: 0 101 | userData: 102 | assetBundleName: 103 | assetBundleVariant: 104 | -------------------------------------------------------------------------------- /example/Assets/template.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_PrefabParentObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: template 10 | m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} 11 | m_ShaderKeywords: _EMISSION 12 | m_LightmapFlags: 1 13 | m_EnableInstancingVariants: 0 14 | m_DoubleSidedGI: 0 15 | m_CustomRenderQueue: -1 16 | stringTagMap: {} 17 | disabledShaderPasses: [] 18 | m_SavedProperties: 19 | serializedVersion: 3 20 | m_TexEnvs: 21 | - _BumpMap: 22 | m_Texture: {fileID: 0} 23 | m_Scale: {x: 1, y: 1} 24 | m_Offset: {x: 0, y: 0} 25 | - _DetailAlbedoMap: 26 | m_Texture: {fileID: 0} 27 | m_Scale: {x: 1, y: 1} 28 | m_Offset: {x: 0, y: 0} 29 | - _DetailMask: 30 | m_Texture: {fileID: 0} 31 | m_Scale: {x: 1, y: 1} 32 | m_Offset: {x: 0, y: 0} 33 | - _DetailNormalMap: 34 | m_Texture: {fileID: 0} 35 | m_Scale: {x: 1, y: 1} 36 | m_Offset: {x: 0, y: 0} 37 | - _EmissionMap: 38 | m_Texture: {fileID: 0} 39 | m_Scale: {x: 1, y: 1} 40 | m_Offset: {x: 0, y: 0} 41 | - _MainTex: 42 | m_Texture: {fileID: 0} 43 | m_Scale: {x: 1, y: 1} 44 | m_Offset: {x: 0, y: 0} 45 | - _MetallicGlossMap: 46 | m_Texture: {fileID: 0} 47 | m_Scale: {x: 1, y: 1} 48 | m_Offset: {x: 0, y: 0} 49 | - _OcclusionMap: 50 | m_Texture: {fileID: 0} 51 | m_Scale: {x: 1, y: 1} 52 | m_Offset: {x: 0, y: 0} 53 | - _ParallaxMap: 54 | m_Texture: {fileID: 0} 55 | m_Scale: {x: 1, y: 1} 56 | m_Offset: {x: 0, y: 0} 57 | m_Floats: 58 | - _BumpScale: 1 59 | - _Cutoff: 0.5 60 | - _DetailNormalMapScale: 1 61 | - _DstBlend: 0 62 | - _GlossMapScale: 1 63 | - _Glossiness: 0.965 64 | - _GlossyReflections: 1 65 | - _Metallic: 0.041 66 | - _Mode: 0 67 | - _OcclusionStrength: 1 68 | - _Parallax: 0.02 69 | - _SmoothnessTextureChannel: 0 70 | - _SpecularHighlights: 1 71 | - _SrcBlend: 1 72 | - _UVSec: 0 73 | - _ZWrite: 1 74 | m_Colors: 75 | - _Color: {r: 0, g: 0, b: 0, a: 1} 76 | - _EmissionColor: {r: 0.037, g: 0.05, b: 0.013, a: 1} 77 | -------------------------------------------------------------------------------- /example/Assets/template.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8136b0bf3458e4ef7a0c0da1328129ac 3 | timeCreated: 1505125267 4 | licenseType: Pro 5 | NativeFormatImporter: 6 | mainObjectFileID: 2100000 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /example/Assets/turn material.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: turn material 11 | m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _BumpMap: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - _DetailAlbedoMap: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | - _DetailMask: 31 | m_Texture: {fileID: 0} 32 | m_Scale: {x: 1, y: 1} 33 | m_Offset: {x: 0, y: 0} 34 | - _DetailNormalMap: 35 | m_Texture: {fileID: 0} 36 | m_Scale: {x: 1, y: 1} 37 | m_Offset: {x: 0, y: 0} 38 | - _EmissionMap: 39 | m_Texture: {fileID: 0} 40 | m_Scale: {x: 1, y: 1} 41 | m_Offset: {x: 0, y: 0} 42 | - _MainTex: 43 | m_Texture: {fileID: 0} 44 | m_Scale: {x: 1, y: 1} 45 | m_Offset: {x: 0, y: 0} 46 | - _MetallicGlossMap: 47 | m_Texture: {fileID: 0} 48 | m_Scale: {x: 1, y: 1} 49 | m_Offset: {x: 0, y: 0} 50 | - _OcclusionMap: 51 | m_Texture: {fileID: 0} 52 | m_Scale: {x: 1, y: 1} 53 | m_Offset: {x: 0, y: 0} 54 | - _ParallaxMap: 55 | m_Texture: {fileID: 0} 56 | m_Scale: {x: 1, y: 1} 57 | m_Offset: {x: 0, y: 0} 58 | m_Floats: 59 | - _BumpScale: 1 60 | - _Cutoff: 0.5 61 | - _DetailNormalMapScale: 1 62 | - _DstBlend: 0 63 | - _GlossMapScale: 1 64 | - _Glossiness: 0.5 65 | - _GlossyReflections: 1 66 | - _Metallic: 0 67 | - _Mode: 0 68 | - _OcclusionStrength: 1 69 | - _Parallax: 0.02 70 | - _SmoothnessTextureChannel: 0 71 | - _SpecularHighlights: 1 72 | - _SrcBlend: 1 73 | - _UVSec: 0 74 | - _ZWrite: 1 75 | m_Colors: 76 | - _Color: {r: 1, g: 0.78115857, b: 0, a: 1} 77 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} 78 | m_BuildTextureStacks: [] 79 | -------------------------------------------------------------------------------- /example/Assets/turn material.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2f2c5125deae9446ca45c506d561deda 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /example/Packages/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.unity.ugui": "1.0.0", 4 | "com.unity.xr.arcore": "4.2.7", 5 | "com.unity.xr.arfoundation": "4.2.7", 6 | "com.unity.xr.arkit": "4.2.7", 7 | "com.unity.xr.management": "4.2.0", 8 | "com.unity.modules.ai": "1.0.0", 9 | "com.unity.modules.androidjni": "1.0.0", 10 | "com.unity.modules.animation": "1.0.0", 11 | "com.unity.modules.assetbundle": "1.0.0", 12 | "com.unity.modules.audio": "1.0.0", 13 | "com.unity.modules.cloth": "1.0.0", 14 | "com.unity.modules.director": "1.0.0", 15 | "com.unity.modules.imageconversion": "1.0.0", 16 | "com.unity.modules.imgui": "1.0.0", 17 | "com.unity.modules.jsonserialize": "1.0.0", 18 | "com.unity.modules.particlesystem": "1.0.0", 19 | "com.unity.modules.physics": "1.0.0", 20 | "com.unity.modules.physics2d": "1.0.0", 21 | "com.unity.modules.screencapture": "1.0.0", 22 | "com.unity.modules.terrain": "1.0.0", 23 | "com.unity.modules.terrainphysics": "1.0.0", 24 | "com.unity.modules.tilemap": "1.0.0", 25 | "com.unity.modules.ui": "1.0.0", 26 | "com.unity.modules.uielements": "1.0.0", 27 | "com.unity.modules.umbra": "1.0.0", 28 | "com.unity.modules.unityanalytics": "1.0.0", 29 | "com.unity.modules.unitywebrequest": "1.0.0", 30 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0", 31 | "com.unity.modules.unitywebrequestaudio": "1.0.0", 32 | "com.unity.modules.unitywebrequesttexture": "1.0.0", 33 | "com.unity.modules.unitywebrequestwww": "1.0.0", 34 | "com.unity.modules.vehicles": "1.0.0", 35 | "com.unity.modules.video": "1.0.0", 36 | "com.unity.modules.vr": "1.0.0", 37 | "com.unity.modules.wind": "1.0.0", 38 | "com.unity.modules.xr": "1.0.0" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /example/Packages/packages-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.unity.editorcoroutines": { 4 | "version": "1.0.0", 5 | "depth": 1, 6 | "source": "registry", 7 | "dependencies": {}, 8 | "url": "https://packages.unity.com" 9 | }, 10 | "com.unity.subsystemregistration": { 11 | "version": "1.1.0", 12 | "depth": 1, 13 | "source": "registry", 14 | "dependencies": { 15 | "com.unity.modules.subsystems": "1.0.0" 16 | }, 17 | "url": "https://packages.unity.com" 18 | }, 19 | "com.unity.ugui": { 20 | "version": "1.0.0", 21 | "depth": 0, 22 | "source": "builtin", 23 | "dependencies": { 24 | "com.unity.modules.ui": "1.0.0", 25 | "com.unity.modules.imgui": "1.0.0" 26 | } 27 | }, 28 | "com.unity.xr.arcore": { 29 | "version": "4.2.7", 30 | "depth": 0, 31 | "source": "registry", 32 | "dependencies": { 33 | "com.unity.xr.arsubsystems": "4.2.7", 34 | "com.unity.xr.management": "4.0.1", 35 | "com.unity.modules.androidjni": "1.0.0", 36 | "com.unity.modules.unitywebrequest": "1.0.0" 37 | }, 38 | "url": "https://packages.unity.com" 39 | }, 40 | "com.unity.xr.arfoundation": { 41 | "version": "4.2.7", 42 | "depth": 0, 43 | "source": "registry", 44 | "dependencies": { 45 | "com.unity.xr.arsubsystems": "4.2.7", 46 | "com.unity.xr.management": "4.0.1", 47 | "com.unity.modules.particlesystem": "1.0.0" 48 | }, 49 | "url": "https://packages.unity.com" 50 | }, 51 | "com.unity.xr.arkit": { 52 | "version": "4.2.7", 53 | "depth": 0, 54 | "source": "registry", 55 | "dependencies": { 56 | "com.unity.editorcoroutines": "1.0.0", 57 | "com.unity.xr.arsubsystems": "4.2.7", 58 | "com.unity.xr.management": "4.0.1" 59 | }, 60 | "url": "https://packages.unity.com" 61 | }, 62 | "com.unity.xr.arsubsystems": { 63 | "version": "4.2.7", 64 | "depth": 1, 65 | "source": "registry", 66 | "dependencies": { 67 | "com.unity.subsystemregistration": "1.1.0", 68 | "com.unity.xr.management": "4.0.1" 69 | }, 70 | "url": "https://packages.unity.com" 71 | }, 72 | "com.unity.xr.legacyinputhelpers": { 73 | "version": "2.1.10", 74 | "depth": 1, 75 | "source": "registry", 76 | "dependencies": { 77 | "com.unity.modules.vr": "1.0.0", 78 | "com.unity.modules.xr": "1.0.0" 79 | }, 80 | "url": "https://packages.unity.com" 81 | }, 82 | "com.unity.xr.management": { 83 | "version": "4.2.0", 84 | "depth": 0, 85 | "source": "registry", 86 | "dependencies": { 87 | "com.unity.modules.subsystems": "1.0.0", 88 | "com.unity.modules.vr": "1.0.0", 89 | "com.unity.modules.xr": "1.0.0", 90 | "com.unity.xr.legacyinputhelpers": "2.1.7", 91 | "com.unity.subsystemregistration": "1.0.6" 92 | }, 93 | "url": "https://packages.unity.com" 94 | }, 95 | "com.unity.modules.ai": { 96 | "version": "1.0.0", 97 | "depth": 0, 98 | "source": "builtin", 99 | "dependencies": {} 100 | }, 101 | "com.unity.modules.androidjni": { 102 | "version": "1.0.0", 103 | "depth": 0, 104 | "source": "builtin", 105 | "dependencies": {} 106 | }, 107 | "com.unity.modules.animation": { 108 | "version": "1.0.0", 109 | "depth": 0, 110 | "source": "builtin", 111 | "dependencies": {} 112 | }, 113 | "com.unity.modules.assetbundle": { 114 | "version": "1.0.0", 115 | "depth": 0, 116 | "source": "builtin", 117 | "dependencies": {} 118 | }, 119 | "com.unity.modules.audio": { 120 | "version": "1.0.0", 121 | "depth": 0, 122 | "source": "builtin", 123 | "dependencies": {} 124 | }, 125 | "com.unity.modules.cloth": { 126 | "version": "1.0.0", 127 | "depth": 0, 128 | "source": "builtin", 129 | "dependencies": { 130 | "com.unity.modules.physics": "1.0.0" 131 | } 132 | }, 133 | "com.unity.modules.director": { 134 | "version": "1.0.0", 135 | "depth": 0, 136 | "source": "builtin", 137 | "dependencies": { 138 | "com.unity.modules.audio": "1.0.0", 139 | "com.unity.modules.animation": "1.0.0" 140 | } 141 | }, 142 | "com.unity.modules.imageconversion": { 143 | "version": "1.0.0", 144 | "depth": 0, 145 | "source": "builtin", 146 | "dependencies": {} 147 | }, 148 | "com.unity.modules.imgui": { 149 | "version": "1.0.0", 150 | "depth": 0, 151 | "source": "builtin", 152 | "dependencies": {} 153 | }, 154 | "com.unity.modules.jsonserialize": { 155 | "version": "1.0.0", 156 | "depth": 0, 157 | "source": "builtin", 158 | "dependencies": {} 159 | }, 160 | "com.unity.modules.particlesystem": { 161 | "version": "1.0.0", 162 | "depth": 0, 163 | "source": "builtin", 164 | "dependencies": {} 165 | }, 166 | "com.unity.modules.physics": { 167 | "version": "1.0.0", 168 | "depth": 0, 169 | "source": "builtin", 170 | "dependencies": {} 171 | }, 172 | "com.unity.modules.physics2d": { 173 | "version": "1.0.0", 174 | "depth": 0, 175 | "source": "builtin", 176 | "dependencies": {} 177 | }, 178 | "com.unity.modules.screencapture": { 179 | "version": "1.0.0", 180 | "depth": 0, 181 | "source": "builtin", 182 | "dependencies": { 183 | "com.unity.modules.imageconversion": "1.0.0" 184 | } 185 | }, 186 | "com.unity.modules.subsystems": { 187 | "version": "1.0.0", 188 | "depth": 1, 189 | "source": "builtin", 190 | "dependencies": { 191 | "com.unity.modules.jsonserialize": "1.0.0" 192 | } 193 | }, 194 | "com.unity.modules.terrain": { 195 | "version": "1.0.0", 196 | "depth": 0, 197 | "source": "builtin", 198 | "dependencies": {} 199 | }, 200 | "com.unity.modules.terrainphysics": { 201 | "version": "1.0.0", 202 | "depth": 0, 203 | "source": "builtin", 204 | "dependencies": { 205 | "com.unity.modules.physics": "1.0.0", 206 | "com.unity.modules.terrain": "1.0.0" 207 | } 208 | }, 209 | "com.unity.modules.tilemap": { 210 | "version": "1.0.0", 211 | "depth": 0, 212 | "source": "builtin", 213 | "dependencies": { 214 | "com.unity.modules.physics2d": "1.0.0" 215 | } 216 | }, 217 | "com.unity.modules.ui": { 218 | "version": "1.0.0", 219 | "depth": 0, 220 | "source": "builtin", 221 | "dependencies": {} 222 | }, 223 | "com.unity.modules.uielements": { 224 | "version": "1.0.0", 225 | "depth": 0, 226 | "source": "builtin", 227 | "dependencies": { 228 | "com.unity.modules.ui": "1.0.0", 229 | "com.unity.modules.imgui": "1.0.0", 230 | "com.unity.modules.jsonserialize": "1.0.0", 231 | "com.unity.modules.uielementsnative": "1.0.0" 232 | } 233 | }, 234 | "com.unity.modules.uielementsnative": { 235 | "version": "1.0.0", 236 | "depth": 1, 237 | "source": "builtin", 238 | "dependencies": { 239 | "com.unity.modules.ui": "1.0.0", 240 | "com.unity.modules.imgui": "1.0.0", 241 | "com.unity.modules.jsonserialize": "1.0.0" 242 | } 243 | }, 244 | "com.unity.modules.umbra": { 245 | "version": "1.0.0", 246 | "depth": 0, 247 | "source": "builtin", 248 | "dependencies": {} 249 | }, 250 | "com.unity.modules.unityanalytics": { 251 | "version": "1.0.0", 252 | "depth": 0, 253 | "source": "builtin", 254 | "dependencies": { 255 | "com.unity.modules.unitywebrequest": "1.0.0", 256 | "com.unity.modules.jsonserialize": "1.0.0" 257 | } 258 | }, 259 | "com.unity.modules.unitywebrequest": { 260 | "version": "1.0.0", 261 | "depth": 0, 262 | "source": "builtin", 263 | "dependencies": {} 264 | }, 265 | "com.unity.modules.unitywebrequestassetbundle": { 266 | "version": "1.0.0", 267 | "depth": 0, 268 | "source": "builtin", 269 | "dependencies": { 270 | "com.unity.modules.assetbundle": "1.0.0", 271 | "com.unity.modules.unitywebrequest": "1.0.0" 272 | } 273 | }, 274 | "com.unity.modules.unitywebrequestaudio": { 275 | "version": "1.0.0", 276 | "depth": 0, 277 | "source": "builtin", 278 | "dependencies": { 279 | "com.unity.modules.unitywebrequest": "1.0.0", 280 | "com.unity.modules.audio": "1.0.0" 281 | } 282 | }, 283 | "com.unity.modules.unitywebrequesttexture": { 284 | "version": "1.0.0", 285 | "depth": 0, 286 | "source": "builtin", 287 | "dependencies": { 288 | "com.unity.modules.unitywebrequest": "1.0.0", 289 | "com.unity.modules.imageconversion": "1.0.0" 290 | } 291 | }, 292 | "com.unity.modules.unitywebrequestwww": { 293 | "version": "1.0.0", 294 | "depth": 0, 295 | "source": "builtin", 296 | "dependencies": { 297 | "com.unity.modules.unitywebrequest": "1.0.0", 298 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0", 299 | "com.unity.modules.unitywebrequestaudio": "1.0.0", 300 | "com.unity.modules.audio": "1.0.0", 301 | "com.unity.modules.assetbundle": "1.0.0", 302 | "com.unity.modules.imageconversion": "1.0.0" 303 | } 304 | }, 305 | "com.unity.modules.vehicles": { 306 | "version": "1.0.0", 307 | "depth": 0, 308 | "source": "builtin", 309 | "dependencies": { 310 | "com.unity.modules.physics": "1.0.0" 311 | } 312 | }, 313 | "com.unity.modules.video": { 314 | "version": "1.0.0", 315 | "depth": 0, 316 | "source": "builtin", 317 | "dependencies": { 318 | "com.unity.modules.audio": "1.0.0", 319 | "com.unity.modules.ui": "1.0.0", 320 | "com.unity.modules.unitywebrequest": "1.0.0" 321 | } 322 | }, 323 | "com.unity.modules.vr": { 324 | "version": "1.0.0", 325 | "depth": 0, 326 | "source": "builtin", 327 | "dependencies": { 328 | "com.unity.modules.jsonserialize": "1.0.0", 329 | "com.unity.modules.physics": "1.0.0", 330 | "com.unity.modules.xr": "1.0.0" 331 | } 332 | }, 333 | "com.unity.modules.wind": { 334 | "version": "1.0.0", 335 | "depth": 0, 336 | "source": "builtin", 337 | "dependencies": {} 338 | }, 339 | "com.unity.modules.xr": { 340 | "version": "1.0.0", 341 | "depth": 0, 342 | "source": "builtin", 343 | "dependencies": { 344 | "com.unity.modules.physics": "1.0.0", 345 | "com.unity.modules.jsonserialize": "1.0.0", 346 | "com.unity.modules.subsystems": "1.0.0" 347 | } 348 | } 349 | } 350 | } 351 | -------------------------------------------------------------------------------- /example/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 | m_Volume: 1 7 | Rolloff Scale: 1 8 | Doppler Factor: 1 9 | Default Speaker Mode: 2 10 | m_SampleRate: 0 11 | m_DSPBufferSize: 0 12 | m_VirtualVoiceCount: 512 13 | m_RealVoiceCount: 32 14 | m_SpatializerPlugin: 15 | m_AmbisonicDecoderPlugin: 16 | m_DisableAudio: 0 17 | m_VirtualizeEffects: 1 18 | -------------------------------------------------------------------------------- /example/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 | -------------------------------------------------------------------------------- /example/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: 3 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_EnablePCM: 1 18 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 19 | m_AutoSimulation: 1 20 | -------------------------------------------------------------------------------- /example/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 | m_configObjects: 9 | UnityEditor.XR.ARCore.ARCoreSettings: {fileID: 11400000, guid: b5fdb627fe96040a58c94277289a6790, 10 | type: 2} 11 | UnityEditor.XR.ARKit.ARKitSettings: {fileID: 11400000, guid: 13697a1c871294a5fa7dc2cb1ee9a591, 12 | type: 2} 13 | com.unity.xr.management.loader_settings: {fileID: 11400000, guid: 333d873be676d43348857333b9b2424f, 14 | type: 2} 15 | -------------------------------------------------------------------------------- /example/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: 1 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: 0 16 | m_EtcTextureFastCompressor: 2 17 | m_EtcTextureNormalCompressor: 2 18 | m_EtcTextureBestCompressor: 5 19 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;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: 1 30 | m_AssetPipelineMode: 1 31 | m_CacheServerMode: 0 32 | m_CacheServerEndpoint: 33 | m_CacheServerNamespacePrefix: default 34 | m_CacheServerEnableDownload: 1 35 | m_CacheServerEnableUpload: 1 36 | -------------------------------------------------------------------------------- /example/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 | - {fileID: 16003, guid: 0000000000000000f000000000000000, type: 0} 42 | m_PreloadedShaders: [] 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: 1 68 | -------------------------------------------------------------------------------- /example/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 | -------------------------------------------------------------------------------- /example/ProjectSettings/MemorySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!387306366 &1 4 | MemorySettings: 5 | m_ObjectHideFlags: 0 6 | m_EditorMemorySettings: 7 | m_MainAllocatorBlockSize: -1 8 | m_ThreadAllocatorBlockSize: -1 9 | m_MainGfxBlockSize: -1 10 | m_ThreadGfxBlockSize: -1 11 | m_CacheBlockSize: -1 12 | m_TypetreeBlockSize: -1 13 | m_ProfilerBlockSize: -1 14 | m_ProfilerEditorBlockSize: -1 15 | m_BucketAllocatorGranularity: -1 16 | m_BucketAllocatorBucketsCount: -1 17 | m_BucketAllocatorBlockSize: -1 18 | m_BucketAllocatorBlockCount: -1 19 | m_ProfilerBucketAllocatorGranularity: -1 20 | m_ProfilerBucketAllocatorBucketsCount: -1 21 | m_ProfilerBucketAllocatorBlockSize: -1 22 | m_ProfilerBucketAllocatorBlockCount: -1 23 | m_TempAllocatorSizeMain: -1 24 | m_JobTempAllocatorBlockSize: -1 25 | m_BackgroundJobTempAllocatorBlockSize: -1 26 | m_JobTempAllocatorReducedBlockSize: -1 27 | m_TempAllocatorSizeGIBakingWorker: -1 28 | m_TempAllocatorSizeNavMeshWorker: -1 29 | m_TempAllocatorSizeAudioWorker: -1 30 | m_TempAllocatorSizeCloudWorker: -1 31 | m_TempAllocatorSizeGfx: -1 32 | m_TempAllocatorSizeJobWorker: -1 33 | m_TempAllocatorSizeBackgroundWorker: -1 34 | m_TempAllocatorSizePreloadManager: -1 35 | m_PlatformMemorySettings: {} 36 | -------------------------------------------------------------------------------- /example/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 | m_SettingNames: 89 | - Humanoid 90 | -------------------------------------------------------------------------------- /example/ProjectSettings/NetworkManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!149 &1 4 | NetworkManager: 5 | m_ObjectHideFlags: 0 6 | m_DebugLevel: 0 7 | m_Sendrate: 15 8 | m_AssetToPrefab: {} 9 | -------------------------------------------------------------------------------- /example/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 | -------------------------------------------------------------------------------- /example/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: 3 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_AutoSimulation: 1 23 | m_QueriesHitTriggers: 1 24 | m_QueriesStartInColliders: 1 25 | m_ChangeStopsCallbacks: 0 26 | m_CallbacksOnDisable: 1 27 | m_AlwaysShowColliders: 0 28 | m_ShowColliderSleep: 1 29 | m_ShowColliderContacts: 0 30 | m_ShowColliderAABB: 0 31 | m_ContactArrowScale: 0.2 32 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} 33 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} 34 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} 35 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} 36 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 37 | -------------------------------------------------------------------------------- /example/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 | m_DefaultList: [] 7 | -------------------------------------------------------------------------------- /example/ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 2021.3.17f1 2 | m_EditorVersionWithRevision: 2021.3.17f1 (3e8111cac19d) 3 | -------------------------------------------------------------------------------- /example/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 | particleRaycastBudget: 4 33 | asyncUploadTimeSlice: 2 34 | asyncUploadBufferSize: 4 35 | resolutionScalingFixedDPIFactor: 1 36 | excludedTargetPlatforms: [] 37 | - serializedVersion: 2 38 | name: Low 39 | pixelLightCount: 0 40 | shadows: 0 41 | shadowResolution: 0 42 | shadowProjection: 1 43 | shadowCascades: 1 44 | shadowDistance: 20 45 | shadowNearPlaneOffset: 3 46 | shadowCascade2Split: 0.33333334 47 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 48 | shadowmaskMode: 0 49 | blendWeights: 2 50 | textureQuality: 0 51 | anisotropicTextures: 0 52 | antiAliasing: 0 53 | softParticles: 0 54 | softVegetation: 0 55 | realtimeReflectionProbes: 0 56 | billboardsFaceCameraPosition: 0 57 | vSyncCount: 0 58 | lodBias: 0.4 59 | maximumLODLevel: 0 60 | particleRaycastBudget: 16 61 | asyncUploadTimeSlice: 2 62 | asyncUploadBufferSize: 4 63 | resolutionScalingFixedDPIFactor: 1 64 | excludedTargetPlatforms: [] 65 | - serializedVersion: 2 66 | name: Medium 67 | pixelLightCount: 1 68 | shadows: 1 69 | shadowResolution: 0 70 | shadowProjection: 1 71 | shadowCascades: 1 72 | shadowDistance: 20 73 | shadowNearPlaneOffset: 3 74 | shadowCascade2Split: 0.33333334 75 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 76 | shadowmaskMode: 0 77 | blendWeights: 2 78 | textureQuality: 0 79 | anisotropicTextures: 1 80 | antiAliasing: 0 81 | softParticles: 0 82 | softVegetation: 0 83 | realtimeReflectionProbes: 0 84 | billboardsFaceCameraPosition: 0 85 | vSyncCount: 1 86 | lodBias: 0.7 87 | maximumLODLevel: 0 88 | particleRaycastBudget: 64 89 | asyncUploadTimeSlice: 2 90 | asyncUploadBufferSize: 4 91 | resolutionScalingFixedDPIFactor: 1 92 | excludedTargetPlatforms: [] 93 | - serializedVersion: 2 94 | name: High 95 | pixelLightCount: 2 96 | shadows: 2 97 | shadowResolution: 1 98 | shadowProjection: 1 99 | shadowCascades: 2 100 | shadowDistance: 40 101 | shadowNearPlaneOffset: 3 102 | shadowCascade2Split: 0.33333334 103 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 104 | shadowmaskMode: 1 105 | blendWeights: 2 106 | textureQuality: 0 107 | anisotropicTextures: 1 108 | antiAliasing: 0 109 | softParticles: 0 110 | softVegetation: 1 111 | realtimeReflectionProbes: 1 112 | billboardsFaceCameraPosition: 1 113 | vSyncCount: 1 114 | lodBias: 1 115 | maximumLODLevel: 0 116 | particleRaycastBudget: 256 117 | asyncUploadTimeSlice: 2 118 | asyncUploadBufferSize: 4 119 | resolutionScalingFixedDPIFactor: 1 120 | excludedTargetPlatforms: [] 121 | - serializedVersion: 2 122 | name: Very High 123 | pixelLightCount: 3 124 | shadows: 2 125 | shadowResolution: 2 126 | shadowProjection: 1 127 | shadowCascades: 2 128 | shadowDistance: 70 129 | shadowNearPlaneOffset: 3 130 | shadowCascade2Split: 0.33333334 131 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 132 | shadowmaskMode: 1 133 | blendWeights: 4 134 | textureQuality: 0 135 | anisotropicTextures: 2 136 | antiAliasing: 2 137 | softParticles: 1 138 | softVegetation: 1 139 | realtimeReflectionProbes: 1 140 | billboardsFaceCameraPosition: 1 141 | vSyncCount: 1 142 | lodBias: 1.5 143 | maximumLODLevel: 0 144 | particleRaycastBudget: 1024 145 | asyncUploadTimeSlice: 2 146 | asyncUploadBufferSize: 4 147 | resolutionScalingFixedDPIFactor: 1 148 | excludedTargetPlatforms: [] 149 | - serializedVersion: 2 150 | name: Ultra 151 | pixelLightCount: 4 152 | shadows: 2 153 | shadowResolution: 2 154 | shadowProjection: 1 155 | shadowCascades: 4 156 | shadowDistance: 150 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: 2 171 | maximumLODLevel: 0 172 | particleRaycastBudget: 4096 173 | asyncUploadTimeSlice: 2 174 | asyncUploadBufferSize: 4 175 | resolutionScalingFixedDPIFactor: 1 176 | excludedTargetPlatforms: [] 177 | m_PerPlatformDefaultQuality: 178 | Android: 2 179 | Nintendo 3DS: 5 180 | Nintendo Switch: 5 181 | PS4: 5 182 | PSM: 5 183 | PSP2: 2 184 | Samsung TV: 2 185 | Standalone: 5 186 | Tizen: 2 187 | Web: 5 188 | WebGL: 3 189 | WiiU: 5 190 | Windows Store Apps: 5 191 | XboxOne: 5 192 | iPhone: 2 193 | tvOS: 2 194 | -------------------------------------------------------------------------------- /example/ProjectSettings/SceneTemplateSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "templatePinStates": [], 3 | "dependencyTypeInfos": [ 4 | { 5 | "userAdded": false, 6 | "type": "UnityEngine.AnimationClip", 7 | "ignore": false, 8 | "defaultInstantiationMode": 0, 9 | "supportsModification": true 10 | }, 11 | { 12 | "userAdded": false, 13 | "type": "UnityEditor.Animations.AnimatorController", 14 | "ignore": false, 15 | "defaultInstantiationMode": 0, 16 | "supportsModification": true 17 | }, 18 | { 19 | "userAdded": false, 20 | "type": "UnityEngine.AnimatorOverrideController", 21 | "ignore": false, 22 | "defaultInstantiationMode": 0, 23 | "supportsModification": true 24 | }, 25 | { 26 | "userAdded": false, 27 | "type": "UnityEditor.Audio.AudioMixerController", 28 | "ignore": false, 29 | "defaultInstantiationMode": 0, 30 | "supportsModification": true 31 | }, 32 | { 33 | "userAdded": false, 34 | "type": "UnityEngine.ComputeShader", 35 | "ignore": true, 36 | "defaultInstantiationMode": 1, 37 | "supportsModification": true 38 | }, 39 | { 40 | "userAdded": false, 41 | "type": "UnityEngine.Cubemap", 42 | "ignore": false, 43 | "defaultInstantiationMode": 0, 44 | "supportsModification": true 45 | }, 46 | { 47 | "userAdded": false, 48 | "type": "UnityEngine.GameObject", 49 | "ignore": false, 50 | "defaultInstantiationMode": 0, 51 | "supportsModification": true 52 | }, 53 | { 54 | "userAdded": false, 55 | "type": "UnityEditor.LightingDataAsset", 56 | "ignore": false, 57 | "defaultInstantiationMode": 0, 58 | "supportsModification": false 59 | }, 60 | { 61 | "userAdded": false, 62 | "type": "UnityEngine.LightingSettings", 63 | "ignore": false, 64 | "defaultInstantiationMode": 0, 65 | "supportsModification": true 66 | }, 67 | { 68 | "userAdded": false, 69 | "type": "UnityEngine.Material", 70 | "ignore": false, 71 | "defaultInstantiationMode": 0, 72 | "supportsModification": true 73 | }, 74 | { 75 | "userAdded": false, 76 | "type": "UnityEditor.MonoScript", 77 | "ignore": true, 78 | "defaultInstantiationMode": 1, 79 | "supportsModification": true 80 | }, 81 | { 82 | "userAdded": false, 83 | "type": "UnityEngine.PhysicMaterial", 84 | "ignore": false, 85 | "defaultInstantiationMode": 0, 86 | "supportsModification": true 87 | }, 88 | { 89 | "userAdded": false, 90 | "type": "UnityEngine.PhysicsMaterial2D", 91 | "ignore": false, 92 | "defaultInstantiationMode": 0, 93 | "supportsModification": true 94 | }, 95 | { 96 | "userAdded": false, 97 | "type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile", 98 | "ignore": false, 99 | "defaultInstantiationMode": 0, 100 | "supportsModification": true 101 | }, 102 | { 103 | "userAdded": false, 104 | "type": "UnityEngine.Rendering.PostProcessing.PostProcessResources", 105 | "ignore": false, 106 | "defaultInstantiationMode": 0, 107 | "supportsModification": true 108 | }, 109 | { 110 | "userAdded": false, 111 | "type": "UnityEngine.Rendering.VolumeProfile", 112 | "ignore": false, 113 | "defaultInstantiationMode": 0, 114 | "supportsModification": true 115 | }, 116 | { 117 | "userAdded": false, 118 | "type": "UnityEditor.SceneAsset", 119 | "ignore": false, 120 | "defaultInstantiationMode": 0, 121 | "supportsModification": false 122 | }, 123 | { 124 | "userAdded": false, 125 | "type": "UnityEngine.Shader", 126 | "ignore": true, 127 | "defaultInstantiationMode": 1, 128 | "supportsModification": true 129 | }, 130 | { 131 | "userAdded": false, 132 | "type": "UnityEngine.ShaderVariantCollection", 133 | "ignore": true, 134 | "defaultInstantiationMode": 1, 135 | "supportsModification": true 136 | }, 137 | { 138 | "userAdded": false, 139 | "type": "UnityEngine.Texture", 140 | "ignore": false, 141 | "defaultInstantiationMode": 0, 142 | "supportsModification": true 143 | }, 144 | { 145 | "userAdded": false, 146 | "type": "UnityEngine.Texture2D", 147 | "ignore": false, 148 | "defaultInstantiationMode": 0, 149 | "supportsModification": true 150 | }, 151 | { 152 | "userAdded": false, 153 | "type": "UnityEngine.Timeline.TimelineAsset", 154 | "ignore": false, 155 | "defaultInstantiationMode": 0, 156 | "supportsModification": true 157 | } 158 | ], 159 | "defaultDependencyTypeInfo": { 160 | "userAdded": false, 161 | "type": "", 162 | "ignore": false, 163 | "defaultInstantiationMode": 1, 164 | "supportsModification": true 165 | }, 166 | "newSceneOverride": 0 167 | } -------------------------------------------------------------------------------- /example/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 | -------------------------------------------------------------------------------- /example/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 | -------------------------------------------------------------------------------- /example/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: 1 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_DashboardUrl: https://dashboard.unity3d.com 13 | m_TestInitMode: 0 14 | CrashReportingSettings: 15 | m_EventUrl: https://perf-events.cloud.unity3d.com 16 | m_Enabled: 0 17 | m_LogBufferSize: 10 18 | m_CaptureEditorExceptions: 1 19 | UnityPurchasingSettings: 20 | m_Enabled: 0 21 | m_TestMode: 0 22 | UnityAnalyticsSettings: 23 | m_Enabled: 1 24 | m_TestMode: 0 25 | m_InitializeOnStartup: 1 26 | m_PackageRequiringCoreStatsPresent: 0 27 | UnityAdsSettings: 28 | m_Enabled: 0 29 | m_InitializeOnStartup: 1 30 | m_TestMode: 0 31 | m_IosGameId: 32 | m_AndroidGameId: 33 | m_GameIds: {} 34 | m_GameId: 35 | PerformanceReportingSettings: 36 | m_Enabled: 0 37 | -------------------------------------------------------------------------------- /example/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_RenderPipeSettingsPath: 10 | m_FixedTimeStep: 0.016666668 11 | m_MaxDeltaTime: 0.05 12 | -------------------------------------------------------------------------------- /example/ProjectSettings/VersionControlSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!890905787 &1 4 | VersionControlSettings: 5 | m_ObjectHideFlags: 0 6 | m_Mode: Visible Meta Files 7 | m_CollabEditorSettings: 8 | inProgressEnabled: 1 9 | -------------------------------------------------------------------------------- /example/ProjectSettings/XRPackageSettings.asset: -------------------------------------------------------------------------------- 1 | { 2 | "m_Settings": [ 3 | "RemoveLegacyInputHelpersForReload" 4 | ] 5 | } -------------------------------------------------------------------------------- /example/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 | } -------------------------------------------------------------------------------- /example/ProjectSettings/boot.config: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndoorAtlas/unity-plugin/4c6659bce5ee936bdb2c4393010fc852ba640289/example/ProjectSettings/boot.config -------------------------------------------------------------------------------- /example/UserSettings/EditorUserSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!162 &1 4 | EditorUserSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 4 7 | m_ConfigSettings: 8 | RecentlyUsedSceneGuid-0: 9 | value: 53000d055202080d0b5f5d7042770847464e4f2e7d7f7f697c704e62b6b7606f 10 | flags: 0 11 | vcSharedLogLevel: 12 | value: 0d5e400f0650 13 | flags: 0 14 | m_VCAutomaticAdd: 1 15 | m_VCDebugCom: 0 16 | m_VCDebugCmd: 0 17 | m_VCDebugOut: 0 18 | m_SemanticMergeMode: 2 19 | m_DesiredImportWorkerCount: 2 20 | m_StandbyImportWorkerCount: 2 21 | m_IdleImportWorkerShutdownDelay: 60000 22 | m_VCShowFailedCheckout: 1 23 | m_VCOverwriteFailedCheckoutAssets: 1 24 | m_VCProjectOverlayIcons: 1 25 | m_VCHierarchyOverlayIcons: 1 26 | m_VCOtherOverlayIcons: 1 27 | m_VCAllowAsyncUpdate: 0 28 | m_ArtifactGarbageCollection: 1 29 | -------------------------------------------------------------------------------- /example/UserSettings/Search.index: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Assets", 3 | "roots": ["Assets"], 4 | "includes": [], 5 | "excludes": [], 6 | "options": { 7 | "types": true, 8 | "properties": true, 9 | "extended": false, 10 | "dependencies": false 11 | }, 12 | "baseScore": 999 13 | } -------------------------------------------------------------------------------- /example/UserSettings/Search.settings: -------------------------------------------------------------------------------- 1 | trackSelection = true 2 | fetchPreview = true 3 | defaultFlags = 0 4 | keepOpen = false 5 | queryFolder = "Assets" 6 | onBoardingDoNotAskAgain = true 7 | showPackageIndexes = false 8 | showStatusBar = false 9 | scopes = { 10 | "last_search.DD5CDD96" = "" 11 | "OpenInspectorPreview.DD5CDD96" = "0" 12 | "currentGroup.DD5CDD96" = "scene" 13 | } 14 | providers = { 15 | find = { 16 | active = true 17 | priority = 25 18 | defaultAction = null 19 | } 20 | performance = { 21 | active = false 22 | priority = 100 23 | defaultAction = null 24 | } 25 | store = { 26 | active = true 27 | priority = 100 28 | defaultAction = null 29 | } 30 | packages = { 31 | active = true 32 | priority = 90 33 | defaultAction = null 34 | } 35 | adb = { 36 | active = false 37 | priority = 2500 38 | defaultAction = null 39 | } 40 | scene = { 41 | active = true 42 | priority = 50 43 | defaultAction = null 44 | } 45 | asset = { 46 | active = true 47 | priority = 25 48 | defaultAction = null 49 | } 50 | log = { 51 | active = false 52 | priority = 210 53 | defaultAction = null 54 | } 55 | } 56 | objectSelectors = { 57 | } 58 | recentSearches = [ 59 | ] 60 | searchItemFavorites = [ 61 | ] 62 | savedSearchesSortOrder = 0 63 | showSavedSearchPanel = false 64 | expandedQueries = [ 65 | ] 66 | queryBuilder = false 67 | ignoredProperties = "id;name;classname;imagecontentshash" 68 | helperWidgetCurrentArea = "all" 69 | disabledIndexers = "" --------------------------------------------------------------------------------