├── .gitignore
├── .idea
├── .idea.UnityBrowserBridge
│ └── .idea
│ │ ├── codeStyles
│ │ └── codeStyleConfig.xml
│ │ ├── encodings.xml
│ │ ├── indexLayout.xml
│ │ ├── inspectionProfiles
│ │ └── Project_Default.xml
│ │ └── projectSettingsUpdater.xml
└── .idea.UnityBrowserBridgeExample
│ └── .idea
│ ├── encodings.xml
│ ├── indexLayout.xml
│ └── projectSettingsUpdater.xml
├── Assets
├── UnityBrowserBridge.meta
├── UnityBrowserBridge
│ ├── Plugins.meta
│ ├── Plugins
│ │ ├── SeleniumLicense.txt
│ │ ├── SeleniumLicense.txt.meta
│ │ ├── WebDriver.dll
│ │ └── WebDriver.dll.meta
│ ├── Prefabs.meta
│ ├── Prefabs
│ │ ├── UnityBrowserBridge.prefab
│ │ └── UnityBrowserBridge.prefab.meta
│ ├── Resources.meta
│ ├── Resources
│ │ ├── delete.png
│ │ ├── delete.png.meta
│ │ ├── favicon.ico
│ │ ├── favicon.ico.meta
│ │ ├── index.html
│ │ ├── index.html.meta
│ │ ├── style.css
│ │ ├── style.css.meta
│ │ ├── ubb_logo.png
│ │ ├── ubb_logo.png.meta
│ │ ├── unitybrowserbridge.js
│ │ └── unitybrowserbridge.js.meta
│ ├── Scripts.meta
│ └── Scripts
│ │ ├── HttpServer.cs
│ │ ├── HttpServer.cs.meta
│ │ ├── UnityBrowserBridge.cs
│ │ └── UnityBrowserBridge.cs.meta
├── UnityBrowserBridgeExample.meta
├── UnityBrowserBridgeExample
│ ├── Images.meta
│ ├── Images
│ │ ├── Clock.png
│ │ └── Clock.png.meta
│ ├── Materials.meta
│ ├── Materials
│ │ ├── Skybox.mat
│ │ └── Skybox.mat.meta
│ ├── Plugins.meta
│ ├── Plugins
│ │ ├── BrowserInteraction.jslib
│ │ └── BrowserInteraction.jslib.meta
│ ├── Scenes.meta
│ ├── Scenes
│ │ ├── UnityBrowserBridgeExample.unity
│ │ └── UnityBrowserBridgeExample.unity.meta
│ ├── Scripts.meta
│ └── Scripts
│ │ ├── MainController.cs
│ │ └── MainController.cs.meta
├── WebGLTemplates.meta
└── WebGLTemplates
│ ├── UBBExample.meta
│ └── UBBExample
│ ├── TemplateData.meta
│ ├── TemplateData
│ ├── favicon.ico
│ ├── favicon.ico.meta
│ ├── jQueryLicense.txt
│ ├── jQueryLicense.txt.meta
│ ├── jquery-3.6.0.min.js
│ ├── jquery-3.6.0.min.js.meta
│ ├── myscript.js
│ ├── myscript.js.meta
│ ├── progress-bar-empty-dark.png
│ ├── progress-bar-empty-dark.png.meta
│ ├── progress-bar-full-dark.png
│ ├── progress-bar-full-dark.png.meta
│ ├── style.css
│ ├── style.css.meta
│ ├── unity-logo-dark.png
│ ├── unity-logo-dark.png.meta
│ ├── webgl-util.js
│ └── webgl-util.js.meta
│ ├── index.html
│ ├── index.html.meta
│ ├── thumbnail.png
│ └── thumbnail.png.meta
├── Documentation
└── Figures
│ ├── OverviewBrowser.graffle
│ ├── OverviewBrowser.png
│ ├── OverviewCompared.graffle
│ ├── OverviewCompared.png
│ ├── OverviewEditor.graffle
│ ├── OverviewEditor.png
│ ├── ScreenshotExamplePage.png
│ ├── ScreenshotExampleScene.png
│ ├── ScreenshotExampleWebGL.png
│ ├── ScreenshotHelloWorldPage.png
│ └── ScreenshotUBBConfig.png
├── LICENSE
├── Packages
└── manifest.json
├── ProjectSettings
├── AudioManager.asset
├── ClusterInputManager.asset
├── DynamicsManager.asset
├── EditorBuildSettings.asset
├── EditorSettings.asset
├── GraphicsSettings.asset
├── InputManager.asset
├── NavMeshAreas.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
└── XRSettings.asset
└── README.md
/.gitignore:
--------------------------------------------------------------------------------
1 | # Temporary files
2 | [Tt]emp/
3 | [Oo]bj/
4 | Packages/packages-lock.json
5 |
6 | # Local asset cache
7 | [Ll]ibrary/
8 |
9 | # Build files
10 | [Bb]uild/
11 | [Bb]uilds/
12 |
13 | # User settings
14 | UserSettings/*
15 | *.userprefs
16 | *.sln.DotSettings.user
17 |
18 | # Visual Studio files
19 | *.sln
20 | *.csproj
21 | *.csproj.user
22 | *.unityproj
23 | .vs
24 | .vsconfig
25 |
26 | # Rider files
27 | Assets/Plugins/Editor/JetBrains*
28 | .idea/**/contentModel.xml
29 | .idea/**/workspace.xml
30 | .idea/**/tasks.xml
31 | .idea/**/usage.statistics.xml
32 | .idea/**/dictionaries
33 | .idea/**/shelf
34 | .idea/**/riderModule.iml
35 |
36 | # Visual Studio Code
37 | .vscode/
38 |
39 | # Log files
40 | log.txt
41 | Logs/*
42 |
43 | # Unity pidb meta files
44 | *.pidb.meta
45 |
46 | # Unity crash reports
47 | sysinfo.txt
48 | mono_crash.*
49 |
50 | # OS generated files
51 | .DS_Store
52 | ._*
53 | Thumbs.db
54 |
55 |
--------------------------------------------------------------------------------
/.idea/.idea.UnityBrowserBridge/.idea/codeStyles/codeStyleConfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/.idea/.idea.UnityBrowserBridge/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/.idea/.idea.UnityBrowserBridge/.idea/indexLayout.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/.idea.UnityBrowserBridge/.idea/inspectionProfiles/Project_Default.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
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 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/.idea/.idea.UnityBrowserBridge/.idea/projectSettingsUpdater.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/.idea.UnityBrowserBridgeExample/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/.idea/.idea.UnityBrowserBridgeExample/.idea/indexLayout.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/.idea.UnityBrowserBridgeExample/.idea/projectSettingsUpdater.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 0e7137912f1c74df0a3b0de1403bd0a0
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Plugins.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: b29c53f842614432d970059341a57a9f
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Plugins/SeleniumLicense.txt:
--------------------------------------------------------------------------------
1 |
2 | Apache License
3 | Version 2.0, January 2004
4 | http://www.apache.org/licenses/
5 |
6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7 |
8 | 1. Definitions.
9 |
10 | "License" shall mean the terms and conditions for use, reproduction,
11 | and distribution as defined by Sections 1 through 9 of this document.
12 |
13 | "Licensor" shall mean the copyright owner or entity authorized by
14 | the copyright owner that is granting the License.
15 |
16 | "Legal Entity" shall mean the union of the acting entity and all
17 | other entities that control, are controlled by, or are under common
18 | control with that entity. For the purposes of this definition,
19 | "control" means (i) the power, direct or indirect, to cause the
20 | direction or management of such entity, whether by contract or
21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
22 | outstanding shares, or (iii) beneficial ownership of such entity.
23 |
24 | "You" (or "Your") shall mean an individual or Legal Entity
25 | exercising permissions granted by this License.
26 |
27 | "Source" form shall mean the preferred form for making modifications,
28 | including but not limited to software source code, documentation
29 | source, and configuration files.
30 |
31 | "Object" form shall mean any form resulting from mechanical
32 | transformation or translation of a Source form, including but
33 | not limited to compiled object code, generated documentation,
34 | and conversions to other media types.
35 |
36 | "Work" shall mean the work of authorship, whether in Source or
37 | Object form, made available under the License, as indicated by a
38 | copyright notice that is included in or attached to the work
39 | (an example is provided in the Appendix below).
40 |
41 | "Derivative Works" shall mean any work, whether in Source or Object
42 | form, that is based on (or derived from) the Work and for which the
43 | editorial revisions, annotations, elaborations, or other modifications
44 | represent, as a whole, an original work of authorship. For the purposes
45 | of this License, Derivative Works shall not include works that remain
46 | separable from, or merely link (or bind by name) to the interfaces of,
47 | the Work and Derivative Works thereof.
48 |
49 | "Contribution" shall mean any work of authorship, including
50 | the original version of the Work and any modifications or additions
51 | to that Work or Derivative Works thereof, that is intentionally
52 | submitted to Licensor for inclusion in the Work by the copyright owner
53 | or by an individual or Legal Entity authorized to submit on behalf of
54 | the copyright owner. For the purposes of this definition, "submitted"
55 | means any form of electronic, verbal, or written communication sent
56 | to the Licensor or its representatives, including but not limited to
57 | communication on electronic mailing lists, source code control systems,
58 | and issue tracking systems that are managed by, or on behalf of, the
59 | Licensor for the purpose of discussing and improving the Work, but
60 | excluding communication that is conspicuously marked or otherwise
61 | designated in writing by the copyright owner as "Not a Contribution."
62 |
63 | "Contributor" shall mean Licensor and any individual or Legal Entity
64 | on behalf of whom a Contribution has been received by Licensor and
65 | subsequently incorporated within the Work.
66 |
67 | 2. Grant of Copyright License. Subject to the terms and conditions of
68 | this License, each Contributor hereby grants to You a perpetual,
69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70 | copyright license to reproduce, prepare Derivative Works of,
71 | publicly display, publicly perform, sublicense, and distribute the
72 | Work and such Derivative Works in Source or Object form.
73 |
74 | 3. Grant of Patent License. Subject to the terms and conditions of
75 | this License, each Contributor hereby grants to You a perpetual,
76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77 | (except as stated in this section) patent license to make, have made,
78 | use, offer to sell, sell, import, and otherwise transfer the Work,
79 | where such license applies only to those patent claims licensable
80 | by such Contributor that are necessarily infringed by their
81 | Contribution(s) alone or by combination of their Contribution(s)
82 | with the Work to which such Contribution(s) was submitted. If You
83 | institute patent litigation against any entity (including a
84 | cross-claim or counterclaim in a lawsuit) alleging that the Work
85 | or a Contribution incorporated within the Work constitutes direct
86 | or contributory patent infringement, then any patent licenses
87 | granted to You under this License for that Work shall terminate
88 | as of the date such litigation is filed.
89 |
90 | 4. Redistribution. You may reproduce and distribute copies of the
91 | Work or Derivative Works thereof in any medium, with or without
92 | modifications, and in Source or Object form, provided that You
93 | meet the following conditions:
94 |
95 | (a) You must give any other recipients of the Work or
96 | Derivative Works a copy of this License; and
97 |
98 | (b) You must cause any modified files to carry prominent notices
99 | stating that You changed the files; and
100 |
101 | (c) You must retain, in the Source form of any Derivative Works
102 | that You distribute, all copyright, patent, trademark, and
103 | attribution notices from the Source form of the Work,
104 | excluding those notices that do not pertain to any part of
105 | the Derivative Works; and
106 |
107 | (d) If the Work includes a "NOTICE" text file as part of its
108 | distribution, then any Derivative Works that You distribute must
109 | include a readable copy of the attribution notices contained
110 | within such NOTICE file, excluding those notices that do not
111 | pertain to any part of the Derivative Works, in at least one
112 | of the following places: within a NOTICE text file distributed
113 | as part of the Derivative Works; within the Source form or
114 | documentation, if provided along with the Derivative Works; or,
115 | within a display generated by the Derivative Works, if and
116 | wherever such third-party notices normally appear. The contents
117 | of the NOTICE file are for informational purposes only and
118 | do not modify the License. You may add Your own attribution
119 | notices within Derivative Works that You distribute, alongside
120 | or as an addendum to the NOTICE text from the Work, provided
121 | that such additional attribution notices cannot be construed
122 | as modifying the License.
123 |
124 | You may add Your own copyright statement to Your modifications and
125 | may provide additional or different license terms and conditions
126 | for use, reproduction, or distribution of Your modifications, or
127 | for any such Derivative Works as a whole, provided Your use,
128 | reproduction, and distribution of the Work otherwise complies with
129 | the conditions stated in this License.
130 |
131 | 5. Submission of Contributions. Unless You explicitly state otherwise,
132 | any Contribution intentionally submitted for inclusion in the Work
133 | by You to the Licensor shall be under the terms and conditions of
134 | this License, without any additional terms or conditions.
135 | Notwithstanding the above, nothing herein shall supersede or modify
136 | the terms of any separate license agreement you may have executed
137 | with Licensor regarding such Contributions.
138 |
139 | 6. Trademarks. This License does not grant permission to use the trade
140 | names, trademarks, service marks, or product names of the Licensor,
141 | except as required for reasonable and customary use in describing the
142 | origin of the Work and reproducing the content of the NOTICE file.
143 |
144 | 7. Disclaimer of Warranty. Unless required by applicable law or
145 | agreed to in writing, Licensor provides the Work (and each
146 | Contributor provides its Contributions) on an "AS IS" BASIS,
147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148 | implied, including, without limitation, any warranties or conditions
149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150 | PARTICULAR PURPOSE. You are solely responsible for determining the
151 | appropriateness of using or redistributing the Work and assume any
152 | risks associated with Your exercise of permissions under this License.
153 |
154 | 8. Limitation of Liability. In no event and under no legal theory,
155 | whether in tort (including negligence), contract, or otherwise,
156 | unless required by applicable law (such as deliberate and grossly
157 | negligent acts) or agreed to in writing, shall any Contributor be
158 | liable to You for damages, including any direct, indirect, special,
159 | incidental, or consequential damages of any character arising as a
160 | result of this License or out of the use or inability to use the
161 | Work (including but not limited to damages for loss of goodwill,
162 | work stoppage, computer failure or malfunction, or any and all
163 | other commercial damages or losses), even if such Contributor
164 | has been advised of the possibility of such damages.
165 |
166 | 9. Accepting Warranty or Additional Liability. While redistributing
167 | the Work or Derivative Works thereof, You may choose to offer,
168 | and charge a fee for, acceptance of support, warranty, indemnity,
169 | or other liability obligations and/or rights consistent with this
170 | License. However, in accepting such obligations, You may act only
171 | on Your own behalf and on Your sole responsibility, not on behalf
172 | of any other Contributor, and only if You agree to indemnify,
173 | defend, and hold each Contributor harmless for any liability
174 | incurred by, or claims asserted against, such Contributor by reason
175 | of your accepting any such warranty or additional liability.
176 |
177 | END OF TERMS AND CONDITIONS
178 |
179 | APPENDIX: How to apply the Apache License to your work.
180 |
181 | To apply the Apache License to your work, attach the following
182 | boilerplate notice, with the fields enclosed by brackets "[]"
183 | replaced with your own identifying information. (Don't include
184 | the brackets!) The text should be enclosed in the appropriate
185 | comment syntax for the file format. We also recommend that a
186 | file or class name and description of purpose be included on the
187 | same "printed page" as the copyright notice for easier
188 | identification within third-party archives.
189 |
190 | Copyright 2022 Software Freedom Conservancy (SFC)
191 |
192 | Licensed under the Apache License, Version 2.0 (the "License");
193 | you may not use this file except in compliance with the License.
194 | You may obtain a copy of the License at
195 |
196 | http://www.apache.org/licenses/LICENSE-2.0
197 |
198 | Unless required by applicable law or agreed to in writing, software
199 | distributed under the License is distributed on an "AS IS" BASIS,
200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201 | See the License for the specific language governing permissions and
202 | limitations under the License.
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Plugins/SeleniumLicense.txt.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: bdf882914705c4de08a5fca833f060e1
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Plugins/WebDriver.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sropelato/UnityBrowserBridge/9d2ed54e2ae073f2dc4f408470f416e34febda21/Assets/UnityBrowserBridge/Plugins/WebDriver.dll
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Plugins/WebDriver.dll.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 01183d7c97b3740fab2b09a13c1837a5
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: 1
18 | settings: {}
19 | - first:
20 | Editor: Editor
21 | second:
22 | enabled: 0
23 | settings:
24 | DefaultValueInitialized: true
25 | - first:
26 | Windows Store Apps: WindowsStoreApps
27 | second:
28 | enabled: 0
29 | settings:
30 | CPU: AnyCPU
31 | userData:
32 | assetBundleName:
33 | assetBundleVariant:
34 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Prefabs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 74c8a226f6f534e609ec69fe87149e62
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Prefabs/UnityBrowserBridge.prefab:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1 &1943767788423411991
4 | GameObject:
5 | m_ObjectHideFlags: 0
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | serializedVersion: 6
10 | m_Component:
11 | - component: {fileID: 1943767788423411989}
12 | - component: {fileID: 1943767788423411988}
13 | m_Layer: 0
14 | m_Name: UnityBrowserBridge
15 | m_TagString: Untagged
16 | m_Icon: {fileID: 0}
17 | m_NavMeshLayer: 0
18 | m_StaticEditorFlags: 0
19 | m_IsActive: 1
20 | --- !u!4 &1943767788423411989
21 | Transform:
22 | m_ObjectHideFlags: 0
23 | m_CorrespondingSourceObject: {fileID: 0}
24 | m_PrefabInstance: {fileID: 0}
25 | m_PrefabAsset: {fileID: 0}
26 | m_GameObject: {fileID: 1943767788423411991}
27 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
28 | m_LocalPosition: {x: 0, y: 0, z: 0}
29 | m_LocalScale: {x: 1, y: 1, z: 1}
30 | m_Children: []
31 | m_Father: {fileID: 0}
32 | m_RootOrder: 0
33 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
34 | --- !u!114 &1943767788423411988
35 | MonoBehaviour:
36 | m_ObjectHideFlags: 0
37 | m_CorrespondingSourceObject: {fileID: 0}
38 | m_PrefabInstance: {fileID: 0}
39 | m_PrefabAsset: {fileID: 0}
40 | m_GameObject: {fileID: 1943767788423411991}
41 | m_Enabled: 1
42 | m_EditorHideFlags: 0
43 | m_Script: {fileID: 11500000, guid: 20e679ddcc87f49cd93e72eaa0e674bf, type: 3}
44 | m_Name:
45 | m_EditorClassIdentifier:
46 | httpServerPort: 63388
47 | indexFile: {fileID: 4900000, guid: f9b34a310cdb64b38a68c4c1319bf1a7, type: 3}
48 | includeProjectFiles: []
49 | includeExternalFiles: []
50 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Prefabs/UnityBrowserBridge.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: b2ca0da73d4214f50b14277cc41e4d3c
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Resources.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: c1f6588d1cfcb44b894a2be42a73036e
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Resources/delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sropelato/UnityBrowserBridge/9d2ed54e2ae073f2dc4f408470f416e34febda21/Assets/UnityBrowserBridge/Resources/delete.png
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Resources/delete.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 13a1cd57aa7964f31a1abaf8e70157ef
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 | vTOnly: 0
27 | grayScaleToAlpha: 0
28 | generateCubemap: 6
29 | cubemapConvolution: 0
30 | seamlessCubemap: 0
31 | textureFormat: 1
32 | maxTextureSize: 2048
33 | textureSettings:
34 | serializedVersion: 2
35 | filterMode: 1
36 | aniso: 1
37 | mipBias: 0
38 | wrapU: 0
39 | wrapV: 0
40 | wrapW: 0
41 | nPOTScale: 1
42 | lightmap: 0
43 | compressionQuality: 50
44 | spriteMode: 0
45 | spriteExtrude: 1
46 | spriteMeshType: 1
47 | alignment: 0
48 | spritePivot: {x: 0.5, y: 0.5}
49 | spritePixelsToUnits: 100
50 | spriteBorder: {x: 0, y: 0, z: 0, w: 0}
51 | spriteGenerateFallbackPhysicsShape: 1
52 | alphaUsage: 1
53 | alphaIsTransparency: 0
54 | spriteTessellationDetail: -1
55 | textureType: 0
56 | textureShape: 1
57 | singleChannelComponent: 0
58 | flipbookRows: 1
59 | flipbookColumns: 1
60 | maxTextureSizeSet: 0
61 | compressionQualitySet: 0
62 | textureFormatSet: 0
63 | ignorePngGamma: 0
64 | applyGammaDecoding: 0
65 | platformSettings:
66 | - serializedVersion: 3
67 | buildTarget: DefaultTexturePlatform
68 | maxTextureSize: 2048
69 | resizeAlgorithm: 0
70 | textureFormat: -1
71 | textureCompression: 1
72 | compressionQuality: 50
73 | crunchedCompression: 0
74 | allowsAlphaSplitting: 0
75 | overridden: 0
76 | androidETC2FallbackOverride: 0
77 | forceMaximumCompressionQuality_BC6H_BC7: 0
78 | spriteSheet:
79 | serializedVersion: 2
80 | sprites: []
81 | outline: []
82 | physicsShape: []
83 | bones: []
84 | spriteID:
85 | internalID: 0
86 | vertices: []
87 | indices:
88 | edges: []
89 | weights: []
90 | secondaryTextures: []
91 | spritePackingTag:
92 | pSDRemoveMatte: 0
93 | pSDShowRemoveMatteOption: 0
94 | userData:
95 | assetBundleName:
96 | assetBundleVariant:
97 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Resources/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sropelato/UnityBrowserBridge/9d2ed54e2ae073f2dc4f408470f416e34febda21/Assets/UnityBrowserBridge/Resources/favicon.ico
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Resources/favicon.ico.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 2deb7ca0e8ed54fc49aba806fc1cb841
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Resources/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Unity Browser Bridge
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
19 |
20 |
24 |
25 |
Loaded scripts
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
Show live browser calls
34 |
35 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
Show live Unity calls
48 |
49 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Resources/index.html.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: f9b34a310cdb64b38a68c4c1319bf1a7
3 | TextScriptImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Resources/style.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | font-family: 'Open Sans', sans-serif;
3 | font-size: 12pt;
4 | height: 100%;
5 | width: 100%;
6 | margin: 0;
7 | padding: 0;
8 | background: #777777
9 | }
10 |
11 | body {
12 | }
13 |
14 | #content {
15 | display: flex;
16 | flex-direction: column;
17 | width: 100%;
18 | min-width: 600px;
19 | height: 100%;
20 | margin: auto;
21 | box-sizing: border-box;
22 | }
23 |
24 | #header {
25 | position: relative;
26 | height: 80px;
27 | flex: 0 0 auto;
28 | padding: 0;
29 | background-color: #172E45;
30 | box-sizing: border-box;
31 | }
32 |
33 | #header_logo {
34 | position: absolute;
35 | width: 48px;
36 | height: 48px;
37 | top: 40px;
38 | left: 15px;
39 | -webkit-transform: translateY(-50%);
40 | -ms-transform: translateY(-50%);
41 | transform: translateY(-50%);
42 | background: url('ubb_logo.png') no-repeat center;
43 | background-size: contain;
44 | }
45 |
46 | #header_text {
47 | position: absolute;
48 | top: 40px;
49 | left: 70px;
50 | -webkit-transform: translateY(-50%);
51 | -ms-transform: translateY(-50%);
52 | transform: translateY(-50%);
53 | font-size: 16pt;
54 | color: #FFFFFF;
55 | }
56 |
57 | #main {
58 | flex: 1 1 auto;
59 | display: flex;
60 | flex-direction: column;
61 | padding: 20px;
62 | min-height: 400px;
63 | box-sizing: border-box;
64 | background-color: #EEEEEE;
65 | }
66 |
67 | #footer {
68 | position: relative;
69 | height: 60px;
70 | flex: 0 0 auto;
71 | background-color: #DDDDDD;
72 | }
73 |
74 | #status {
75 | flex: 0 0 auto;
76 | display: flex;
77 | flex-direction: row;
78 | align-items: center;
79 | width: 100%;
80 | justify-content: flex-end;
81 | }
82 |
83 | #status_light {
84 | width: 20px;
85 | height: 20px;
86 | border-radius: 10px;
87 | margin-right: 6px;
88 | }
89 |
90 | #status_light.red {
91 | background: #810000;
92 | }
93 |
94 | #status_light.amber {
95 | background: #FFCC00;
96 | }
97 |
98 | #status_light.green {
99 | background: #00DA4A;
100 | }
101 |
102 | #status_text {
103 | }
104 |
105 | .title {
106 | font-weight: bold;
107 | margin-bottom: 10px;
108 | }
109 |
110 | #script_list {
111 | flex: 0 0 auto;
112 | min-height: 80px;
113 | background: #DDDDDD;
114 | border-radius: 5px;
115 | padding-left: 10px;
116 | padding-right: 10px;
117 | padding-top: 10px;
118 | padding-bottom: 10px;
119 | }
120 |
121 | .script_list_entry {
122 | display: block;
123 | width: 100%;
124 | text-decoration: none;
125 | color: #333333;
126 | padding: 5px;
127 | box-sizing: border-box;
128 | overflow-wrap: break-word;
129 | }
130 |
131 | .script_list_entry:hover {
132 | background: #CCCCCC;
133 | }
134 |
135 | .script_list_empty {
136 | display: block;
137 | font-style: italic;
138 | width: 100%;
139 | text-decoration: none;
140 | color: #666666;
141 | padding: 5px;
142 | box-sizing: border-box;
143 | overflow-wrap: break-word;
144 | }
145 |
146 | #calls {
147 | flex: 1 1 auto;
148 | display: flex;
149 | flex-direction: row;
150 | margin-top: 20px;
151 | }
152 |
153 | #browser_calls {
154 | display: flex;
155 | flex-direction: column;
156 | flex: 0.5;
157 | box-sizing: border-box;
158 | padding-right: 5px;
159 | }
160 |
161 | #unity_calls {
162 | display: flex;
163 | flex-direction: column;
164 | flex: 0.5;
165 | box-sizing: border-box;
166 | padding-left: 5px;
167 | height: 100%;
168 | }
169 |
170 | .show_calls {
171 | display: flex;
172 | flex-direction: row;
173 | justify-content: left;
174 | align-items: center;
175 | }
176 |
177 | .show_calls .title {
178 | margin: 0;
179 | margin-right: 10px;
180 | font-weight: bold;
181 | }
182 |
183 | #browser_calls_list, #unity_calls_list {
184 | min-height: 100px;
185 | background: #333333;
186 | border-radius: 5px;
187 | margin-top: 10px;
188 | padding-left: 10px;
189 | padding-right: 10px;
190 | padding-top: 10px;
191 | padding-bottom: 10px;
192 | flex: 1 1 auto;
193 | overflow-y: scroll;
194 | height: 50px;
195 | min-height: 100px;
196 | -ms-overflow-style: none;
197 | scrollbar-width: none;
198 | }
199 |
200 | #browser_calls_list::-webkit-scrollbar, #unity_calls_list::-webkit-scrollbar {
201 | display: none;
202 | }
203 |
204 | .calls_list_entry {
205 | font-family: 'Source Code Pro', monospace;
206 | font-size: 10pt;
207 | color: #DDDDDD;
208 | padding: 5px;
209 | box-sizing: border-box;
210 | }
211 |
212 | .calls_list_entry:hover {
213 | background: #555555;
214 | }
215 |
216 | .clear_button {
217 | width: 20px;
218 | height: 20px;
219 | border: 0;
220 | margin-left: 10px;
221 | cursor: pointer;
222 | background: url('delete.png');
223 | background-size: cover;
224 | background-position: 0 0;
225 | }
226 |
227 | .clear_button:hover {
228 | background-position: 0 100%;
229 | }
230 |
231 | .switch {
232 | position: relative;
233 | display: inline-block;
234 | width: 40px;
235 | height: 20px;
236 | }
237 |
238 | .switch input {
239 | opacity: 0;
240 | width: 0;
241 | height: 0;
242 | }
243 |
244 | .slider {
245 | position: absolute;
246 | cursor: pointer;
247 | top: 0;
248 | left: 0;
249 | right: 0;
250 | bottom: 0;
251 | -webkit-transition: .2s;
252 | transition: .2s;
253 | border-radius: 20px;
254 | }
255 |
256 | .slider:before {
257 | position: absolute;
258 | content: "";
259 | height: 14px;
260 | width: 14px;
261 | left: 3px;
262 | bottom: 3px;
263 | background-color: white;
264 | -webkit-transition: .2s;
265 | transition: .2s;
266 | border-radius: 50%;
267 | }
268 |
269 | input:checked + .slider:before {
270 | -webkit-transform: translateX(20px);
271 | -ms-transform: translateX(20px);
272 | transform: translateX(20px);
273 | }
274 |
275 | input:not(:checked) + .slider {
276 | background-color: #CCCCCC;
277 | }
278 |
279 | input:checked + .slider {
280 | background-color: #00DA4A;
281 | }
282 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Resources/style.css.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 4a46f000fa1744151ba5f65a9d2c2673
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Resources/ubb_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sropelato/UnityBrowserBridge/9d2ed54e2ae073f2dc4f408470f416e34febda21/Assets/UnityBrowserBridge/Resources/ubb_logo.png
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Resources/ubb_logo.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: b659818cdb4a6414ca8cb2e7226b87ad
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 | vTOnly: 0
27 | grayScaleToAlpha: 0
28 | generateCubemap: 6
29 | cubemapConvolution: 0
30 | seamlessCubemap: 0
31 | textureFormat: 1
32 | maxTextureSize: 2048
33 | textureSettings:
34 | serializedVersion: 2
35 | filterMode: 1
36 | aniso: 1
37 | mipBias: 0
38 | wrapU: 0
39 | wrapV: 0
40 | wrapW: 0
41 | nPOTScale: 1
42 | lightmap: 0
43 | compressionQuality: 50
44 | spriteMode: 0
45 | spriteExtrude: 1
46 | spriteMeshType: 1
47 | alignment: 0
48 | spritePivot: {x: 0.5, y: 0.5}
49 | spritePixelsToUnits: 100
50 | spriteBorder: {x: 0, y: 0, z: 0, w: 0}
51 | spriteGenerateFallbackPhysicsShape: 1
52 | alphaUsage: 1
53 | alphaIsTransparency: 0
54 | spriteTessellationDetail: -1
55 | textureType: 0
56 | textureShape: 1
57 | singleChannelComponent: 0
58 | flipbookRows: 1
59 | flipbookColumns: 1
60 | maxTextureSizeSet: 0
61 | compressionQualitySet: 0
62 | textureFormatSet: 0
63 | ignorePngGamma: 0
64 | applyGammaDecoding: 0
65 | platformSettings:
66 | - serializedVersion: 3
67 | buildTarget: DefaultTexturePlatform
68 | maxTextureSize: 2048
69 | resizeAlgorithm: 0
70 | textureFormat: -1
71 | textureCompression: 1
72 | compressionQuality: 50
73 | crunchedCompression: 0
74 | allowsAlphaSplitting: 0
75 | overridden: 0
76 | androidETC2FallbackOverride: 0
77 | forceMaximumCompressionQuality_BC6H_BC7: 0
78 | spriteSheet:
79 | serializedVersion: 2
80 | sprites: []
81 | outline: []
82 | physicsShape: []
83 | bones: []
84 | spriteID:
85 | internalID: 0
86 | vertices: []
87 | indices:
88 | edges: []
89 | weights: []
90 | secondaryTextures: []
91 | spritePackingTag:
92 | pSDRemoveMatte: 0
93 | pSDShowRemoveMatteOption: 0
94 | userData:
95 | assetBundleName:
96 | assetBundleVariant:
97 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Resources/unitybrowserbridge.js:
--------------------------------------------------------------------------------
1 | // ready when everything has been loaded
2 | window.addEventListener('load', function () {
3 | // set status to 'ready'
4 | document.getElementById('status_light').className = 'green'
5 | document.getElementById('status_text').innerText = 'ready'
6 |
7 | // send ready to server
8 | const xhttp = new XMLHttpRequest();
9 | xhttp.open("GET", "ubbReady", true);
10 | xhttp.send();
11 | })
12 |
13 | var liveBrowserCalls = false
14 | var liveUnityCalls = false
15 |
16 | // displays the call in the browser call list
17 | _ubb_logBrowserCall = function (call) {
18 | if (!liveBrowserCalls)
19 | return
20 | let callDiv = document.createElement('div')
21 | callDiv.innerHTML = call
22 | callDiv.className = 'calls_list_entry'
23 | document.getElementById('browser_calls_list').appendChild(callDiv)
24 | document.getElementById('browser_calls_list').scrollTop = document.getElementById('browser_calls_list').scrollHeight
25 | }
26 |
27 | // displays the call in the Unity call list
28 | _ubb_logUnityCall = function (call) {
29 | if (!liveUnityCalls)
30 | return
31 | let callDiv = document.createElement('div')
32 | callDiv.innerHTML = call
33 | callDiv.className = 'calls_list_entry'
34 | document.getElementById('unity_calls_list').appendChild(callDiv)
35 | document.getElementById('unity_calls_list').scrollTop = document.getElementById('unity_calls_list').scrollHeight
36 | }
37 |
38 | // toggle display of live browser calls
39 | _ubb_changeLiveBrowserCalls = function () {
40 | liveBrowserCalls = document.getElementById('live_browser_calls_checkbox').checked
41 | }
42 |
43 | // toggle display of live Unity calls
44 | _ubb_changeLiveUnityCalls = function () {
45 | liveUnityCalls = document.getElementById('live_unity_calls_checkbox').checked
46 | }
47 |
48 | // clear browser calls list
49 | _ubb_clearBrowserCalls = function () {
50 | document.getElementById('browser_calls_list').innerHTML = ''
51 | }
52 |
53 | // clear unity calls list
54 | _ubb_clearUnityCalls = function () {
55 | document.getElementById('unity_calls_list').innerHTML = ''
56 | }
57 |
58 | // emulates unityInstance object of Unity's WebGL build with a 'SendMessage' function to invoke methods in Unity game objects
59 | unityInstance = {
60 | SendMessage: function (gameObject, methodName, value) {
61 | // send request to server
62 | const xhttp = new XMLHttpRequest();
63 | if (typeof (value) == 'undefined') {
64 | xhttp.open("GET", "ubbSendMessage?gameObject=" + encodeURI(gameObject) + "&methodName=" + encodeURI(methodName), true);
65 | _ubb_logUnityCall(gameObject + ' → ' + methodName + '()')
66 | } else if (typeof (value) == 'number') {
67 | xhttp.open("GET", "ubbSendMessage?gameObject=" + encodeURI(gameObject) + "&methodName=" + encodeURI(methodName) + "&valueNum=" + encodeURI(value), true);
68 | _ubb_logUnityCall(gameObject + ' → ' + methodName + '(' + value + ')')
69 | } else {
70 | xhttp.open("GET", "ubbSendMessage?gameObject=" + encodeURI(gameObject) + "&methodName=" + encodeURI(methodName) + "&valueStr=" + encodeURI(value), true);
71 | _ubb_logUnityCall(gameObject + ' → ' + methodName + '("' + String(value).replace(/'/g, "\\'") + '")')
72 | }
73 | xhttp.send();
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Resources/unitybrowserbridge.js.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: e759d9b702d0e4033ac6d6abad99cb43
3 | TextScriptImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Scripts.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: fab7fd828c0884b17b4975365941cf51
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Scripts/HttpServer.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Net;
5 | using System.Text;
6 | using System.Threading;
7 | using UnityEngine;
8 |
9 | namespace UBB
10 | {
11 | ///
12 | /// The HttpServer class implements a simple web browser to offer files to the browser.
13 | ///
14 | public class HttpServer
15 | {
16 | #if UNITY_EDITOR
17 |
18 | // port on which the server listens for connections
19 | private readonly int port;
20 |
21 | // root path where resources are located
22 | private readonly string rootPath;
23 |
24 | // JavaScript files included in the project
25 | private readonly Dictionary jsFiles = new Dictionary();
26 |
27 | // http listener waiting for connections
28 | private HttpListener httpListener = null;
29 |
30 | // server thread handling requests in the background
31 | private Thread serverThread = null;
32 |
33 | // web server has been stopped
34 | private bool stopped = false;
35 |
36 | ///
37 | /// Creates a new HTTP server with a given port and root path.
38 | ///
39 | /// Port on which the server listens for connections.
40 | /// Root path where resources are located.
41 | public HttpServer(int port, string rootPath)
42 | {
43 | this.port = port;
44 | this.rootPath = rootPath;
45 | }
46 |
47 | ///
48 | /// Starts the web server.
49 | ///
50 | public void Start()
51 | {
52 | httpListener = new HttpListener();
53 | httpListener.Prefixes.Add("http://*:" + port + "/");
54 | httpListener.Start();
55 | serverThread = new Thread(Listen);
56 | serverThread.Start();
57 | }
58 |
59 | ///
60 | /// Stops the web server.
61 | ///
62 | public void Stop()
63 | {
64 | stopped = true;
65 | serverThread.Abort();
66 | }
67 |
68 | ///
69 | /// Adds a JavaScript file that's included in the web project.
70 | ///
71 | /// Path of the JavaScript file.
72 | public void AddJSFile(string path)
73 | {
74 | string filename = Path.GetFileName(path);
75 | if (jsFiles.ContainsKey(filename))
76 | {
77 | Debug.LogError("Unity Browser Bridge - Cannot add two files with the same name (" + filename + ")");
78 | return;
79 | }
80 |
81 | jsFiles.Add(filename, path);
82 | }
83 |
84 | // listen for connections (serverThread)
85 | private void Listen()
86 | {
87 | while (true)
88 | {
89 | try
90 | {
91 | HttpListenerContext context = httpListener.GetContext();
92 | ProcessRequest(context);
93 | }
94 | catch (Exception e)
95 | {
96 | if (!stopped)
97 | Debug.LogError("Unity Browser Bridge - Error listening for connections: " + e.Message);
98 | }
99 | }
100 | }
101 |
102 | // process web request
103 | private void ProcessRequest(HttpListenerContext context)
104 | {
105 | string requestPath = context.Request.Url.AbsolutePath;
106 | if (requestPath.Equals("/"))
107 | {
108 | // load index.html file
109 | string indexHtml = File.ReadAllText(Path.Combine(rootPath, "index.html"));
110 |
111 | // replace script placeholders
112 | string headScripts = "";
113 | string scriptList = "";
114 | foreach (string jsFile in jsFiles.Keys)
115 | {
116 | string scriptUrl = "/scripts/" + jsFile;
117 | headScripts += (headScripts.Length > 0 ? "\n" : "") + "";
118 | scriptList += (scriptList.Length > 0 ? "\n" : "") + "" + jsFile + " ";
119 | }
120 |
121 | if (scriptList.Length == 0)
122 | {
123 | scriptList = "empty
";
124 | }
125 |
126 | indexHtml = indexHtml.Replace("", headScripts);
127 | indexHtml = indexHtml.Replace("", scriptList);
128 |
129 | // send response
130 | context.Response.StatusCode = (int)HttpStatusCode.OK;
131 | context.Response.ContentType = "text/html";
132 | byte[] responseBytes = Encoding.UTF8.GetBytes(indexHtml);
133 | context.Response.OutputStream.Write(responseBytes, 0, responseBytes.Length);
134 | }
135 | else if (requestPath.Equals("/ubbReady") || requestPath.Equals("/ubbReady/"))
136 | {
137 | // browser is ready
138 | UnityBrowserBridge.Instance.Ready = true;
139 | Debug.Log("Unity Browser Bridge - Browser is ready");
140 |
141 | // send response
142 | context.Response.StatusCode = (int)HttpStatusCode.OK;
143 | context.Response.ContentType = "text/plain";
144 | byte[] responseBytes = Encoding.UTF8.GetBytes("OK");
145 | context.Response.OutputStream.Write(responseBytes, 0, responseBytes.Length);
146 | }
147 | else if (requestPath.Equals("/ubbSendMessage") || requestPath.Equals("/ubbSendMessage/"))
148 | {
149 | // send message to a Unity game object
150 | string gameObjectName = context.Request.QueryString["gameObject"];
151 | string methodName = context.Request.QueryString["methodName"];
152 | if (gameObjectName == null)
153 | {
154 | Debug.LogError("Unity Browser Bridge - gameObject cannot be null.");
155 |
156 | // send response
157 | context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
158 | context.Response.ContentType = "text/plain";
159 | byte[] responseBytes = Encoding.UTF8.GetBytes("gameObject must be set.");
160 | context.Response.OutputStream.Write(responseBytes, 0, responseBytes.Length);
161 | }
162 | else if (methodName == null)
163 | {
164 | Debug.LogError("Unity Browser Bridge - methodName cannot be null.");
165 |
166 | // send response
167 | context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
168 | context.Response.ContentType = "text/plain";
169 | byte[] responseBytes = Encoding.UTF8.GetBytes("methodName must be set.");
170 | context.Response.OutputStream.Write(responseBytes, 0, responseBytes.Length);
171 | }
172 | else if (context.Request.QueryString["valueNum"] != null)
173 | {
174 | // send value as number (double)
175 | double num = double.Parse(context.Request.QueryString["valueNum"]);
176 | UnityBrowserBridge.Instance.SendMessageToGameObject(gameObjectName, methodName, num);
177 |
178 | // send response
179 | context.Response.StatusCode = (int)HttpStatusCode.OK;
180 | context.Response.ContentType = "text/plain";
181 | byte[] responseBytes = Encoding.UTF8.GetBytes("OK");
182 | context.Response.OutputStream.Write(responseBytes, 0, responseBytes.Length);
183 | }
184 | else if (context.Request.QueryString["valueStr"] != null)
185 | {
186 | // send value as string
187 | string str = context.Request.QueryString["valueStr"];
188 | UnityBrowserBridge.Instance.SendMessageToGameObject(gameObjectName, methodName, str);
189 |
190 | // send response
191 | context.Response.StatusCode = (int)HttpStatusCode.OK;
192 | context.Response.ContentType = "text/plain";
193 | byte[] responseBytes = Encoding.UTF8.GetBytes("OK");
194 | context.Response.OutputStream.Write(responseBytes, 0, responseBytes.Length);
195 | }
196 | else
197 | {
198 | // send without value
199 | UnityBrowserBridge.Instance.SendMessageToGameObject(gameObjectName, methodName);
200 |
201 | // send response
202 | context.Response.StatusCode = (int)HttpStatusCode.OK;
203 | context.Response.ContentType = "text/plain";
204 | byte[] responseBytes = Encoding.UTF8.GetBytes("OK");
205 | context.Response.OutputStream.Write(responseBytes, 0, responseBytes.Length);
206 | }
207 | }
208 | else if (requestPath.StartsWith("/scripts/"))
209 | {
210 | // request js file
211 | string filename = requestPath.Substring(9);
212 | if (jsFiles.ContainsKey(filename) && File.Exists(jsFiles[filename]))
213 | {
214 | context.Response.StatusCode = (int)HttpStatusCode.OK;
215 | context.Response.ContentType = "application/javascript";
216 | byte[] responseBytes = File.ReadAllBytes(jsFiles[filename]);
217 | context.Response.OutputStream.Write(responseBytes, 0, responseBytes.Length);
218 | }
219 | else
220 | {
221 | Debug.LogWarning("Unity Browser Bridge - File not found: " + requestPath);
222 | context.Response.StatusCode = (int)HttpStatusCode.NotFound;
223 | context.Response.ContentType = "text/plain";
224 | byte[] responseBytes = Encoding.UTF8.GetBytes("Not found");
225 | context.Response.OutputStream.Write(responseBytes, 0, responseBytes.Length);
226 | }
227 | }
228 | else
229 | {
230 | // request resource
231 |
232 | // remove leading '/'
233 | while (requestPath.StartsWith("/"))
234 | requestPath = requestPath.Substring(1);
235 | string filename = Path.Combine(rootPath, requestPath);
236 | if (File.Exists(filename))
237 | {
238 | // status code 200
239 | context.Response.StatusCode = (int)HttpStatusCode.OK;
240 |
241 | // set mime type
242 | switch (Path.GetExtension(filename).ToLower())
243 | {
244 | case ".html":
245 | context.Response.ContentType = "text/html";
246 | break;
247 | case ".css":
248 | context.Response.ContentType = "text/css";
249 | break;
250 | case ".js":
251 | context.Response.ContentType = "application/javascript";
252 | break;
253 | case ".png":
254 | context.Response.ContentType = "image/png";
255 | break;
256 | case ".jpg":
257 | case ".jpeg":
258 | context.Response.ContentType = "image/jpeg";
259 | break;
260 | case ".ico":
261 | context.Response.ContentType = "image/x-icon";
262 | break;
263 | default:
264 | context.Response.ContentType = "application/octet-stream";
265 | break;
266 | }
267 |
268 | byte[] responseBytes = File.ReadAllBytes(filename);
269 | context.Response.OutputStream.Write(responseBytes, 0, responseBytes.Length);
270 | }
271 | else
272 | {
273 | Debug.LogWarning("Unity Browser Bridge - File not found: " + requestPath);
274 | context.Response.StatusCode = (int)HttpStatusCode.NotFound;
275 | context.Response.ContentType = "text/plain";
276 | byte[] responseBytes = Encoding.UTF8.GetBytes("Not found");
277 | context.Response.OutputStream.Write(responseBytes, 0, responseBytes.Length);
278 | }
279 | }
280 |
281 | // flush and close output stream
282 | context.Response.OutputStream.Flush();
283 | context.Response.OutputStream.Close();
284 | }
285 |
286 | #endif
287 | }
288 | }
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Scripts/HttpServer.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 3446b9f7b3fa40c0973b4edaec4266be
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Scripts/UnityBrowserBridge.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using UnityEngine;
5 | using UnityEditor;
6 | using OpenQA.Selenium;
7 | using OpenQA.Selenium.Chrome;
8 | using OpenQA.Selenium.Edge;
9 | using OpenQA.Selenium.Firefox;
10 | using OpenQA.Selenium.Opera;
11 | using OpenQA.Selenium.Safari;
12 |
13 | namespace UBB
14 | {
15 | ///
16 | /// The UnityBrowserBridge class serves as the gateway between the Unity editor and the web browser.
17 | ///
18 | public class UnityBrowserBridge : MonoBehaviour
19 | {
20 | #if UNITY_EDITOR
21 |
22 | ///
23 | /// Browser selection.
24 | ///
25 | public enum Browser
26 | {
27 | Chrome,
28 | Edge,
29 | Firefox,
30 | Opera,
31 | Safari
32 | }
33 |
34 | ///
35 | /// Static singleton property to access UnityBrowserBridge instance.
36 | ///
37 | public static UnityBrowserBridge Instance { get; private set; }
38 |
39 | ///
40 | /// Browser to be used
41 | ///
42 | public Browser browser = Browser.Chrome;
43 |
44 | ///
45 | /// Path to directory of the web driver. Leave this empty to search the web driver in a directory on the PATH
46 | /// variable.
47 | ///
48 | public string webDriverDirectory = "";
49 |
50 | ///
51 | /// Arguments that are passed along to the web driver. Does not work for Safari.
52 | ///
53 | public string[] browserArguments = { };
54 |
55 | ///
56 | /// Port used for the web server.
57 | ///
58 | public int httpServerPort = 63388;
59 |
60 | ///
61 | /// index.html file served by the web server.
62 | /// Other resources such as style sheets or images will be accessed relative to the path of this file.
63 | ///
64 | public TextAsset indexFile;
65 |
66 | ///
67 | /// Path to JavaScript files included in the WebGL project.
68 | ///
69 | public List includeJavaScriptFiles = new List();
70 |
71 | // HTTP server
72 | private HttpServer httpServer = null;
73 |
74 | // web driver to control the browser
75 | private IWebDriver webDriver = null;
76 |
77 | // messages from the browser to be forwarded to game objects
78 | private readonly Queue> messagesWithoutValue = new Queue>();
79 | private readonly Queue>> messagesWithValue = new Queue>>();
80 |
81 | ///
82 | /// Indicate whether the browser is ready to execute JavaScript commands.
83 | ///
84 | /// True
after the browser is ready and all resources have been loaded.
85 | public bool Ready { get; set; } = false;
86 |
87 | // sets instance property on awake
88 | private void Awake()
89 | {
90 | Instance = this;
91 | }
92 |
93 | // invoked after application has been terminated
94 | private void OnApplicationQuit()
95 | {
96 | // close web driver
97 | if (webDriver != null)
98 | {
99 | try
100 | {
101 | webDriver.Quit();
102 | Debug.Log("Unity Browser Bridge - Web driver has been closed.");
103 | }
104 | catch (Exception e)
105 | {
106 | Debug.LogWarning("Unity Browser Bridge - Could not close web driver: " + e.Message);
107 | }
108 | }
109 |
110 | // stop web server
111 | if (httpServer != null)
112 | {
113 | try
114 | {
115 | httpServer.Stop();
116 | Debug.Log("Unity Browser Bridge - HTTP server has been stopped.");
117 | }
118 | catch (Exception e)
119 | {
120 | Debug.LogWarning("Unity Browser Bridge - Could not stop http server: " + e.Message);
121 | }
122 | }
123 | }
124 |
125 | // initializes UnityBrowserBridge on application start
126 | private void Start()
127 | {
128 | // create web server
129 | httpServer = new HttpServer(httpServerPort, Path.GetDirectoryName(AssetDatabase.GetAssetPath(indexFile)));
130 | httpServer.Start();
131 |
132 | // add javascript files
133 | foreach (string jsFile in includeJavaScriptFiles)
134 | {
135 | // resolve path relative to 'Assets' folder (if file exists)
136 | if (File.Exists(Path.Combine(Application.dataPath, jsFile)))
137 | httpServer.AddJSFile(Path.Combine(Application.dataPath, jsFile));
138 | else
139 | httpServer.AddJSFile(jsFile);
140 | }
141 |
142 | // initialize web driver
143 | switch (browser)
144 | {
145 | case Browser.Chrome:
146 | ChromeOptions chromeOptions = new ChromeOptions();
147 | chromeOptions.AddArguments(browserArguments);
148 | webDriver = string.IsNullOrEmpty(webDriverDirectory) ? new ChromeDriver(chromeOptions) : new ChromeDriver(webDriverDirectory, chromeOptions);
149 | break;
150 | case Browser.Edge:
151 | EdgeOptions edgeOptions = new EdgeOptions();
152 | edgeOptions.AddArguments(browserArguments);
153 | webDriver = string.IsNullOrEmpty(webDriverDirectory) ? new EdgeDriver(edgeOptions) : new EdgeDriver(webDriverDirectory, edgeOptions);
154 | break;
155 | case Browser.Firefox:
156 | FirefoxOptions firefoxOptions = new FirefoxOptions();
157 | firefoxOptions.AddArguments(browserArguments);
158 | webDriver = string.IsNullOrEmpty(webDriverDirectory) ? new FirefoxDriver(firefoxOptions) : new FirefoxDriver(webDriverDirectory, firefoxOptions);
159 | break;
160 | case Browser.Opera:
161 | OperaOptions operaOptions = new OperaOptions();
162 | operaOptions.AddArguments(browserArguments);
163 | webDriver = string.IsNullOrEmpty(webDriverDirectory) ? new OperaDriver(operaOptions) : new OperaDriver(webDriverDirectory, operaOptions);
164 | break;
165 | case Browser.Safari:
166 | SafariOptions safariOptions = new SafariOptions();
167 | if (browserArguments.Length > 0)
168 | Debug.LogWarning("Unity Browser Bridge - Safari Web Driver does not allow adding generic arguments. Please configure SafariOptions directly.");
169 | webDriver = string.IsNullOrEmpty(webDriverDirectory) ? new SafariDriver(safariOptions) : new SafariDriver(webDriverDirectory, safariOptions);
170 | break;
171 | }
172 |
173 | // open web interface
174 | webDriver.Url = "http://localhost:" + httpServerPort + "/";
175 | }
176 |
177 | // update
178 | private void Update()
179 | {
180 | // send queued messages to game objects
181 | lock (messagesWithoutValue)
182 | {
183 | while (messagesWithoutValue.Count > 0)
184 | {
185 | KeyValuePair message = messagesWithoutValue.Dequeue();
186 | string gameObjectName = message.Key;
187 | string methodName = message.Value;
188 | GameObject go = GameObject.Find(gameObjectName);
189 | if (go != null)
190 | go.SendMessage(methodName);
191 | else
192 | Debug.LogError("Unity Browser Bridge - Could not find game object '" + gameObjectName + "'");
193 | }
194 | }
195 |
196 | // send queued messages to game objects
197 | lock (messagesWithValue)
198 | {
199 | while (messagesWithValue.Count > 0)
200 | {
201 | KeyValuePair> message = messagesWithValue.Dequeue();
202 | string gameObjectName = message.Key;
203 | string methodName = message.Value.Key;
204 | object value = message.Value.Value;
205 | GameObject go = GameObject.Find(gameObjectName);
206 | if (go != null)
207 | go.SendMessage(methodName, value);
208 | else
209 | Debug.LogError("Unity Browser Bridge - Could not find game object '" + gameObjectName + "'");
210 | }
211 | }
212 | }
213 |
214 | ///
215 | /// Executes JavaScript command without return value.
216 | ///
217 | /// JavaScript command to be executed.
218 | public void ExecuteJS(string jsCommand)
219 | {
220 | if (!Ready)
221 | {
222 | Debug.LogError("Unity Browser Bridge - Browser is not ready");
223 | return;
224 | }
225 |
226 | try
227 | {
228 | ((IJavaScriptExecutor)webDriver).ExecuteScript("_ubb_logBrowserCall('" + jsCommand.Replace("'", "'") + "')");
229 | ((IJavaScriptExecutor)webDriver).ExecuteScript(jsCommand);
230 | }
231 | catch (Exception e)
232 | {
233 | Debug.LogError("Unity Browser Bridge - Could not execute command " + jsCommand + " : " + e.Message);
234 | }
235 | }
236 |
237 | ///
238 | /// Executes JavaScript command with a return value of type T
.
239 | ///
240 | /// JavaScript command to be executed.
241 | /// Type of return value.
242 | /// The value returned by the given command or default(T)
if the command could not be
243 | /// executed.
244 | public T ExecuteJS(string jsCommand)
245 | {
246 | // abort if browser is not ready
247 | if (!Ready)
248 | {
249 | Debug.LogError("Unity Browser Bridge - Browser is not ready");
250 | return default;
251 | }
252 |
253 | // execute command
254 | object result;
255 | try
256 | {
257 | ((IJavaScriptExecutor)webDriver).ExecuteScript("_ubb_logBrowserCall('" + jsCommand.Replace("'", "'") + "')");
258 | result = ((IJavaScriptExecutor)webDriver).ExecuteScript("return " + jsCommand);
259 | }
260 | catch (Exception e)
261 | {
262 | Debug.LogError("Unity Browser Bridge - Could not execute command " + jsCommand + " : " + e.Message);
263 | return default;
264 | }
265 |
266 | // convert type
267 | try
268 | {
269 | return (T)Convert.ChangeType(result, typeof(T));
270 | }
271 | catch (Exception)
272 | {
273 | Debug.LogError("Unity Browser Bridge - Could not convert return value from " + jsCommand + " to type " + typeof(T));
274 | return default;
275 | }
276 | }
277 |
278 | ///
279 | /// Enqueues a message without value to be forwarded to the given game object in the next update.
280 | ///
281 | /// Name of the game object.
282 | /// Method name.
283 | public void SendMessageToGameObject(string gameObjectName, string methodName)
284 | {
285 | lock (messagesWithoutValue)
286 | messagesWithoutValue.Enqueue(new KeyValuePair(gameObjectName, methodName));
287 | }
288 |
289 |
290 | ///
291 | /// Enqueues a message with a value to be forwarded to the given game object in the next update.
292 | ///
293 | /// Name of the game object.
294 | /// Method name.
295 | /// The value sent with the message.
296 | public void SendMessageToGameObject(string gameObjectName, string methodName, object value)
297 | {
298 | lock (messagesWithValue)
299 | messagesWithValue.Enqueue(new KeyValuePair>(gameObjectName, new KeyValuePair(methodName, value)));
300 | }
301 |
302 | # endif
303 | }
304 | }
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridge/Scripts/UnityBrowserBridge.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 20e679ddcc87f49cd93e72eaa0e674bf
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridgeExample.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 6391fac702e9644f9a4dcf0da421d92e
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridgeExample/Images.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 91dc52d50a5c84a79ad44d019483a3d0
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridgeExample/Images/Clock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sropelato/UnityBrowserBridge/9d2ed54e2ae073f2dc4f408470f416e34febda21/Assets/UnityBrowserBridgeExample/Images/Clock.png
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridgeExample/Images/Clock.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: e9dbf60fa202d463580724d90a6295c0
3 | TextureImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 11
7 | mipmaps:
8 | mipMapMode: 0
9 | enableMipMap: 0
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 | vTOnly: 0
27 | grayScaleToAlpha: 0
28 | generateCubemap: 6
29 | cubemapConvolution: 0
30 | seamlessCubemap: 0
31 | textureFormat: 1
32 | maxTextureSize: 2048
33 | textureSettings:
34 | serializedVersion: 2
35 | filterMode: 1
36 | aniso: 1
37 | mipBias: 0
38 | wrapU: 1
39 | wrapV: 1
40 | wrapW: 0
41 | nPOTScale: 0
42 | lightmap: 0
43 | compressionQuality: 50
44 | spriteMode: 1
45 | spriteExtrude: 1
46 | spriteMeshType: 1
47 | alignment: 0
48 | spritePivot: {x: 0.5, y: 0.5}
49 | spritePixelsToUnits: 100
50 | spriteBorder: {x: 0, y: 0, z: 0, w: 0}
51 | spriteGenerateFallbackPhysicsShape: 1
52 | alphaUsage: 1
53 | alphaIsTransparency: 1
54 | spriteTessellationDetail: -1
55 | textureType: 8
56 | textureShape: 1
57 | singleChannelComponent: 0
58 | flipbookRows: 1
59 | flipbookColumns: 1
60 | maxTextureSizeSet: 0
61 | compressionQualitySet: 0
62 | textureFormatSet: 0
63 | ignorePngGamma: 0
64 | applyGammaDecoding: 0
65 | platformSettings:
66 | - serializedVersion: 3
67 | buildTarget: DefaultTexturePlatform
68 | maxTextureSize: 2048
69 | resizeAlgorithm: 0
70 | textureFormat: -1
71 | textureCompression: 1
72 | compressionQuality: 50
73 | crunchedCompression: 0
74 | allowsAlphaSplitting: 0
75 | overridden: 0
76 | androidETC2FallbackOverride: 0
77 | forceMaximumCompressionQuality_BC6H_BC7: 0
78 | - serializedVersion: 3
79 | buildTarget: Standalone
80 | maxTextureSize: 2048
81 | resizeAlgorithm: 0
82 | textureFormat: -1
83 | textureCompression: 1
84 | compressionQuality: 50
85 | crunchedCompression: 0
86 | allowsAlphaSplitting: 0
87 | overridden: 0
88 | androidETC2FallbackOverride: 0
89 | forceMaximumCompressionQuality_BC6H_BC7: 0
90 | - serializedVersion: 3
91 | buildTarget: WebGL
92 | maxTextureSize: 2048
93 | resizeAlgorithm: 0
94 | textureFormat: -1
95 | textureCompression: 1
96 | compressionQuality: 50
97 | crunchedCompression: 0
98 | allowsAlphaSplitting: 0
99 | overridden: 0
100 | androidETC2FallbackOverride: 0
101 | forceMaximumCompressionQuality_BC6H_BC7: 0
102 | spriteSheet:
103 | serializedVersion: 2
104 | sprites: []
105 | outline: []
106 | physicsShape: []
107 | bones: []
108 | spriteID: 5e97eb03825dee720800000000000000
109 | internalID: 0
110 | vertices: []
111 | indices:
112 | edges: []
113 | weights: []
114 | secondaryTextures: []
115 | spritePackingTag:
116 | pSDRemoveMatte: 0
117 | pSDShowRemoveMatteOption: 0
118 | userData:
119 | assetBundleName:
120 | assetBundleVariant:
121 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridgeExample/Materials.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 5f76ae8e4b2f5494f984e5fa7cbae57b
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridgeExample/Materials/Skybox.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: Skybox
11 | m_Shader: {fileID: 104, 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 | - _BackTex:
23 | m_Texture: {fileID: 0}
24 | m_Scale: {x: 1, y: 1}
25 | m_Offset: {x: 0, y: 0}
26 | - _BumpMap:
27 | m_Texture: {fileID: 0}
28 | m_Scale: {x: 1, y: 1}
29 | m_Offset: {x: 0, y: 0}
30 | - _DetailAlbedoMap:
31 | m_Texture: {fileID: 0}
32 | m_Scale: {x: 1, y: 1}
33 | m_Offset: {x: 0, y: 0}
34 | - _DetailMask:
35 | m_Texture: {fileID: 0}
36 | m_Scale: {x: 1, y: 1}
37 | m_Offset: {x: 0, y: 0}
38 | - _DetailNormalMap:
39 | m_Texture: {fileID: 0}
40 | m_Scale: {x: 1, y: 1}
41 | m_Offset: {x: 0, y: 0}
42 | - _DownTex:
43 | m_Texture: {fileID: 0}
44 | m_Scale: {x: 1, y: 1}
45 | m_Offset: {x: 0, y: 0}
46 | - _EmissionMap:
47 | m_Texture: {fileID: 0}
48 | m_Scale: {x: 1, y: 1}
49 | m_Offset: {x: 0, y: 0}
50 | - _FrontTex:
51 | m_Texture: {fileID: 0}
52 | m_Scale: {x: 1, y: 1}
53 | m_Offset: {x: 0, y: 0}
54 | - _LeftTex:
55 | m_Texture: {fileID: 0}
56 | m_Scale: {x: 1, y: 1}
57 | m_Offset: {x: 0, y: 0}
58 | - _MainTex:
59 | m_Texture: {fileID: 0}
60 | m_Scale: {x: 1, y: 1}
61 | m_Offset: {x: 0, y: 0}
62 | - _MetallicGlossMap:
63 | m_Texture: {fileID: 0}
64 | m_Scale: {x: 1, y: 1}
65 | m_Offset: {x: 0, y: 0}
66 | - _OcclusionMap:
67 | m_Texture: {fileID: 0}
68 | m_Scale: {x: 1, y: 1}
69 | m_Offset: {x: 0, y: 0}
70 | - _ParallaxMap:
71 | m_Texture: {fileID: 0}
72 | m_Scale: {x: 1, y: 1}
73 | m_Offset: {x: 0, y: 0}
74 | - _RightTex:
75 | m_Texture: {fileID: 0}
76 | m_Scale: {x: 1, y: 1}
77 | m_Offset: {x: 0, y: 0}
78 | - _UpTex:
79 | m_Texture: {fileID: 0}
80 | m_Scale: {x: 1, y: 1}
81 | m_Offset: {x: 0, y: 0}
82 | m_Ints: []
83 | m_Floats:
84 | - _BumpScale: 1
85 | - _Cutoff: 0.5
86 | - _DetailNormalMapScale: 1
87 | - _DstBlend: 0
88 | - _Exposure: 1
89 | - _GlossMapScale: 1
90 | - _Glossiness: 0.5
91 | - _GlossyReflections: 1
92 | - _Metallic: 0
93 | - _Mode: 0
94 | - _OcclusionStrength: 1
95 | - _Parallax: 0.02
96 | - _Rotation: 0
97 | - _SmoothnessTextureChannel: 0
98 | - _SpecularHighlights: 1
99 | - _SrcBlend: 1
100 | - _UVSec: 0
101 | - _ZWrite: 1
102 | m_Colors:
103 | - _Color: {r: 1, g: 1, b: 1, a: 1}
104 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
105 | - _Tint: {r: 0.2830189, g: 0.3405653, b: 0.3773585, a: 0.5}
106 | m_BuildTextureStacks: []
107 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridgeExample/Materials/Skybox.mat.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: bff43a226ea0e4c15bf58955da3d6a2e
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 0
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridgeExample/Plugins.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 3b056e345c9254ea89421ac7f5162cab
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridgeExample/Plugins/BrowserInteraction.jslib:
--------------------------------------------------------------------------------
1 | mergeInto(LibraryManager.library, {
2 | GetDateAndTime: function (locale) {
3 | var returnStr = getDateAndTime(Pointer_stringify(locale))
4 | var bufferSize = lengthBytesUTF8(returnStr) + 1
5 | var buffer = _malloc(bufferSize)
6 | stringToUTF8(returnStr, buffer, bufferSize)
7 | return buffer
8 | },
9 | GetDateAndTimeAsync: function (locale) {
10 | getDateAndTimeAsync(Pointer_stringify(locale))
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridgeExample/Plugins/BrowserInteraction.jslib.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 5f1717c5a9aa84724aa4f2a65c62b40c
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 | WebGL: WebGL
27 | second:
28 | enabled: 1
29 | settings: {}
30 | userData:
31 | assetBundleName:
32 | assetBundleVariant:
33 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridgeExample/Scenes.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 3f05c2b15e0264d79868790a4160eaaf
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridgeExample/Scenes/UnityBrowserBridgeExample.unity:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!29 &1
4 | OcclusionCullingSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 2
7 | m_OcclusionBakeSettings:
8 | smallestOccluder: 5
9 | smallestHole: 0.25
10 | backfaceThreshold: 100
11 | m_SceneGUID: 00000000000000000000000000000000
12 | m_OcclusionCullingData: {fileID: 0}
13 | --- !u!104 &2
14 | RenderSettings:
15 | m_ObjectHideFlags: 0
16 | serializedVersion: 9
17 | m_Fog: 0
18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
19 | m_FogMode: 3
20 | m_FogDensity: 0.01
21 | m_LinearFogStart: 0
22 | m_LinearFogEnd: 300
23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
26 | m_AmbientIntensity: 1
27 | m_AmbientMode: 0
28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
29 | m_SkyboxMaterial: {fileID: 2100000, guid: bff43a226ea0e4c15bf58955da3d6a2e, type: 2}
30 | m_HaloStrength: 0.5
31 | m_FlareStrength: 1
32 | m_FlareFadeSpeed: 3
33 | m_HaloTexture: {fileID: 0}
34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
35 | m_DefaultReflectionMode: 0
36 | m_DefaultReflectionResolution: 128
37 | m_ReflectionBounces: 1
38 | m_ReflectionIntensity: 1
39 | m_CustomReflection: {fileID: 0}
40 | m_Sun: {fileID: 2116323748}
41 | m_IndirectSpecularColor: {r: 0.28173837, g: 0.339111, b: 0.3757325, a: 1}
42 | m_UseRadianceAmbientProbe: 0
43 | --- !u!157 &3
44 | LightmapSettings:
45 | m_ObjectHideFlags: 0
46 | serializedVersion: 12
47 | m_GIWorkflowMode: 1
48 | m_GISettings:
49 | serializedVersion: 2
50 | m_BounceScale: 1
51 | m_IndirectOutputScale: 1
52 | m_AlbedoBoost: 1
53 | m_EnvironmentLightingMode: 0
54 | m_EnableBakedLightmaps: 1
55 | m_EnableRealtimeLightmaps: 0
56 | m_LightmapEditorSettings:
57 | serializedVersion: 12
58 | m_Resolution: 2
59 | m_BakeResolution: 40
60 | m_AtlasSize: 1024
61 | m_AO: 0
62 | m_AOMaxDistance: 1
63 | m_CompAOExponent: 1
64 | m_CompAOExponentDirect: 0
65 | m_ExtractAmbientOcclusion: 0
66 | m_Padding: 2
67 | m_LightmapParameters: {fileID: 0}
68 | m_LightmapsBakeMode: 1
69 | m_TextureCompression: 1
70 | m_FinalGather: 0
71 | m_FinalGatherFiltering: 1
72 | m_FinalGatherRayCount: 256
73 | m_ReflectionCompression: 2
74 | m_MixedBakeMode: 2
75 | m_BakeBackend: 1
76 | m_PVRSampling: 1
77 | m_PVRDirectSampleCount: 32
78 | m_PVRSampleCount: 500
79 | m_PVRBounces: 2
80 | m_PVREnvironmentSampleCount: 500
81 | m_PVREnvironmentReferencePointCount: 2048
82 | m_PVRFilteringMode: 2
83 | m_PVRDenoiserTypeDirect: 0
84 | m_PVRDenoiserTypeIndirect: 0
85 | m_PVRDenoiserTypeAO: 0
86 | m_PVRFilterTypeDirect: 0
87 | m_PVRFilterTypeIndirect: 0
88 | m_PVRFilterTypeAO: 0
89 | m_PVREnvironmentMIS: 0
90 | m_PVRCulling: 1
91 | m_PVRFilteringGaussRadiusDirect: 1
92 | m_PVRFilteringGaussRadiusIndirect: 5
93 | m_PVRFilteringGaussRadiusAO: 2
94 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5
95 | m_PVRFilteringAtrousPositionSigmaIndirect: 2
96 | m_PVRFilteringAtrousPositionSigmaAO: 1
97 | m_ExportTrainingData: 0
98 | m_TrainingDataDestination: TrainingData
99 | m_LightProbeSampleCountMultiplier: 4
100 | m_LightingDataAsset: {fileID: 0}
101 | m_LightingSettings: {fileID: 0}
102 | --- !u!196 &4
103 | NavMeshSettings:
104 | serializedVersion: 2
105 | m_ObjectHideFlags: 0
106 | m_BuildSettings:
107 | serializedVersion: 2
108 | agentTypeID: 0
109 | agentRadius: 0.5
110 | agentHeight: 2
111 | agentSlope: 45
112 | agentClimb: 0.4
113 | ledgeDropHeight: 0
114 | maxJumpAcrossDistance: 0
115 | minRegionArea: 2
116 | manualCellSize: 0
117 | cellSize: 0.16666667
118 | manualTileSize: 0
119 | tileSize: 256
120 | accuratePlacement: 0
121 | maxJobWorkers: 0
122 | preserveTilesOutsideBounds: 0
123 | debug:
124 | m_Flags: 0
125 | m_NavMeshData: {fileID: 0}
126 | --- !u!1 &62009653
127 | GameObject:
128 | m_ObjectHideFlags: 0
129 | m_CorrespondingSourceObject: {fileID: 0}
130 | m_PrefabInstance: {fileID: 0}
131 | m_PrefabAsset: {fileID: 0}
132 | serializedVersion: 6
133 | m_Component:
134 | - component: {fileID: 62009654}
135 | - component: {fileID: 62009656}
136 | - component: {fileID: 62009655}
137 | m_Layer: 5
138 | m_Name: Text
139 | m_TagString: Untagged
140 | m_Icon: {fileID: 0}
141 | m_NavMeshLayer: 0
142 | m_StaticEditorFlags: 0
143 | m_IsActive: 1
144 | --- !u!224 &62009654
145 | RectTransform:
146 | m_ObjectHideFlags: 0
147 | m_CorrespondingSourceObject: {fileID: 0}
148 | m_PrefabInstance: {fileID: 0}
149 | m_PrefabAsset: {fileID: 0}
150 | m_GameObject: {fileID: 62009653}
151 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
152 | m_LocalPosition: {x: 0, y: 0, z: 0}
153 | m_LocalScale: {x: 1, y: 1, z: 1}
154 | m_Children: []
155 | m_Father: {fileID: 1733693706}
156 | m_RootOrder: 0
157 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
158 | m_AnchorMin: {x: 0, y: 0}
159 | m_AnchorMax: {x: 1, y: 1}
160 | m_AnchoredPosition: {x: 0, y: 0}
161 | m_SizeDelta: {x: 0, y: 0}
162 | m_Pivot: {x: 0.5, y: 0.5}
163 | --- !u!114 &62009655
164 | MonoBehaviour:
165 | m_ObjectHideFlags: 0
166 | m_CorrespondingSourceObject: {fileID: 0}
167 | m_PrefabInstance: {fileID: 0}
168 | m_PrefabAsset: {fileID: 0}
169 | m_GameObject: {fileID: 62009653}
170 | m_Enabled: 1
171 | m_EditorHideFlags: 0
172 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
173 | m_Name:
174 | m_EditorClassIdentifier:
175 | m_Material: {fileID: 0}
176 | m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
177 | m_RaycastTarget: 1
178 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
179 | m_Maskable: 1
180 | m_OnCullStateChanged:
181 | m_PersistentCalls:
182 | m_Calls: []
183 | m_FontData:
184 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
185 | m_FontSize: 24
186 | m_FontStyle: 0
187 | m_BestFit: 0
188 | m_MinSize: 0
189 | m_MaxSize: 40
190 | m_Alignment: 4
191 | m_AlignByGeometry: 0
192 | m_RichText: 1
193 | m_HorizontalOverflow: 0
194 | m_VerticalOverflow: 0
195 | m_LineSpacing: 1
196 | m_Text: Get Date And Time
197 | --- !u!222 &62009656
198 | CanvasRenderer:
199 | m_ObjectHideFlags: 0
200 | m_CorrespondingSourceObject: {fileID: 0}
201 | m_PrefabInstance: {fileID: 0}
202 | m_PrefabAsset: {fileID: 0}
203 | m_GameObject: {fileID: 62009653}
204 | m_CullTransparentMesh: 1
205 | --- !u!1 &314126188
206 | GameObject:
207 | m_ObjectHideFlags: 0
208 | m_CorrespondingSourceObject: {fileID: 0}
209 | m_PrefabInstance: {fileID: 0}
210 | m_PrefabAsset: {fileID: 0}
211 | serializedVersion: 6
212 | m_Component:
213 | - component: {fileID: 314126189}
214 | - component: {fileID: 314126191}
215 | - component: {fileID: 314126190}
216 | m_Layer: 5
217 | m_Name: Text
218 | m_TagString: Untagged
219 | m_Icon: {fileID: 0}
220 | m_NavMeshLayer: 0
221 | m_StaticEditorFlags: 0
222 | m_IsActive: 1
223 | --- !u!224 &314126189
224 | RectTransform:
225 | m_ObjectHideFlags: 0
226 | m_CorrespondingSourceObject: {fileID: 0}
227 | m_PrefabInstance: {fileID: 0}
228 | m_PrefabAsset: {fileID: 0}
229 | m_GameObject: {fileID: 314126188}
230 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
231 | m_LocalPosition: {x: 0, y: 0, z: 0}
232 | m_LocalScale: {x: 1, y: 1, z: 1}
233 | m_Children: []
234 | m_Father: {fileID: 660355430}
235 | m_RootOrder: 0
236 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
237 | m_AnchorMin: {x: 0, y: 0}
238 | m_AnchorMax: {x: 1, y: 1}
239 | m_AnchoredPosition: {x: 0, y: 0}
240 | m_SizeDelta: {x: 0, y: 0}
241 | m_Pivot: {x: 0.5, y: 0.5}
242 | --- !u!114 &314126190
243 | MonoBehaviour:
244 | m_ObjectHideFlags: 0
245 | m_CorrespondingSourceObject: {fileID: 0}
246 | m_PrefabInstance: {fileID: 0}
247 | m_PrefabAsset: {fileID: 0}
248 | m_GameObject: {fileID: 314126188}
249 | m_Enabled: 1
250 | m_EditorHideFlags: 0
251 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
252 | m_Name:
253 | m_EditorClassIdentifier:
254 | m_Material: {fileID: 0}
255 | m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
256 | m_RaycastTarget: 1
257 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
258 | m_Maskable: 1
259 | m_OnCullStateChanged:
260 | m_PersistentCalls:
261 | m_Calls: []
262 | m_FontData:
263 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
264 | m_FontSize: 24
265 | m_FontStyle: 0
266 | m_BestFit: 0
267 | m_MinSize: 0
268 | m_MaxSize: 40
269 | m_Alignment: 4
270 | m_AlignByGeometry: 0
271 | m_RichText: 1
272 | m_HorizontalOverflow: 0
273 | m_VerticalOverflow: 0
274 | m_LineSpacing: 1
275 | m_Text: Get Date And Time (Async)
276 | --- !u!222 &314126191
277 | CanvasRenderer:
278 | m_ObjectHideFlags: 0
279 | m_CorrespondingSourceObject: {fileID: 0}
280 | m_PrefabInstance: {fileID: 0}
281 | m_PrefabAsset: {fileID: 0}
282 | m_GameObject: {fileID: 314126188}
283 | m_CullTransparentMesh: 1
284 | --- !u!1 &650446293
285 | GameObject:
286 | m_ObjectHideFlags: 0
287 | m_CorrespondingSourceObject: {fileID: 0}
288 | m_PrefabInstance: {fileID: 0}
289 | m_PrefabAsset: {fileID: 0}
290 | serializedVersion: 6
291 | m_Component:
292 | - component: {fileID: 650446296}
293 | - component: {fileID: 650446295}
294 | - component: {fileID: 650446294}
295 | m_Layer: 0
296 | m_Name: EventSystem
297 | m_TagString: Untagged
298 | m_Icon: {fileID: 0}
299 | m_NavMeshLayer: 0
300 | m_StaticEditorFlags: 0
301 | m_IsActive: 1
302 | --- !u!114 &650446294
303 | MonoBehaviour:
304 | m_ObjectHideFlags: 0
305 | m_CorrespondingSourceObject: {fileID: 0}
306 | m_PrefabInstance: {fileID: 0}
307 | m_PrefabAsset: {fileID: 0}
308 | m_GameObject: {fileID: 650446293}
309 | m_Enabled: 1
310 | m_EditorHideFlags: 0
311 | m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
312 | m_Name:
313 | m_EditorClassIdentifier:
314 | m_HorizontalAxis: Horizontal
315 | m_VerticalAxis: Vertical
316 | m_SubmitButton: Submit
317 | m_CancelButton: Cancel
318 | m_InputActionsPerSecond: 10
319 | m_RepeatDelay: 0.5
320 | m_ForceModuleActive: 0
321 | --- !u!114 &650446295
322 | MonoBehaviour:
323 | m_ObjectHideFlags: 0
324 | m_CorrespondingSourceObject: {fileID: 0}
325 | m_PrefabInstance: {fileID: 0}
326 | m_PrefabAsset: {fileID: 0}
327 | m_GameObject: {fileID: 650446293}
328 | m_Enabled: 1
329 | m_EditorHideFlags: 0
330 | m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
331 | m_Name:
332 | m_EditorClassIdentifier:
333 | m_FirstSelected: {fileID: 0}
334 | m_sendNavigationEvents: 1
335 | m_DragThreshold: 10
336 | --- !u!4 &650446296
337 | Transform:
338 | m_ObjectHideFlags: 0
339 | m_CorrespondingSourceObject: {fileID: 0}
340 | m_PrefabInstance: {fileID: 0}
341 | m_PrefabAsset: {fileID: 0}
342 | m_GameObject: {fileID: 650446293}
343 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
344 | m_LocalPosition: {x: 0, y: 0, z: 0}
345 | m_LocalScale: {x: 1, y: 1, z: 1}
346 | m_Children: []
347 | m_Father: {fileID: 0}
348 | m_RootOrder: 5
349 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
350 | --- !u!1 &660355429
351 | GameObject:
352 | m_ObjectHideFlags: 0
353 | m_CorrespondingSourceObject: {fileID: 0}
354 | m_PrefabInstance: {fileID: 0}
355 | m_PrefabAsset: {fileID: 0}
356 | serializedVersion: 6
357 | m_Component:
358 | - component: {fileID: 660355430}
359 | - component: {fileID: 660355433}
360 | - component: {fileID: 660355432}
361 | - component: {fileID: 660355431}
362 | m_Layer: 5
363 | m_Name: GetDateAndTimeAsync Button
364 | m_TagString: Untagged
365 | m_Icon: {fileID: 0}
366 | m_NavMeshLayer: 0
367 | m_StaticEditorFlags: 0
368 | m_IsActive: 1
369 | --- !u!224 &660355430
370 | RectTransform:
371 | m_ObjectHideFlags: 0
372 | m_CorrespondingSourceObject: {fileID: 0}
373 | m_PrefabInstance: {fileID: 0}
374 | m_PrefabAsset: {fileID: 0}
375 | m_GameObject: {fileID: 660355429}
376 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
377 | m_LocalPosition: {x: 0, y: 0, z: 0}
378 | m_LocalScale: {x: 1, y: 1, z: 1}
379 | m_Children:
380 | - {fileID: 314126189}
381 | m_Father: {fileID: 1709289843}
382 | m_RootOrder: 5
383 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
384 | m_AnchorMin: {x: 0, y: 0}
385 | m_AnchorMax: {x: 1, y: 0}
386 | m_AnchoredPosition: {x: 0, y: 32}
387 | m_SizeDelta: {x: -64, y: 64}
388 | m_Pivot: {x: 0.5, y: 0}
389 | --- !u!114 &660355431
390 | MonoBehaviour:
391 | m_ObjectHideFlags: 0
392 | m_CorrespondingSourceObject: {fileID: 0}
393 | m_PrefabInstance: {fileID: 0}
394 | m_PrefabAsset: {fileID: 0}
395 | m_GameObject: {fileID: 660355429}
396 | m_Enabled: 1
397 | m_EditorHideFlags: 0
398 | m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
399 | m_Name:
400 | m_EditorClassIdentifier:
401 | m_Navigation:
402 | m_Mode: 0
403 | m_WrapAround: 0
404 | m_SelectOnUp: {fileID: 0}
405 | m_SelectOnDown: {fileID: 0}
406 | m_SelectOnLeft: {fileID: 0}
407 | m_SelectOnRight: {fileID: 0}
408 | m_Transition: 1
409 | m_Colors:
410 | m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
411 | m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
412 | m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
413 | m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
414 | m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
415 | m_ColorMultiplier: 1
416 | m_FadeDuration: 0.1
417 | m_SpriteState:
418 | m_HighlightedSprite: {fileID: 0}
419 | m_PressedSprite: {fileID: 0}
420 | m_SelectedSprite: {fileID: 0}
421 | m_DisabledSprite: {fileID: 0}
422 | m_AnimationTriggers:
423 | m_NormalTrigger: Normal
424 | m_HighlightedTrigger: Highlighted
425 | m_PressedTrigger: Pressed
426 | m_SelectedTrigger: Selected
427 | m_DisabledTrigger: Disabled
428 | m_Interactable: 1
429 | m_TargetGraphic: {fileID: 660355432}
430 | m_OnClick:
431 | m_PersistentCalls:
432 | m_Calls: []
433 | --- !u!114 &660355432
434 | MonoBehaviour:
435 | m_ObjectHideFlags: 0
436 | m_CorrespondingSourceObject: {fileID: 0}
437 | m_PrefabInstance: {fileID: 0}
438 | m_PrefabAsset: {fileID: 0}
439 | m_GameObject: {fileID: 660355429}
440 | m_Enabled: 1
441 | m_EditorHideFlags: 0
442 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
443 | m_Name:
444 | m_EditorClassIdentifier:
445 | m_Material: {fileID: 0}
446 | m_Color: {r: 1, g: 1, b: 1, a: 1}
447 | m_RaycastTarget: 1
448 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
449 | m_Maskable: 1
450 | m_OnCullStateChanged:
451 | m_PersistentCalls:
452 | m_Calls: []
453 | m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
454 | m_Type: 1
455 | m_PreserveAspect: 0
456 | m_FillCenter: 1
457 | m_FillMethod: 4
458 | m_FillAmount: 1
459 | m_FillClockwise: 1
460 | m_FillOrigin: 0
461 | m_UseSpriteMesh: 0
462 | m_PixelsPerUnitMultiplier: 1
463 | --- !u!222 &660355433
464 | CanvasRenderer:
465 | m_ObjectHideFlags: 0
466 | m_CorrespondingSourceObject: {fileID: 0}
467 | m_PrefabInstance: {fileID: 0}
468 | m_PrefabAsset: {fileID: 0}
469 | m_GameObject: {fileID: 660355429}
470 | m_CullTransparentMesh: 1
471 | --- !u!1 &796187669
472 | GameObject:
473 | m_ObjectHideFlags: 0
474 | m_CorrespondingSourceObject: {fileID: 0}
475 | m_PrefabInstance: {fileID: 0}
476 | m_PrefabAsset: {fileID: 0}
477 | serializedVersion: 6
478 | m_Component:
479 | - component: {fileID: 796187670}
480 | - component: {fileID: 796187672}
481 | - component: {fileID: 796187671}
482 | m_Layer: 5
483 | m_Name: Title Text
484 | m_TagString: Untagged
485 | m_Icon: {fileID: 0}
486 | m_NavMeshLayer: 0
487 | m_StaticEditorFlags: 0
488 | m_IsActive: 1
489 | --- !u!224 &796187670
490 | RectTransform:
491 | m_ObjectHideFlags: 0
492 | m_CorrespondingSourceObject: {fileID: 0}
493 | m_PrefabInstance: {fileID: 0}
494 | m_PrefabAsset: {fileID: 0}
495 | m_GameObject: {fileID: 796187669}
496 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
497 | m_LocalPosition: {x: 0, y: 0, z: 0}
498 | m_LocalScale: {x: 1, y: 1, z: 1}
499 | m_Children: []
500 | m_Father: {fileID: 1709289843}
501 | m_RootOrder: 0
502 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
503 | m_AnchorMin: {x: 0, y: 1}
504 | m_AnchorMax: {x: 1, y: 1}
505 | m_AnchoredPosition: {x: 0, y: -32}
506 | m_SizeDelta: {x: -64, y: 64}
507 | m_Pivot: {x: 0.5, y: 1}
508 | --- !u!114 &796187671
509 | MonoBehaviour:
510 | m_ObjectHideFlags: 0
511 | m_CorrespondingSourceObject: {fileID: 0}
512 | m_PrefabInstance: {fileID: 0}
513 | m_PrefabAsset: {fileID: 0}
514 | m_GameObject: {fileID: 796187669}
515 | m_Enabled: 1
516 | m_EditorHideFlags: 0
517 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
518 | m_Name:
519 | m_EditorClassIdentifier:
520 | m_Material: {fileID: 0}
521 | m_Color: {r: 1, g: 1, b: 1, a: 1}
522 | m_RaycastTarget: 1
523 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
524 | m_Maskable: 1
525 | m_OnCullStateChanged:
526 | m_PersistentCalls:
527 | m_Calls: []
528 | m_FontData:
529 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
530 | m_FontSize: 36
531 | m_FontStyle: 1
532 | m_BestFit: 0
533 | m_MinSize: 0
534 | m_MaxSize: 100
535 | m_Alignment: 3
536 | m_AlignByGeometry: 0
537 | m_RichText: 1
538 | m_HorizontalOverflow: 0
539 | m_VerticalOverflow: 0
540 | m_LineSpacing: 1
541 | m_Text: Unity Browser Bridge Example
542 | --- !u!222 &796187672
543 | CanvasRenderer:
544 | m_ObjectHideFlags: 0
545 | m_CorrespondingSourceObject: {fileID: 0}
546 | m_PrefabInstance: {fileID: 0}
547 | m_PrefabAsset: {fileID: 0}
548 | m_GameObject: {fileID: 796187669}
549 | m_CullTransparentMesh: 1
550 | --- !u!1 &963194225
551 | GameObject:
552 | m_ObjectHideFlags: 0
553 | m_CorrespondingSourceObject: {fileID: 0}
554 | m_PrefabInstance: {fileID: 0}
555 | m_PrefabAsset: {fileID: 0}
556 | serializedVersion: 6
557 | m_Component:
558 | - component: {fileID: 963194228}
559 | - component: {fileID: 963194227}
560 | - component: {fileID: 963194226}
561 | m_Layer: 0
562 | m_Name: Main Camera
563 | m_TagString: MainCamera
564 | m_Icon: {fileID: 0}
565 | m_NavMeshLayer: 0
566 | m_StaticEditorFlags: 0
567 | m_IsActive: 1
568 | --- !u!81 &963194226
569 | AudioListener:
570 | m_ObjectHideFlags: 0
571 | m_CorrespondingSourceObject: {fileID: 0}
572 | m_PrefabInstance: {fileID: 0}
573 | m_PrefabAsset: {fileID: 0}
574 | m_GameObject: {fileID: 963194225}
575 | m_Enabled: 1
576 | --- !u!20 &963194227
577 | Camera:
578 | m_ObjectHideFlags: 0
579 | m_CorrespondingSourceObject: {fileID: 0}
580 | m_PrefabInstance: {fileID: 0}
581 | m_PrefabAsset: {fileID: 0}
582 | m_GameObject: {fileID: 963194225}
583 | m_Enabled: 1
584 | serializedVersion: 2
585 | m_ClearFlags: 1
586 | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
587 | m_projectionMatrixMode: 1
588 | m_GateFitMode: 2
589 | m_FOVAxisMode: 0
590 | m_SensorSize: {x: 36, y: 24}
591 | m_LensShift: {x: 0, y: 0}
592 | m_FocalLength: 50
593 | m_NormalizedViewPortRect:
594 | serializedVersion: 2
595 | x: 0
596 | y: 0
597 | width: 1
598 | height: 1
599 | near clip plane: 0.3
600 | far clip plane: 1000
601 | field of view: 60
602 | orthographic: 0
603 | orthographic size: 5
604 | m_Depth: -1
605 | m_CullingMask:
606 | serializedVersion: 2
607 | m_Bits: 4294967295
608 | m_RenderingPath: -1
609 | m_TargetTexture: {fileID: 0}
610 | m_TargetDisplay: 0
611 | m_TargetEye: 3
612 | m_HDR: 1
613 | m_AllowMSAA: 1
614 | m_AllowDynamicResolution: 0
615 | m_ForceIntoRT: 0
616 | m_OcclusionCulling: 1
617 | m_StereoConvergence: 10
618 | m_StereoSeparation: 0.022
619 | --- !u!4 &963194228
620 | Transform:
621 | m_ObjectHideFlags: 0
622 | m_CorrespondingSourceObject: {fileID: 0}
623 | m_PrefabInstance: {fileID: 0}
624 | m_PrefabAsset: {fileID: 0}
625 | m_GameObject: {fileID: 963194225}
626 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
627 | m_LocalPosition: {x: 0, y: 1, z: -10}
628 | m_LocalScale: {x: 1, y: 1, z: 1}
629 | m_Children: []
630 | m_Father: {fileID: 0}
631 | m_RootOrder: 2
632 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
633 | --- !u!1 &979398125
634 | GameObject:
635 | m_ObjectHideFlags: 0
636 | m_CorrespondingSourceObject: {fileID: 0}
637 | m_PrefabInstance: {fileID: 0}
638 | m_PrefabAsset: {fileID: 0}
639 | serializedVersion: 6
640 | m_Component:
641 | - component: {fileID: 979398126}
642 | - component: {fileID: 979398128}
643 | - component: {fileID: 979398127}
644 | m_Layer: 5
645 | m_Name: Clock
646 | m_TagString: Untagged
647 | m_Icon: {fileID: 0}
648 | m_NavMeshLayer: 0
649 | m_StaticEditorFlags: 0
650 | m_IsActive: 1
651 | --- !u!224 &979398126
652 | RectTransform:
653 | m_ObjectHideFlags: 0
654 | m_CorrespondingSourceObject: {fileID: 0}
655 | m_PrefabInstance: {fileID: 0}
656 | m_PrefabAsset: {fileID: 0}
657 | m_GameObject: {fileID: 979398125}
658 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
659 | m_LocalPosition: {x: 0, y: 0, z: 0}
660 | m_LocalScale: {x: 1, y: 1, z: 1}
661 | m_Children: []
662 | m_Father: {fileID: 1709289843}
663 | m_RootOrder: 2
664 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
665 | m_AnchorMin: {x: 0, y: 0}
666 | m_AnchorMax: {x: 0, y: 0}
667 | m_AnchoredPosition: {x: 64, y: 292}
668 | m_SizeDelta: {x: 64, y: 64}
669 | m_Pivot: {x: 0.5, y: 0.5}
670 | --- !u!114 &979398127
671 | MonoBehaviour:
672 | m_ObjectHideFlags: 0
673 | m_CorrespondingSourceObject: {fileID: 0}
674 | m_PrefabInstance: {fileID: 0}
675 | m_PrefabAsset: {fileID: 0}
676 | m_GameObject: {fileID: 979398125}
677 | m_Enabled: 1
678 | m_EditorHideFlags: 0
679 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
680 | m_Name:
681 | m_EditorClassIdentifier:
682 | m_Material: {fileID: 0}
683 | m_Color: {r: 1, g: 1, b: 1, a: 1}
684 | m_RaycastTarget: 1
685 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
686 | m_Maskable: 1
687 | m_OnCullStateChanged:
688 | m_PersistentCalls:
689 | m_Calls: []
690 | m_Sprite: {fileID: 21300000, guid: e9dbf60fa202d463580724d90a6295c0, type: 3}
691 | m_Type: 0
692 | m_PreserveAspect: 0
693 | m_FillCenter: 1
694 | m_FillMethod: 4
695 | m_FillAmount: 1
696 | m_FillClockwise: 1
697 | m_FillOrigin: 0
698 | m_UseSpriteMesh: 0
699 | m_PixelsPerUnitMultiplier: 1
700 | --- !u!222 &979398128
701 | CanvasRenderer:
702 | m_ObjectHideFlags: 0
703 | m_CorrespondingSourceObject: {fileID: 0}
704 | m_PrefabInstance: {fileID: 0}
705 | m_PrefabAsset: {fileID: 0}
706 | m_GameObject: {fileID: 979398125}
707 | m_CullTransparentMesh: 1
708 | --- !u!1 &1279738475
709 | GameObject:
710 | m_ObjectHideFlags: 0
711 | m_CorrespondingSourceObject: {fileID: 0}
712 | m_PrefabInstance: {fileID: 0}
713 | m_PrefabAsset: {fileID: 0}
714 | serializedVersion: 6
715 | m_Component:
716 | - component: {fileID: 1279738479}
717 | - component: {fileID: 1279738478}
718 | - component: {fileID: 1279738477}
719 | - component: {fileID: 1279738476}
720 | m_Layer: 5
721 | m_Name: Canvas
722 | m_TagString: Untagged
723 | m_Icon: {fileID: 0}
724 | m_NavMeshLayer: 0
725 | m_StaticEditorFlags: 0
726 | m_IsActive: 1
727 | --- !u!114 &1279738476
728 | MonoBehaviour:
729 | m_ObjectHideFlags: 0
730 | m_CorrespondingSourceObject: {fileID: 0}
731 | m_PrefabInstance: {fileID: 0}
732 | m_PrefabAsset: {fileID: 0}
733 | m_GameObject: {fileID: 1279738475}
734 | m_Enabled: 1
735 | m_EditorHideFlags: 0
736 | m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
737 | m_Name:
738 | m_EditorClassIdentifier:
739 | m_IgnoreReversedGraphics: 1
740 | m_BlockingObjects: 0
741 | m_BlockingMask:
742 | serializedVersion: 2
743 | m_Bits: 4294967295
744 | --- !u!114 &1279738477
745 | MonoBehaviour:
746 | m_ObjectHideFlags: 0
747 | m_CorrespondingSourceObject: {fileID: 0}
748 | m_PrefabInstance: {fileID: 0}
749 | m_PrefabAsset: {fileID: 0}
750 | m_GameObject: {fileID: 1279738475}
751 | m_Enabled: 1
752 | m_EditorHideFlags: 0
753 | m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
754 | m_Name:
755 | m_EditorClassIdentifier:
756 | m_UiScaleMode: 1
757 | m_ReferencePixelsPerUnit: 100
758 | m_ScaleFactor: 1
759 | m_ReferenceResolution: {x: 1144, y: 1000}
760 | m_ScreenMatchMode: 1
761 | m_MatchWidthOrHeight: 0.496
762 | m_PhysicalUnit: 3
763 | m_FallbackScreenDPI: 96
764 | m_DefaultSpriteDPI: 96
765 | m_DynamicPixelsPerUnit: 1
766 | m_PresetInfoIsWorld: 0
767 | --- !u!223 &1279738478
768 | Canvas:
769 | m_ObjectHideFlags: 0
770 | m_CorrespondingSourceObject: {fileID: 0}
771 | m_PrefabInstance: {fileID: 0}
772 | m_PrefabAsset: {fileID: 0}
773 | m_GameObject: {fileID: 1279738475}
774 | m_Enabled: 1
775 | serializedVersion: 3
776 | m_RenderMode: 0
777 | m_Camera: {fileID: 0}
778 | m_PlaneDistance: 100
779 | m_PixelPerfect: 0
780 | m_ReceivesEvents: 1
781 | m_OverrideSorting: 0
782 | m_OverridePixelPerfect: 0
783 | m_SortingBucketNormalizedSize: 0
784 | m_AdditionalShaderChannelsFlag: 0
785 | m_SortingLayerID: 0
786 | m_SortingOrder: 0
787 | m_TargetDisplay: 0
788 | --- !u!224 &1279738479
789 | RectTransform:
790 | m_ObjectHideFlags: 0
791 | m_CorrespondingSourceObject: {fileID: 0}
792 | m_PrefabInstance: {fileID: 0}
793 | m_PrefabAsset: {fileID: 0}
794 | m_GameObject: {fileID: 1279738475}
795 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
796 | m_LocalPosition: {x: 0, y: 0, z: 0}
797 | m_LocalScale: {x: 0, y: 0, z: 0}
798 | m_Children:
799 | - {fileID: 1709289843}
800 | m_Father: {fileID: 0}
801 | m_RootOrder: 4
802 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
803 | m_AnchorMin: {x: 0, y: 0}
804 | m_AnchorMax: {x: 0, y: 0}
805 | m_AnchoredPosition: {x: 0, y: 0}
806 | m_SizeDelta: {x: 0, y: 0}
807 | m_Pivot: {x: 0, y: 0}
808 | --- !u!1 &1680063253
809 | GameObject:
810 | m_ObjectHideFlags: 0
811 | m_CorrespondingSourceObject: {fileID: 0}
812 | m_PrefabInstance: {fileID: 0}
813 | m_PrefabAsset: {fileID: 0}
814 | serializedVersion: 6
815 | m_Component:
816 | - component: {fileID: 1680063256}
817 | - component: {fileID: 1680063255}
818 | m_Layer: 0
819 | m_Name: Main
820 | m_TagString: Untagged
821 | m_Icon: {fileID: 0}
822 | m_NavMeshLayer: 0
823 | m_StaticEditorFlags: 0
824 | m_IsActive: 1
825 | --- !u!114 &1680063255
826 | MonoBehaviour:
827 | m_ObjectHideFlags: 0
828 | m_CorrespondingSourceObject: {fileID: 0}
829 | m_PrefabInstance: {fileID: 0}
830 | m_PrefabAsset: {fileID: 0}
831 | m_GameObject: {fileID: 1680063253}
832 | m_Enabled: 1
833 | m_EditorHideFlags: 0
834 | m_Script: {fileID: 11500000, guid: 6f98d8b4f95db46e3883cd7e484c41c7, type: 3}
835 | m_Name:
836 | m_EditorClassIdentifier:
837 | dateAndTimeText: {fileID: 1894354749}
838 | getDateAndTimeButton: {fileID: 1733693707}
839 | getDateAndTimeAsyncButton: {fileID: 660355431}
840 | locale: en-GB
841 | --- !u!4 &1680063256
842 | Transform:
843 | m_ObjectHideFlags: 0
844 | m_CorrespondingSourceObject: {fileID: 0}
845 | m_PrefabInstance: {fileID: 0}
846 | m_PrefabAsset: {fileID: 0}
847 | m_GameObject: {fileID: 1680063253}
848 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
849 | m_LocalPosition: {x: 0, y: 0, z: 0}
850 | m_LocalScale: {x: 1, y: 1, z: 1}
851 | m_Children: []
852 | m_Father: {fileID: 0}
853 | m_RootOrder: 1
854 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
855 | --- !u!1 &1709289842
856 | GameObject:
857 | m_ObjectHideFlags: 0
858 | m_CorrespondingSourceObject: {fileID: 0}
859 | m_PrefabInstance: {fileID: 0}
860 | m_PrefabAsset: {fileID: 0}
861 | serializedVersion: 6
862 | m_Component:
863 | - component: {fileID: 1709289843}
864 | - component: {fileID: 1709289845}
865 | - component: {fileID: 1709289844}
866 | m_Layer: 5
867 | m_Name: Background
868 | m_TagString: Untagged
869 | m_Icon: {fileID: 0}
870 | m_NavMeshLayer: 0
871 | m_StaticEditorFlags: 0
872 | m_IsActive: 1
873 | --- !u!224 &1709289843
874 | RectTransform:
875 | m_ObjectHideFlags: 0
876 | m_CorrespondingSourceObject: {fileID: 0}
877 | m_PrefabInstance: {fileID: 0}
878 | m_PrefabAsset: {fileID: 0}
879 | m_GameObject: {fileID: 1709289842}
880 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
881 | m_LocalPosition: {x: 0, y: 0, z: 0}
882 | m_LocalScale: {x: 1, y: 1, z: 1}
883 | m_Children:
884 | - {fileID: 796187670}
885 | - {fileID: 1713585616}
886 | - {fileID: 979398126}
887 | - {fileID: 1894354748}
888 | - {fileID: 1733693706}
889 | - {fileID: 660355430}
890 | m_Father: {fileID: 1279738479}
891 | m_RootOrder: 0
892 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
893 | m_AnchorMin: {x: 0.5, y: 0.5}
894 | m_AnchorMax: {x: 0.5, y: 0.5}
895 | m_AnchoredPosition: {x: 0, y: 0}
896 | m_SizeDelta: {x: 960, y: 816}
897 | m_Pivot: {x: 0.5, y: 0.5}
898 | --- !u!114 &1709289844
899 | MonoBehaviour:
900 | m_ObjectHideFlags: 0
901 | m_CorrespondingSourceObject: {fileID: 0}
902 | m_PrefabInstance: {fileID: 0}
903 | m_PrefabAsset: {fileID: 0}
904 | m_GameObject: {fileID: 1709289842}
905 | m_Enabled: 1
906 | m_EditorHideFlags: 0
907 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
908 | m_Name:
909 | m_EditorClassIdentifier:
910 | m_Material: {fileID: 0}
911 | m_Color: {r: 0, g: 0, b: 0, a: 0.5019608}
912 | m_RaycastTarget: 1
913 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
914 | m_Maskable: 1
915 | m_OnCullStateChanged:
916 | m_PersistentCalls:
917 | m_Calls: []
918 | m_Sprite: {fileID: 0}
919 | m_Type: 0
920 | m_PreserveAspect: 0
921 | m_FillCenter: 1
922 | m_FillMethod: 4
923 | m_FillAmount: 1
924 | m_FillClockwise: 1
925 | m_FillOrigin: 0
926 | m_UseSpriteMesh: 0
927 | m_PixelsPerUnitMultiplier: 1
928 | --- !u!222 &1709289845
929 | CanvasRenderer:
930 | m_ObjectHideFlags: 0
931 | m_CorrespondingSourceObject: {fileID: 0}
932 | m_PrefabInstance: {fileID: 0}
933 | m_PrefabAsset: {fileID: 0}
934 | m_GameObject: {fileID: 1709289842}
935 | m_CullTransparentMesh: 1
936 | --- !u!1 &1713585615
937 | GameObject:
938 | m_ObjectHideFlags: 0
939 | m_CorrespondingSourceObject: {fileID: 0}
940 | m_PrefabInstance: {fileID: 0}
941 | m_PrefabAsset: {fileID: 0}
942 | serializedVersion: 6
943 | m_Component:
944 | - component: {fileID: 1713585616}
945 | - component: {fileID: 1713585618}
946 | - component: {fileID: 1713585617}
947 | m_Layer: 5
948 | m_Name: Info Text
949 | m_TagString: Untagged
950 | m_Icon: {fileID: 0}
951 | m_NavMeshLayer: 0
952 | m_StaticEditorFlags: 0
953 | m_IsActive: 1
954 | --- !u!224 &1713585616
955 | RectTransform:
956 | m_ObjectHideFlags: 0
957 | m_CorrespondingSourceObject: {fileID: 0}
958 | m_PrefabInstance: {fileID: 0}
959 | m_PrefabAsset: {fileID: 0}
960 | m_GameObject: {fileID: 1713585615}
961 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
962 | m_LocalPosition: {x: 0, y: 0, z: 0}
963 | m_LocalScale: {x: 1, y: 1, z: 1}
964 | m_Children: []
965 | m_Father: {fileID: 1709289843}
966 | m_RootOrder: 1
967 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
968 | m_AnchorMin: {x: 0, y: 1}
969 | m_AnchorMax: {x: 1, y: 1}
970 | m_AnchoredPosition: {x: 0, y: -132}
971 | m_SizeDelta: {x: -64, y: 336}
972 | m_Pivot: {x: 0.5, y: 1}
973 | --- !u!114 &1713585617
974 | MonoBehaviour:
975 | m_ObjectHideFlags: 0
976 | m_CorrespondingSourceObject: {fileID: 0}
977 | m_PrefabInstance: {fileID: 0}
978 | m_PrefabAsset: {fileID: 0}
979 | m_GameObject: {fileID: 1713585615}
980 | m_Enabled: 1
981 | m_EditorHideFlags: 0
982 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
983 | m_Name:
984 | m_EditorClassIdentifier:
985 | m_Material: {fileID: 0}
986 | m_Color: {r: 1, g: 1, b: 1, a: 1}
987 | m_RaycastTarget: 1
988 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
989 | m_Maskable: 1
990 | m_OnCullStateChanged:
991 | m_PersistentCalls:
992 | m_Calls: []
993 | m_FontData:
994 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
995 | m_FontSize: 32
996 | m_FontStyle: 0
997 | m_BestFit: 0
998 | m_MinSize: 0
999 | m_MaxSize: 100
1000 | m_Alignment: 0
1001 | m_AlignByGeometry: 0
1002 | m_RichText: 1
1003 | m_HorizontalOverflow: 0
1004 | m_VerticalOverflow: 1
1005 | m_LineSpacing: 1.1
1006 | m_Text: 'This is an example scene to showcase the functionality of Unity Browser
1007 | Bridge.
1008 |
1009 | When compiled into a WebGL project, the two buttons will invoke
1010 | the getDateAndTime resp. getDateAndTimeAsync
1011 | functions defined in WebGLTemplates/UBBExample/TemplateData/myscript.js .
1012 |
1013 | In
1014 | the Unity editor, the same functions are executed in a web browser via Unity
1015 | Browser Bridge.'
1016 | --- !u!222 &1713585618
1017 | CanvasRenderer:
1018 | m_ObjectHideFlags: 0
1019 | m_CorrespondingSourceObject: {fileID: 0}
1020 | m_PrefabInstance: {fileID: 0}
1021 | m_PrefabAsset: {fileID: 0}
1022 | m_GameObject: {fileID: 1713585615}
1023 | m_CullTransparentMesh: 1
1024 | --- !u!1 &1733693705
1025 | GameObject:
1026 | m_ObjectHideFlags: 0
1027 | m_CorrespondingSourceObject: {fileID: 0}
1028 | m_PrefabInstance: {fileID: 0}
1029 | m_PrefabAsset: {fileID: 0}
1030 | serializedVersion: 6
1031 | m_Component:
1032 | - component: {fileID: 1733693706}
1033 | - component: {fileID: 1733693709}
1034 | - component: {fileID: 1733693708}
1035 | - component: {fileID: 1733693707}
1036 | m_Layer: 5
1037 | m_Name: GetDateAndTime Button
1038 | m_TagString: Untagged
1039 | m_Icon: {fileID: 0}
1040 | m_NavMeshLayer: 0
1041 | m_StaticEditorFlags: 0
1042 | m_IsActive: 1
1043 | --- !u!224 &1733693706
1044 | RectTransform:
1045 | m_ObjectHideFlags: 0
1046 | m_CorrespondingSourceObject: {fileID: 0}
1047 | m_PrefabInstance: {fileID: 0}
1048 | m_PrefabAsset: {fileID: 0}
1049 | m_GameObject: {fileID: 1733693705}
1050 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
1051 | m_LocalPosition: {x: 0, y: 0, z: 0}
1052 | m_LocalScale: {x: 1, y: 1, z: 1}
1053 | m_Children:
1054 | - {fileID: 62009654}
1055 | m_Father: {fileID: 1709289843}
1056 | m_RootOrder: 4
1057 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
1058 | m_AnchorMin: {x: 0, y: 0}
1059 | m_AnchorMax: {x: 1, y: 0}
1060 | m_AnchoredPosition: {x: 0, y: 128}
1061 | m_SizeDelta: {x: -64, y: 64}
1062 | m_Pivot: {x: 0.5, y: 0}
1063 | --- !u!114 &1733693707
1064 | MonoBehaviour:
1065 | m_ObjectHideFlags: 0
1066 | m_CorrespondingSourceObject: {fileID: 0}
1067 | m_PrefabInstance: {fileID: 0}
1068 | m_PrefabAsset: {fileID: 0}
1069 | m_GameObject: {fileID: 1733693705}
1070 | m_Enabled: 1
1071 | m_EditorHideFlags: 0
1072 | m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
1073 | m_Name:
1074 | m_EditorClassIdentifier:
1075 | m_Navigation:
1076 | m_Mode: 0
1077 | m_WrapAround: 0
1078 | m_SelectOnUp: {fileID: 0}
1079 | m_SelectOnDown: {fileID: 0}
1080 | m_SelectOnLeft: {fileID: 0}
1081 | m_SelectOnRight: {fileID: 0}
1082 | m_Transition: 1
1083 | m_Colors:
1084 | m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
1085 | m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
1086 | m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
1087 | m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
1088 | m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
1089 | m_ColorMultiplier: 1
1090 | m_FadeDuration: 0.1
1091 | m_SpriteState:
1092 | m_HighlightedSprite: {fileID: 0}
1093 | m_PressedSprite: {fileID: 0}
1094 | m_SelectedSprite: {fileID: 0}
1095 | m_DisabledSprite: {fileID: 0}
1096 | m_AnimationTriggers:
1097 | m_NormalTrigger: Normal
1098 | m_HighlightedTrigger: Highlighted
1099 | m_PressedTrigger: Pressed
1100 | m_SelectedTrigger: Selected
1101 | m_DisabledTrigger: Disabled
1102 | m_Interactable: 1
1103 | m_TargetGraphic: {fileID: 1733693708}
1104 | m_OnClick:
1105 | m_PersistentCalls:
1106 | m_Calls: []
1107 | --- !u!114 &1733693708
1108 | MonoBehaviour:
1109 | m_ObjectHideFlags: 0
1110 | m_CorrespondingSourceObject: {fileID: 0}
1111 | m_PrefabInstance: {fileID: 0}
1112 | m_PrefabAsset: {fileID: 0}
1113 | m_GameObject: {fileID: 1733693705}
1114 | m_Enabled: 1
1115 | m_EditorHideFlags: 0
1116 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
1117 | m_Name:
1118 | m_EditorClassIdentifier:
1119 | m_Material: {fileID: 0}
1120 | m_Color: {r: 1, g: 1, b: 1, a: 1}
1121 | m_RaycastTarget: 1
1122 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
1123 | m_Maskable: 1
1124 | m_OnCullStateChanged:
1125 | m_PersistentCalls:
1126 | m_Calls: []
1127 | m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
1128 | m_Type: 1
1129 | m_PreserveAspect: 0
1130 | m_FillCenter: 1
1131 | m_FillMethod: 4
1132 | m_FillAmount: 1
1133 | m_FillClockwise: 1
1134 | m_FillOrigin: 0
1135 | m_UseSpriteMesh: 0
1136 | m_PixelsPerUnitMultiplier: 1
1137 | --- !u!222 &1733693709
1138 | CanvasRenderer:
1139 | m_ObjectHideFlags: 0
1140 | m_CorrespondingSourceObject: {fileID: 0}
1141 | m_PrefabInstance: {fileID: 0}
1142 | m_PrefabAsset: {fileID: 0}
1143 | m_GameObject: {fileID: 1733693705}
1144 | m_CullTransparentMesh: 1
1145 | --- !u!1 &1894354747
1146 | GameObject:
1147 | m_ObjectHideFlags: 0
1148 | m_CorrespondingSourceObject: {fileID: 0}
1149 | m_PrefabInstance: {fileID: 0}
1150 | m_PrefabAsset: {fileID: 0}
1151 | serializedVersion: 6
1152 | m_Component:
1153 | - component: {fileID: 1894354748}
1154 | - component: {fileID: 1894354750}
1155 | - component: {fileID: 1894354749}
1156 | m_Layer: 5
1157 | m_Name: DateAndTime Text
1158 | m_TagString: Untagged
1159 | m_Icon: {fileID: 0}
1160 | m_NavMeshLayer: 0
1161 | m_StaticEditorFlags: 0
1162 | m_IsActive: 1
1163 | --- !u!224 &1894354748
1164 | RectTransform:
1165 | m_ObjectHideFlags: 0
1166 | m_CorrespondingSourceObject: {fileID: 0}
1167 | m_PrefabInstance: {fileID: 0}
1168 | m_PrefabAsset: {fileID: 0}
1169 | m_GameObject: {fileID: 1894354747}
1170 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
1171 | m_LocalPosition: {x: 0, y: 0, z: 0}
1172 | m_LocalScale: {x: 1, y: 1, z: 1}
1173 | m_Children: []
1174 | m_Father: {fileID: 1709289843}
1175 | m_RootOrder: 3
1176 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
1177 | m_AnchorMin: {x: 0, y: 0}
1178 | m_AnchorMax: {x: 1, y: 0}
1179 | m_AnchoredPosition: {x: 128, y: 292}
1180 | m_SizeDelta: {x: -160, y: 64}
1181 | m_Pivot: {x: 0, y: 0.5}
1182 | --- !u!114 &1894354749
1183 | MonoBehaviour:
1184 | m_ObjectHideFlags: 0
1185 | m_CorrespondingSourceObject: {fileID: 0}
1186 | m_PrefabInstance: {fileID: 0}
1187 | m_PrefabAsset: {fileID: 0}
1188 | m_GameObject: {fileID: 1894354747}
1189 | m_Enabled: 1
1190 | m_EditorHideFlags: 0
1191 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
1192 | m_Name:
1193 | m_EditorClassIdentifier:
1194 | m_Material: {fileID: 0}
1195 | m_Color: {r: 1, g: 1, b: 1, a: 1}
1196 | m_RaycastTarget: 1
1197 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
1198 | m_Maskable: 1
1199 | m_OnCullStateChanged:
1200 | m_PersistentCalls:
1201 | m_Calls: []
1202 | m_FontData:
1203 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
1204 | m_FontSize: 32
1205 | m_FontStyle: 0
1206 | m_BestFit: 0
1207 | m_MinSize: 0
1208 | m_MaxSize: 100
1209 | m_Alignment: 3
1210 | m_AlignByGeometry: 0
1211 | m_RichText: 1
1212 | m_HorizontalOverflow: 0
1213 | m_VerticalOverflow: 0
1214 | m_LineSpacing: 1
1215 | m_Text: ---
1216 | --- !u!222 &1894354750
1217 | CanvasRenderer:
1218 | m_ObjectHideFlags: 0
1219 | m_CorrespondingSourceObject: {fileID: 0}
1220 | m_PrefabInstance: {fileID: 0}
1221 | m_PrefabAsset: {fileID: 0}
1222 | m_GameObject: {fileID: 1894354747}
1223 | m_CullTransparentMesh: 1
1224 | --- !u!1 &2116323747
1225 | GameObject:
1226 | m_ObjectHideFlags: 0
1227 | m_CorrespondingSourceObject: {fileID: 0}
1228 | m_PrefabInstance: {fileID: 0}
1229 | m_PrefabAsset: {fileID: 0}
1230 | serializedVersion: 6
1231 | m_Component:
1232 | - component: {fileID: 2116323749}
1233 | - component: {fileID: 2116323748}
1234 | m_Layer: 0
1235 | m_Name: Directional Light
1236 | m_TagString: Untagged
1237 | m_Icon: {fileID: 0}
1238 | m_NavMeshLayer: 0
1239 | m_StaticEditorFlags: 0
1240 | m_IsActive: 1
1241 | --- !u!108 &2116323748
1242 | Light:
1243 | m_ObjectHideFlags: 0
1244 | m_CorrespondingSourceObject: {fileID: 0}
1245 | m_PrefabInstance: {fileID: 0}
1246 | m_PrefabAsset: {fileID: 0}
1247 | m_GameObject: {fileID: 2116323747}
1248 | m_Enabled: 1
1249 | serializedVersion: 10
1250 | m_Type: 1
1251 | m_Shape: 0
1252 | m_Color: {r: 1, g: 1, b: 1, a: 1}
1253 | m_Intensity: 1
1254 | m_Range: 10
1255 | m_SpotAngle: 30
1256 | m_InnerSpotAngle: 21.80208
1257 | m_CookieSize: 10
1258 | m_Shadows:
1259 | m_Type: 0
1260 | m_Resolution: -1
1261 | m_CustomResolution: -1
1262 | m_Strength: 1
1263 | m_Bias: 0.05
1264 | m_NormalBias: 0.4
1265 | m_NearPlane: 0.2
1266 | m_CullingMatrixOverride:
1267 | e00: 1
1268 | e01: 0
1269 | e02: 0
1270 | e03: 0
1271 | e10: 0
1272 | e11: 1
1273 | e12: 0
1274 | e13: 0
1275 | e20: 0
1276 | e21: 0
1277 | e22: 1
1278 | e23: 0
1279 | e30: 0
1280 | e31: 0
1281 | e32: 0
1282 | e33: 1
1283 | m_UseCullingMatrixOverride: 0
1284 | m_Cookie: {fileID: 0}
1285 | m_DrawHalo: 0
1286 | m_Flare: {fileID: 0}
1287 | m_RenderMode: 0
1288 | m_CullingMask:
1289 | serializedVersion: 2
1290 | m_Bits: 4294967295
1291 | m_RenderingLayerMask: 1
1292 | m_Lightmapping: 4
1293 | m_LightShadowCasterMode: 0
1294 | m_AreaSize: {x: 1, y: 1}
1295 | m_BounceIntensity: 1
1296 | m_ColorTemperature: 6570
1297 | m_UseColorTemperature: 0
1298 | m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
1299 | m_UseBoundingSphereOverride: 0
1300 | m_UseViewFrustumForShadowCasterCull: 1
1301 | m_ShadowRadius: 0
1302 | m_ShadowAngle: 0
1303 | --- !u!4 &2116323749
1304 | Transform:
1305 | m_ObjectHideFlags: 0
1306 | m_CorrespondingSourceObject: {fileID: 0}
1307 | m_PrefabInstance: {fileID: 0}
1308 | m_PrefabAsset: {fileID: 0}
1309 | m_GameObject: {fileID: 2116323747}
1310 | m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
1311 | m_LocalPosition: {x: 0, y: 0, z: 0}
1312 | m_LocalScale: {x: 1, y: 1, z: 1}
1313 | m_Children: []
1314 | m_Father: {fileID: 0}
1315 | m_RootOrder: 3
1316 | m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
1317 | --- !u!1001 &1943767788496386506
1318 | PrefabInstance:
1319 | m_ObjectHideFlags: 0
1320 | serializedVersion: 2
1321 | m_Modification:
1322 | m_TransformParent: {fileID: 0}
1323 | m_Modifications:
1324 | - target: {fileID: 1943767788423411988, guid: b2ca0da73d4214f50b14277cc41e4d3c, type: 3}
1325 | propertyPath: browser
1326 | value: 4
1327 | objectReference: {fileID: 0}
1328 | - target: {fileID: 1943767788423411988, guid: b2ca0da73d4214f50b14277cc41e4d3c, type: 3}
1329 | propertyPath: webDriverPath
1330 | value:
1331 | objectReference: {fileID: 0}
1332 | - target: {fileID: 1943767788423411988, guid: b2ca0da73d4214f50b14277cc41e4d3c, type: 3}
1333 | propertyPath: includeProjectFiles.Array.size
1334 | value: 1
1335 | objectReference: {fileID: 0}
1336 | - target: {fileID: 1943767788423411988, guid: b2ca0da73d4214f50b14277cc41e4d3c, type: 3}
1337 | propertyPath: includeExternalFiles.Array.size
1338 | value: 1
1339 | objectReference: {fileID: 0}
1340 | - target: {fileID: 1943767788423411988, guid: b2ca0da73d4214f50b14277cc41e4d3c, type: 3}
1341 | propertyPath: includeJavaScriptFiles.Array.size
1342 | value: 1
1343 | objectReference: {fileID: 0}
1344 | - target: {fileID: 1943767788423411988, guid: b2ca0da73d4214f50b14277cc41e4d3c, type: 3}
1345 | propertyPath: includeProjectFiles.Array.data[0]
1346 | value:
1347 | objectReference: {fileID: 102900000, guid: c0ea40ab106764c34b6cb0a8780ad9e9, type: 3}
1348 | - target: {fileID: 1943767788423411988, guid: b2ca0da73d4214f50b14277cc41e4d3c, type: 3}
1349 | propertyPath: includeExternalFiles.Array.data[0]
1350 | value: WebGLTemplates/UBBExampleTemplate/TemplateData/myscript.js
1351 | objectReference: {fileID: 0}
1352 | - target: {fileID: 1943767788423411988, guid: b2ca0da73d4214f50b14277cc41e4d3c, type: 3}
1353 | propertyPath: includeJavaScriptFiles.Array.data[0]
1354 | value: WebGLTemplates/UBBExample/TemplateData/myscript.js
1355 | objectReference: {fileID: 0}
1356 | - target: {fileID: 1943767788423411989, guid: b2ca0da73d4214f50b14277cc41e4d3c, type: 3}
1357 | propertyPath: m_RootOrder
1358 | value: 0
1359 | objectReference: {fileID: 0}
1360 | - target: {fileID: 1943767788423411989, guid: b2ca0da73d4214f50b14277cc41e4d3c, type: 3}
1361 | propertyPath: m_LocalPosition.x
1362 | value: 0
1363 | objectReference: {fileID: 0}
1364 | - target: {fileID: 1943767788423411989, guid: b2ca0da73d4214f50b14277cc41e4d3c, type: 3}
1365 | propertyPath: m_LocalPosition.y
1366 | value: 0
1367 | objectReference: {fileID: 0}
1368 | - target: {fileID: 1943767788423411989, guid: b2ca0da73d4214f50b14277cc41e4d3c, type: 3}
1369 | propertyPath: m_LocalPosition.z
1370 | value: 0
1371 | objectReference: {fileID: 0}
1372 | - target: {fileID: 1943767788423411989, guid: b2ca0da73d4214f50b14277cc41e4d3c, type: 3}
1373 | propertyPath: m_LocalRotation.w
1374 | value: 1
1375 | objectReference: {fileID: 0}
1376 | - target: {fileID: 1943767788423411989, guid: b2ca0da73d4214f50b14277cc41e4d3c, type: 3}
1377 | propertyPath: m_LocalRotation.x
1378 | value: -0
1379 | objectReference: {fileID: 0}
1380 | - target: {fileID: 1943767788423411989, guid: b2ca0da73d4214f50b14277cc41e4d3c, type: 3}
1381 | propertyPath: m_LocalRotation.y
1382 | value: -0
1383 | objectReference: {fileID: 0}
1384 | - target: {fileID: 1943767788423411989, guid: b2ca0da73d4214f50b14277cc41e4d3c, type: 3}
1385 | propertyPath: m_LocalRotation.z
1386 | value: -0
1387 | objectReference: {fileID: 0}
1388 | - target: {fileID: 1943767788423411989, guid: b2ca0da73d4214f50b14277cc41e4d3c, type: 3}
1389 | propertyPath: m_LocalEulerAnglesHint.x
1390 | value: 0
1391 | objectReference: {fileID: 0}
1392 | - target: {fileID: 1943767788423411989, guid: b2ca0da73d4214f50b14277cc41e4d3c, type: 3}
1393 | propertyPath: m_LocalEulerAnglesHint.y
1394 | value: 0
1395 | objectReference: {fileID: 0}
1396 | - target: {fileID: 1943767788423411989, guid: b2ca0da73d4214f50b14277cc41e4d3c, type: 3}
1397 | propertyPath: m_LocalEulerAnglesHint.z
1398 | value: 0
1399 | objectReference: {fileID: 0}
1400 | - target: {fileID: 1943767788423411991, guid: b2ca0da73d4214f50b14277cc41e4d3c, type: 3}
1401 | propertyPath: m_Name
1402 | value: UnityBrowserBridge
1403 | objectReference: {fileID: 0}
1404 | m_RemovedComponents: []
1405 | m_SourcePrefab: {fileID: 100100000, guid: b2ca0da73d4214f50b14277cc41e4d3c, type: 3}
1406 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridgeExample/Scenes/UnityBrowserBridgeExample.unity.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 9fc0d4010bbf28b4594072e72b869c4f
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridgeExample/Scripts.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 9acf7425a8cc347e1bf89bbe695cc4f5
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridgeExample/Scripts/MainController.cs:
--------------------------------------------------------------------------------
1 | using UnityEngine;
2 | using UnityEngine.UI;
3 | using UBB;
4 | #if UNITY_WEBGL && !UNITY_EDITOR
5 | using System.Runtime.InteropServices;
6 | #endif
7 |
8 | namespace UBBExample
9 | {
10 | public class MainController : MonoBehaviour
11 | {
12 | public Text dateAndTimeText;
13 | public Button getDateAndTimeButton;
14 | public Button getDateAndTimeAsyncButton;
15 | public string locale = "en-GB";
16 |
17 | private void Start()
18 | {
19 | getDateAndTimeButton.onClick.AddListener(() => { dateAndTimeText.text = GetDateAndTime(locale); });
20 | getDateAndTimeAsyncButton.onClick.AddListener(() =>
21 | {
22 | GetDateAndTimeAsync(locale);
23 | getDateAndTimeAsyncButton.interactable = false;
24 | });
25 | }
26 |
27 | // in webgl, these functions are executed directly in the browser
28 | // in the editor, they are executed via UnityBrowserBridge
29 | #if UNITY_WEBGL && !UNITY_EDITOR
30 | [DllImport("__Internal")]
31 | public static extern string GetDateAndTime(string locale);
32 | [DllImport("__Internal")]
33 | public static extern void GetDateAndTimeAsync(string locale);
34 | #else
35 |
36 | ///
37 | /// Get current date and time formatted according to given locale.
38 | ///
39 | /// Name of locale to format date (e.g. "en-GB").
40 | /// Formatted date and time.
41 | public static string GetDateAndTime(string locale)
42 | {
43 | return UnityBrowserBridge.Instance.ExecuteJS("getDateAndTime('" + locale + "')");
44 | }
45 |
46 | ///
47 | /// Asynchronously gets the current date and time formatted according to given locale.
48 | /// This will trigger the browser to invoke the SetDateAndTime
method with the formatted date and time.
49 | ///
50 | /// Name of locale to format date (e.g. "en-GB").
51 | public static void GetDateAndTimeAsync(string locale)
52 | {
53 | UnityBrowserBridge.Instance.ExecuteJS("getDateAndTimeAsync('" + locale + "')");
54 | }
55 |
56 | #endif
57 |
58 | ///
59 | /// Displays the formatted date and time.
60 | ///
61 | /// Formatted date and time.
62 | public void SetDateAndTime(string dateAndTimeString)
63 | {
64 | dateAndTimeText.text = dateAndTimeString;
65 | getDateAndTimeAsyncButton.interactable = true;
66 | }
67 | }
68 | }
--------------------------------------------------------------------------------
/Assets/UnityBrowserBridgeExample/Scripts/MainController.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 6f98d8b4f95db46e3883cd7e484c41c7
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Assets/WebGLTemplates.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 65da535585a2f44e19242fadac4e0fce
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/WebGLTemplates/UBBExample.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 54209acb56a904a99898904082e6173d
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/WebGLTemplates/UBBExample/TemplateData.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 389c39a1f6a29448d980ac119498b33a
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/WebGLTemplates/UBBExample/TemplateData/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sropelato/UnityBrowserBridge/9d2ed54e2ae073f2dc4f408470f416e34febda21/Assets/WebGLTemplates/UBBExample/TemplateData/favicon.ico
--------------------------------------------------------------------------------
/Assets/WebGLTemplates/UBBExample/TemplateData/favicon.ico.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: fc3646384cad444fda77ace450803ae0
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Assets/WebGLTemplates/UBBExample/TemplateData/jQueryLicense.txt:
--------------------------------------------------------------------------------
1 | Copyright OpenJS Foundation and other contributors, https://openjsf.org/
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining
4 | a copy of this software and associated documentation files (the
5 | "Software"), to deal in the Software without restriction, including
6 | without limitation the rights to use, copy, modify, merge, publish,
7 | distribute, sublicense, and/or sell copies of the Software, and to
8 | permit persons to whom the Software is furnished to do so, subject to
9 | the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be
12 | included in all copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
/Assets/WebGLTemplates/UBBExample/TemplateData/jQueryLicense.txt.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: bbdc63eef78c24faa82fa8d0c8807951
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Assets/WebGLTemplates/UBBExample/TemplateData/jquery-3.6.0.min.js.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 488843dcb8fae4eb4a203af01381b8b7
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Assets/WebGLTemplates/UBBExample/TemplateData/myscript.js:
--------------------------------------------------------------------------------
1 | // return string with formatted date and time
2 | getDateAndTime = function (locale) {
3 | return new Date().toLocaleString(locale)
4 | }
5 |
6 | // get formatted date and time and invoke the 'SetDateAndTime' method on the 'Main' game object (after a delay of 1000ms)
7 | getDateAndTimeAsync = function (locale) {
8 | setTimeout(function () {
9 | unityInstance.SendMessage('Main', 'SetDateAndTime', new Date().toLocaleString(locale))
10 | }, 1000)
11 | }
12 |
--------------------------------------------------------------------------------
/Assets/WebGLTemplates/UBBExample/TemplateData/myscript.js.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: c1a60368c0f6e4b36ae19a5b0fad9d79
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Assets/WebGLTemplates/UBBExample/TemplateData/progress-bar-empty-dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sropelato/UnityBrowserBridge/9d2ed54e2ae073f2dc4f408470f416e34febda21/Assets/WebGLTemplates/UBBExample/TemplateData/progress-bar-empty-dark.png
--------------------------------------------------------------------------------
/Assets/WebGLTemplates/UBBExample/TemplateData/progress-bar-empty-dark.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 50edeb91776764db0bcc45827af0e22a
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Assets/WebGLTemplates/UBBExample/TemplateData/progress-bar-full-dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sropelato/UnityBrowserBridge/9d2ed54e2ae073f2dc4f408470f416e34febda21/Assets/WebGLTemplates/UBBExample/TemplateData/progress-bar-full-dark.png
--------------------------------------------------------------------------------
/Assets/WebGLTemplates/UBBExample/TemplateData/progress-bar-full-dark.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 762f504d66516498c8e38a3ac8d1247f
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Assets/WebGLTemplates/UBBExample/TemplateData/style.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | font-family: 'Open Sans', sans-serif;
3 | font-size: 12pt;
4 | height: 100%;
5 | width: 100%;
6 | margin: 0;
7 | padding: 0;
8 | background: #ffffff
9 | }
10 |
11 | body {
12 | display: flex;
13 | flex-direction: column;
14 | }
15 |
16 | #content {
17 | flex: 1 1 auto;
18 | padding: 20px;
19 | }
20 |
21 | #canvas_container {
22 | position: relative;
23 | width: 100%;
24 | height: 100%;
25 | }
26 |
27 | #canvas {
28 | position: absolute;
29 | background-color: #221f20;
30 | border-radius: 5px;
31 | }
32 |
33 | #loading_bar {
34 | position: absolute;
35 | left: 50%;
36 | top: 50%;
37 | transform: translate(-50%, -50%);
38 | display: none
39 | }
40 |
41 | #loading_bar_logo {
42 | width: 154px;
43 | height: 130px;
44 | background: url('unity-logo-dark.png') no-repeat center;
45 | }
46 |
47 | #loading_bar_empty {
48 | width: 141px;
49 | height: 18px;
50 | margin-top: 10px;
51 | background: url('progress-bar-empty-dark.png') no-repeat center;
52 | }
53 |
54 | #loading_bar_full {
55 | width: 0%;
56 | height: 18px;
57 | margin-top: 10px;
58 | background: url('progress-bar-full-dark.png') no-repeat center
59 | }
60 |
61 | #banner {
62 | position: absolute;
63 | left: 50%;
64 | top: 10px;
65 | transform: translate(-50%);
66 | background: #ffffffee;
67 | border-radius: 5px;
68 | box-shadow: 0px 4px 8px 0px #00000033, 0 6px 20px 0 #00000030;
69 | display: none
70 | }
71 |
72 | .banner_content {
73 | margin: 10px 10px 10px 10px;
74 | padding: 10px;
75 | border: solid 1px;
76 | border-radius: 5px;
77 | background: #eeeeee;
78 | border-color: #dddddd;
79 | }
80 |
81 | .banner_content.warning {
82 | background: #ffee88;
83 | border-color: #ffdd44;
84 | }
85 |
86 | .banner_content.error {
87 | background: #ff6633;
88 | border-color: #ff3300;
89 | }
--------------------------------------------------------------------------------
/Assets/WebGLTemplates/UBBExample/TemplateData/style.css.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 1eb727c30a3f941889768b724b13fcc7
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Assets/WebGLTemplates/UBBExample/TemplateData/unity-logo-dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sropelato/UnityBrowserBridge/9d2ed54e2ae073f2dc4f408470f416e34febda21/Assets/WebGLTemplates/UBBExample/TemplateData/unity-logo-dark.png
--------------------------------------------------------------------------------
/Assets/WebGLTemplates/UBBExample/TemplateData/unity-logo-dark.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 61baada2b2d6048ae8222e0fd5e06e67
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Assets/WebGLTemplates/UBBExample/TemplateData/webgl-util.js:
--------------------------------------------------------------------------------
1 | var unityInstance = null
2 |
3 | $(window).on('load', function () {
4 | // disable ajax caching
5 | $.ajaxSetup({ cache: false })
6 |
7 | // resize canvas
8 | resizeCanvas()
9 | $(window).on('resize', resizeCanvas)
10 |
11 | // show loading bar
12 | $('#loading_bar').css('display', 'block')
13 |
14 | // load game
15 | createUnityInstance($('#canvas').get(0), buildConfig, (progress) => {
16 | $('#loading_bar_full').css('width', 100 * progress + '%')
17 | }).then((unityInstance) => {
18 | this.unityInstance = unityInstance
19 | // hide loading bar
20 | $('#loading_bar').css('display', 'none')
21 | }).catch((message) => {
22 | showBanner(message, 'error')
23 | })
24 | })
25 |
26 | showBanner = function (msg, type) {
27 | let msgElement = $('' + msg + '
')
28 | msgElement.appendTo('#banner')
29 | if (type == 'error')
30 | msgElement.addClass('error')
31 | else {
32 | if (type == 'warning')
33 | msgElement.addClass('warning')
34 | setTimeout(function () {
35 | msgElement.remove()
36 | updateBannerVisibility()
37 | }, 5000)
38 | }
39 | updateBannerVisibility()
40 | }
41 |
42 | resizeCanvas = function () {
43 | for (let i = 0; i < 2; i++) {
44 | $('#canvas').prop('width', $('#canvas_container').width())
45 | $('#canvas').prop('height', $('#canvas_container').height())
46 | }
47 |
48 | }
49 |
50 | updateBannerVisibility = function () {
51 | if ($('#banner').children().length > 0)
52 | $('#banner').css('display', 'block')
53 | else
54 | $('#banner').css('display', 'none')
55 | }
56 |
57 |
--------------------------------------------------------------------------------
/Assets/WebGLTemplates/UBBExample/TemplateData/webgl-util.js.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 348945e14faae4d858da31b5ade4de0e
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Assets/WebGLTemplates/UBBExample/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Unity Browser Bridge Example
8 |
9 |
10 |
11 |
12 |
13 |
14 |
29 |
30 |
31 |
32 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/Assets/WebGLTemplates/UBBExample/index.html.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 568ff6bd7a4a54ef6834e84ddc4be20b
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Assets/WebGLTemplates/UBBExample/thumbnail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sropelato/UnityBrowserBridge/9d2ed54e2ae073f2dc4f408470f416e34febda21/Assets/WebGLTemplates/UBBExample/thumbnail.png
--------------------------------------------------------------------------------
/Assets/WebGLTemplates/UBBExample/thumbnail.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 4b9d8be684a934e009c43874ff0f534d
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Documentation/Figures/OverviewBrowser.graffle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sropelato/UnityBrowserBridge/9d2ed54e2ae073f2dc4f408470f416e34febda21/Documentation/Figures/OverviewBrowser.graffle
--------------------------------------------------------------------------------
/Documentation/Figures/OverviewBrowser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sropelato/UnityBrowserBridge/9d2ed54e2ae073f2dc4f408470f416e34febda21/Documentation/Figures/OverviewBrowser.png
--------------------------------------------------------------------------------
/Documentation/Figures/OverviewCompared.graffle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sropelato/UnityBrowserBridge/9d2ed54e2ae073f2dc4f408470f416e34febda21/Documentation/Figures/OverviewCompared.graffle
--------------------------------------------------------------------------------
/Documentation/Figures/OverviewCompared.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sropelato/UnityBrowserBridge/9d2ed54e2ae073f2dc4f408470f416e34febda21/Documentation/Figures/OverviewCompared.png
--------------------------------------------------------------------------------
/Documentation/Figures/OverviewEditor.graffle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sropelato/UnityBrowserBridge/9d2ed54e2ae073f2dc4f408470f416e34febda21/Documentation/Figures/OverviewEditor.graffle
--------------------------------------------------------------------------------
/Documentation/Figures/OverviewEditor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sropelato/UnityBrowserBridge/9d2ed54e2ae073f2dc4f408470f416e34febda21/Documentation/Figures/OverviewEditor.png
--------------------------------------------------------------------------------
/Documentation/Figures/ScreenshotExamplePage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sropelato/UnityBrowserBridge/9d2ed54e2ae073f2dc4f408470f416e34febda21/Documentation/Figures/ScreenshotExamplePage.png
--------------------------------------------------------------------------------
/Documentation/Figures/ScreenshotExampleScene.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sropelato/UnityBrowserBridge/9d2ed54e2ae073f2dc4f408470f416e34febda21/Documentation/Figures/ScreenshotExampleScene.png
--------------------------------------------------------------------------------
/Documentation/Figures/ScreenshotExampleWebGL.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sropelato/UnityBrowserBridge/9d2ed54e2ae073f2dc4f408470f416e34febda21/Documentation/Figures/ScreenshotExampleWebGL.png
--------------------------------------------------------------------------------
/Documentation/Figures/ScreenshotHelloWorldPage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sropelato/UnityBrowserBridge/9d2ed54e2ae073f2dc4f408470f416e34febda21/Documentation/Figures/ScreenshotHelloWorldPage.png
--------------------------------------------------------------------------------
/Documentation/Figures/ScreenshotUBBConfig.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sropelato/UnityBrowserBridge/9d2ed54e2ae073f2dc4f408470f416e34febda21/Documentation/Figures/ScreenshotUBBConfig.png
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Sandro Ropelato
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/Packages/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "dependencies": {
3 | "com.unity.collab-proxy": "1.5.7",
4 | "com.unity.ide.rider": "3.0.9",
5 | "com.unity.ide.visualstudio": "2.0.9",
6 | "com.unity.ide.vscode": "1.2.3",
7 | "com.unity.test-framework": "1.1.27",
8 | "com.unity.textmeshpro": "3.0.6",
9 | "com.unity.timeline": "1.5.5",
10 | "com.unity.ugui": "1.0.0",
11 | "com.unity.visualscripting": "1.6.1",
12 | "com.unity.modules.ai": "1.0.0",
13 | "com.unity.modules.androidjni": "1.0.0",
14 | "com.unity.modules.animation": "1.0.0",
15 | "com.unity.modules.assetbundle": "1.0.0",
16 | "com.unity.modules.audio": "1.0.0",
17 | "com.unity.modules.cloth": "1.0.0",
18 | "com.unity.modules.director": "1.0.0",
19 | "com.unity.modules.imageconversion": "1.0.0",
20 | "com.unity.modules.imgui": "1.0.0",
21 | "com.unity.modules.jsonserialize": "1.0.0",
22 | "com.unity.modules.particlesystem": "1.0.0",
23 | "com.unity.modules.physics": "1.0.0",
24 | "com.unity.modules.physics2d": "1.0.0",
25 | "com.unity.modules.screencapture": "1.0.0",
26 | "com.unity.modules.terrain": "1.0.0",
27 | "com.unity.modules.terrainphysics": "1.0.0",
28 | "com.unity.modules.tilemap": "1.0.0",
29 | "com.unity.modules.ui": "1.0.0",
30 | "com.unity.modules.uielements": "1.0.0",
31 | "com.unity.modules.umbra": "1.0.0",
32 | "com.unity.modules.unityanalytics": "1.0.0",
33 | "com.unity.modules.unitywebrequest": "1.0.0",
34 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0",
35 | "com.unity.modules.unitywebrequestaudio": "1.0.0",
36 | "com.unity.modules.unitywebrequesttexture": "1.0.0",
37 | "com.unity.modules.unitywebrequestwww": "1.0.0",
38 | "com.unity.modules.vehicles": "1.0.0",
39 | "com.unity.modules.video": "1.0.0",
40 | "com.unity.modules.vr": "1.0.0",
41 | "com.unity.modules.wind": "1.0.0",
42 | "com.unity.modules.xr": "1.0.0"
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/ProjectSettings/AudioManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!11 &1
4 | AudioManager:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 2
7 | m_Volume: 1
8 | Rolloff Scale: 1
9 | Doppler Factor: 1
10 | Default Speaker Mode: 2
11 | m_SampleRate: 0
12 | m_DSPBufferSize: 1024
13 | m_VirtualVoiceCount: 512
14 | m_RealVoiceCount: 32
15 | m_SpatializerPlugin:
16 | m_AmbisonicDecoderPlugin:
17 | m_DisableAudio: 0
18 | m_VirtualizeEffects: 1
19 | m_RequestedDSPBufferSize: 1024
20 |
--------------------------------------------------------------------------------
/ProjectSettings/ClusterInputManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!236 &1
4 | ClusterInputManager:
5 | m_ObjectHideFlags: 0
6 | m_Inputs: []
7 |
--------------------------------------------------------------------------------
/ProjectSettings/DynamicsManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!55 &1
4 | PhysicsManager:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 11
7 | m_Gravity: {x: 0, y: -9.81, z: 0}
8 | m_DefaultMaterial: {fileID: 0}
9 | m_BounceThreshold: 2
10 | m_SleepThreshold: 0.005
11 | m_DefaultContactOffset: 0.01
12 | m_DefaultSolverIterations: 6
13 | m_DefaultSolverVelocityIterations: 1
14 | m_QueriesHitBackfaces: 0
15 | m_QueriesHitTriggers: 1
16 | m_EnableAdaptiveForce: 0
17 | m_ClothInterCollisionDistance: 0
18 | m_ClothInterCollisionStiffness: 0
19 | m_ContactsGeneration: 1
20 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
21 | m_AutoSimulation: 1
22 | m_AutoSyncTransforms: 0
23 | m_ReuseCollisionCallbacks: 1
24 | m_ClothInterCollisionSettingsToggle: 0
25 | m_ContactPairsMode: 0
26 | m_BroadphaseType: 0
27 | m_WorldBounds:
28 | m_Center: {x: 0, y: 0, z: 0}
29 | m_Extent: {x: 250, y: 250, z: 250}
30 | m_WorldSubdivisions: 8
31 | m_FrictionType: 0
32 | m_EnableEnhancedDeterminism: 0
33 | m_EnableUnifiedHeightmaps: 1
34 | m_DefaultMaxAngluarSpeed: 7
35 |
--------------------------------------------------------------------------------
/ProjectSettings/EditorBuildSettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1045 &1
4 | EditorBuildSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 2
7 | m_Scenes:
8 | - enabled: 0
9 | path:
10 | guid: 00000000000000000000000000000000
11 | - enabled: 1
12 | path: Assets/UnityBrowserBridgeExample/Scenes/UnityBrowserBridgeExample.unity
13 | guid: 9fc0d4010bbf28b4594072e72b869c4f
14 | m_configObjects: {}
15 |
--------------------------------------------------------------------------------
/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: 11
7 | m_ExternalVersionControlSupport: Visible Meta Files
8 | m_SerializationMode: 2
9 | m_LineEndingsForNewScripts: 0
10 | m_DefaultBehaviorMode: 0
11 | m_PrefabRegularEnvironment: {fileID: 0}
12 | m_PrefabUIEnvironment: {fileID: 0}
13 | m_SpritePackerMode: 0
14 | m_SpritePackerPaddingPower: 1
15 | m_EtcTextureCompressorBehavior: 1
16 | m_EtcTextureFastCompressor: 1
17 | m_EtcTextureNormalCompressor: 2
18 | m_EtcTextureBestCompressor: 4
19 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref
20 | m_ProjectGenerationRootNamespace:
21 | m_CollabEditorSettings:
22 | inProgressEnabled: 1
23 | m_EnableTextureStreamingInEditMode: 1
24 | m_EnableTextureStreamingInPlayMode: 1
25 | m_AsyncShaderCompilation: 1
26 | m_EnterPlayModeOptionsEnabled: 0
27 | m_EnterPlayModeOptions: 3
28 | m_ShowLightmapResolutionOverlay: 1
29 | m_UseLegacyProbeSampleCount: 0
30 | m_SerializeInlineMappingsOnOneLine: 1
--------------------------------------------------------------------------------
/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 | m_PreloadedShaders: []
39 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000,
40 | type: 0}
41 | m_CustomRenderPipeline: {fileID: 0}
42 | m_TransparencySortMode: 0
43 | m_TransparencySortAxis: {x: 0, y: 0, z: 1}
44 | m_DefaultRenderingPath: 1
45 | m_DefaultMobileRenderingPath: 1
46 | m_TierSettings: []
47 | m_LightmapStripping: 0
48 | m_FogStripping: 0
49 | m_InstancingStripping: 0
50 | m_LightmapKeepPlain: 1
51 | m_LightmapKeepDirCombined: 1
52 | m_LightmapKeepDynamicPlain: 1
53 | m_LightmapKeepDynamicDirCombined: 1
54 | m_LightmapKeepShadowMask: 1
55 | m_LightmapKeepSubtractive: 1
56 | m_FogKeepLinear: 1
57 | m_FogKeepExp: 1
58 | m_FogKeepExp2: 1
59 | m_AlbedoSwatchInfos: []
60 | m_LightsUseLinearIntensity: 0
61 | m_LightsUseColorTemperature: 0
62 | m_LogWhenShaderIsCompiled: 0
63 | m_AllowEnlightenSupportForUpgradedProject: 0
64 |
--------------------------------------------------------------------------------
/ProjectSettings/InputManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!13 &1
4 | InputManager:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 2
7 | m_Axes:
8 | - serializedVersion: 3
9 | m_Name: Horizontal
10 | descriptiveName:
11 | descriptiveNegativeName:
12 | negativeButton: left
13 | positiveButton: right
14 | altNegativeButton: a
15 | altPositiveButton: d
16 | gravity: 3
17 | dead: 0.001
18 | sensitivity: 3
19 | snap: 1
20 | invert: 0
21 | type: 0
22 | axis: 0
23 | joyNum: 0
24 | - serializedVersion: 3
25 | m_Name: Vertical
26 | descriptiveName:
27 | descriptiveNegativeName:
28 | negativeButton: down
29 | positiveButton: up
30 | altNegativeButton: s
31 | altPositiveButton: w
32 | gravity: 3
33 | dead: 0.001
34 | sensitivity: 3
35 | snap: 1
36 | invert: 0
37 | type: 0
38 | axis: 0
39 | joyNum: 0
40 | - serializedVersion: 3
41 | m_Name: Fire1
42 | descriptiveName:
43 | descriptiveNegativeName:
44 | negativeButton:
45 | positiveButton: left ctrl
46 | altNegativeButton:
47 | altPositiveButton: mouse 0
48 | gravity: 1000
49 | dead: 0.001
50 | sensitivity: 1000
51 | snap: 0
52 | invert: 0
53 | type: 0
54 | axis: 0
55 | joyNum: 0
56 | - serializedVersion: 3
57 | m_Name: Fire2
58 | descriptiveName:
59 | descriptiveNegativeName:
60 | negativeButton:
61 | positiveButton: left alt
62 | altNegativeButton:
63 | altPositiveButton: mouse 1
64 | gravity: 1000
65 | dead: 0.001
66 | sensitivity: 1000
67 | snap: 0
68 | invert: 0
69 | type: 0
70 | axis: 0
71 | joyNum: 0
72 | - serializedVersion: 3
73 | m_Name: Fire3
74 | descriptiveName:
75 | descriptiveNegativeName:
76 | negativeButton:
77 | positiveButton: left shift
78 | altNegativeButton:
79 | altPositiveButton: mouse 2
80 | gravity: 1000
81 | dead: 0.001
82 | sensitivity: 1000
83 | snap: 0
84 | invert: 0
85 | type: 0
86 | axis: 0
87 | joyNum: 0
88 | - serializedVersion: 3
89 | m_Name: Jump
90 | descriptiveName:
91 | descriptiveNegativeName:
92 | negativeButton:
93 | positiveButton: space
94 | altNegativeButton:
95 | altPositiveButton:
96 | gravity: 1000
97 | dead: 0.001
98 | sensitivity: 1000
99 | snap: 0
100 | invert: 0
101 | type: 0
102 | axis: 0
103 | joyNum: 0
104 | - serializedVersion: 3
105 | m_Name: Mouse X
106 | descriptiveName:
107 | descriptiveNegativeName:
108 | negativeButton:
109 | positiveButton:
110 | altNegativeButton:
111 | altPositiveButton:
112 | gravity: 0
113 | dead: 0
114 | sensitivity: 0.1
115 | snap: 0
116 | invert: 0
117 | type: 1
118 | axis: 0
119 | joyNum: 0
120 | - serializedVersion: 3
121 | m_Name: Mouse Y
122 | descriptiveName:
123 | descriptiveNegativeName:
124 | negativeButton:
125 | positiveButton:
126 | altNegativeButton:
127 | altPositiveButton:
128 | gravity: 0
129 | dead: 0
130 | sensitivity: 0.1
131 | snap: 0
132 | invert: 0
133 | type: 1
134 | axis: 1
135 | joyNum: 0
136 | - serializedVersion: 3
137 | m_Name: Mouse ScrollWheel
138 | descriptiveName:
139 | descriptiveNegativeName:
140 | negativeButton:
141 | positiveButton:
142 | altNegativeButton:
143 | altPositiveButton:
144 | gravity: 0
145 | dead: 0
146 | sensitivity: 0.1
147 | snap: 0
148 | invert: 0
149 | type: 1
150 | axis: 2
151 | joyNum: 0
152 | - serializedVersion: 3
153 | m_Name: Horizontal
154 | descriptiveName:
155 | descriptiveNegativeName:
156 | negativeButton:
157 | positiveButton:
158 | altNegativeButton:
159 | altPositiveButton:
160 | gravity: 0
161 | dead: 0.19
162 | sensitivity: 1
163 | snap: 0
164 | invert: 0
165 | type: 2
166 | axis: 0
167 | joyNum: 0
168 | - serializedVersion: 3
169 | m_Name: Vertical
170 | descriptiveName:
171 | descriptiveNegativeName:
172 | negativeButton:
173 | positiveButton:
174 | altNegativeButton:
175 | altPositiveButton:
176 | gravity: 0
177 | dead: 0.19
178 | sensitivity: 1
179 | snap: 0
180 | invert: 1
181 | type: 2
182 | axis: 1
183 | joyNum: 0
184 | - serializedVersion: 3
185 | m_Name: Fire1
186 | descriptiveName:
187 | descriptiveNegativeName:
188 | negativeButton:
189 | positiveButton: joystick button 0
190 | altNegativeButton:
191 | altPositiveButton:
192 | gravity: 1000
193 | dead: 0.001
194 | sensitivity: 1000
195 | snap: 0
196 | invert: 0
197 | type: 0
198 | axis: 0
199 | joyNum: 0
200 | - serializedVersion: 3
201 | m_Name: Fire2
202 | descriptiveName:
203 | descriptiveNegativeName:
204 | negativeButton:
205 | positiveButton: joystick button 1
206 | altNegativeButton:
207 | altPositiveButton:
208 | gravity: 1000
209 | dead: 0.001
210 | sensitivity: 1000
211 | snap: 0
212 | invert: 0
213 | type: 0
214 | axis: 0
215 | joyNum: 0
216 | - serializedVersion: 3
217 | m_Name: Fire3
218 | descriptiveName:
219 | descriptiveNegativeName:
220 | negativeButton:
221 | positiveButton: joystick button 2
222 | altNegativeButton:
223 | altPositiveButton:
224 | gravity: 1000
225 | dead: 0.001
226 | sensitivity: 1000
227 | snap: 0
228 | invert: 0
229 | type: 0
230 | axis: 0
231 | joyNum: 0
232 | - serializedVersion: 3
233 | m_Name: Jump
234 | descriptiveName:
235 | descriptiveNegativeName:
236 | negativeButton:
237 | positiveButton: joystick button 3
238 | altNegativeButton:
239 | altPositiveButton:
240 | gravity: 1000
241 | dead: 0.001
242 | sensitivity: 1000
243 | snap: 0
244 | invert: 0
245 | type: 0
246 | axis: 0
247 | joyNum: 0
248 | - serializedVersion: 3
249 | m_Name: Submit
250 | descriptiveName:
251 | descriptiveNegativeName:
252 | negativeButton:
253 | positiveButton: return
254 | altNegativeButton:
255 | altPositiveButton: joystick button 0
256 | gravity: 1000
257 | dead: 0.001
258 | sensitivity: 1000
259 | snap: 0
260 | invert: 0
261 | type: 0
262 | axis: 0
263 | joyNum: 0
264 | - serializedVersion: 3
265 | m_Name: Submit
266 | descriptiveName:
267 | descriptiveNegativeName:
268 | negativeButton:
269 | positiveButton: enter
270 | altNegativeButton:
271 | altPositiveButton: space
272 | gravity: 1000
273 | dead: 0.001
274 | sensitivity: 1000
275 | snap: 0
276 | invert: 0
277 | type: 0
278 | axis: 0
279 | joyNum: 0
280 | - serializedVersion: 3
281 | m_Name: Cancel
282 | descriptiveName:
283 | descriptiveNegativeName:
284 | negativeButton:
285 | positiveButton: escape
286 | altNegativeButton:
287 | altPositiveButton: joystick button 1
288 | gravity: 1000
289 | dead: 0.001
290 | sensitivity: 1000
291 | snap: 0
292 | invert: 0
293 | type: 0
294 | axis: 0
295 | joyNum: 0
296 |
--------------------------------------------------------------------------------
/ProjectSettings/NavMeshAreas.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!126 &1
4 | NavMeshProjectSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 2
7 | areas:
8 | - name: Walkable
9 | cost: 1
10 | - name: Not Walkable
11 | cost: 1
12 | - name: Jump
13 | cost: 2
14 | - name:
15 | cost: 1
16 | - name:
17 | cost: 1
18 | - name:
19 | cost: 1
20 | - name:
21 | cost: 1
22 | - name:
23 | cost: 1
24 | - name:
25 | cost: 1
26 | - name:
27 | cost: 1
28 | - name:
29 | cost: 1
30 | - name:
31 | cost: 1
32 | - name:
33 | cost: 1
34 | - name:
35 | cost: 1
36 | - name:
37 | cost: 1
38 | - name:
39 | cost: 1
40 | - name:
41 | cost: 1
42 | - name:
43 | cost: 1
44 | - name:
45 | cost: 1
46 | - name:
47 | cost: 1
48 | - name:
49 | cost: 1
50 | - name:
51 | cost: 1
52 | - name:
53 | cost: 1
54 | - name:
55 | cost: 1
56 | - name:
57 | cost: 1
58 | - name:
59 | cost: 1
60 | - name:
61 | cost: 1
62 | - name:
63 | cost: 1
64 | - name:
65 | cost: 1
66 | - name:
67 | cost: 1
68 | - name:
69 | cost: 1
70 | - name:
71 | cost: 1
72 | m_LastAgentTypeID: -887442657
73 | m_Settings:
74 | - serializedVersion: 2
75 | agentTypeID: 0
76 | agentRadius: 0.5
77 | agentHeight: 2
78 | agentSlope: 45
79 | agentClimb: 0.75
80 | ledgeDropHeight: 0
81 | maxJumpAcrossDistance: 0
82 | minRegionArea: 2
83 | manualCellSize: 0
84 | cellSize: 0.16666667
85 | manualTileSize: 0
86 | tileSize: 256
87 | accuratePlacement: 0
88 | debug:
89 | m_Flags: 0
90 | m_SettingNames:
91 | - Humanoid
92 |
--------------------------------------------------------------------------------
/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_EnablePreReleasePackages: 0
16 | m_EnablePackageDependencies: 0
17 | m_AdvancedSettingsExpanded: 1
18 | m_ScopedRegistriesSettingsExpanded: 1
19 | m_SeeAllPackageVersions: 0
20 | oneTimeWarningShown: 0
21 | m_Registries:
22 | - m_Id: main
23 | m_Name:
24 | m_Url: https://packages.unity.com
25 | m_Scopes: []
26 | m_IsDefault: 1
27 | m_Capabilities: 7
28 | m_UserSelectedRegistryName:
29 | m_UserAddingNewScopedRegistry: 0
30 | m_RegistryInfoDraft:
31 | m_ErrorMessage:
32 | m_Original:
33 | m_Id:
34 | m_Name:
35 | m_Url:
36 | m_Scopes: []
37 | m_IsDefault: 0
38 | m_Capabilities: 0
39 | m_Modified: 0
40 | m_Name:
41 | m_Url:
42 | m_Scopes:
43 | -
44 | m_SelectedScopeIndex: 0
45 | m_LoadAssets: 0
46 |
--------------------------------------------------------------------------------
/ProjectSettings/Physics2DSettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!19 &1
4 | Physics2DSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 4
7 | m_Gravity: {x: 0, y: -9.81}
8 | m_DefaultMaterial: {fileID: 0}
9 | m_VelocityIterations: 8
10 | m_PositionIterations: 3
11 | m_VelocityThreshold: 1
12 | m_MaxLinearCorrection: 0.2
13 | m_MaxAngularCorrection: 8
14 | m_MaxTranslationSpeed: 100
15 | m_MaxRotationSpeed: 360
16 | m_BaumgarteScale: 0.2
17 | m_BaumgarteTimeOfImpactScale: 0.75
18 | m_TimeToSleep: 0.5
19 | m_LinearSleepTolerance: 0.01
20 | m_AngularSleepTolerance: 2
21 | m_DefaultContactOffset: 0.01
22 | m_JobOptions:
23 | serializedVersion: 2
24 | useMultithreading: 0
25 | useConsistencySorting: 0
26 | m_InterpolationPosesPerJob: 100
27 | m_NewContactsPerJob: 30
28 | m_CollideContactsPerJob: 100
29 | m_ClearFlagsPerJob: 200
30 | m_ClearBodyForcesPerJob: 200
31 | m_SyncDiscreteFixturesPerJob: 50
32 | m_SyncContinuousFixturesPerJob: 50
33 | m_FindNearestContactsPerJob: 100
34 | m_UpdateTriggerContactsPerJob: 100
35 | m_IslandSolverCostThreshold: 100
36 | m_IslandSolverBodyCostScale: 1
37 | m_IslandSolverContactCostScale: 10
38 | m_IslandSolverJointCostScale: 10
39 | m_IslandSolverBodiesPerJob: 50
40 | m_IslandSolverContactsPerJob: 50
41 | m_AutoSimulation: 1
42 | m_QueriesHitTriggers: 1
43 | m_QueriesStartInColliders: 1
44 | m_CallbacksOnDisable: 1
45 | m_ReuseCollisionCallbacks: 1
46 | m_AutoSyncTransforms: 0
47 | m_AlwaysShowColliders: 0
48 | m_ShowColliderSleep: 1
49 | m_ShowColliderContacts: 0
50 | m_ShowColliderAABB: 0
51 | m_ContactArrowScale: 0.2
52 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412}
53 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432}
54 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745}
55 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804}
56 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
57 |
--------------------------------------------------------------------------------
/ProjectSettings/PresetManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1386491679 &1
4 | PresetManager:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 2
7 | m_DefaultPresets: {}
8 |
--------------------------------------------------------------------------------
/ProjectSettings/ProjectSettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!129 &1
4 | PlayerSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 22
7 | productGUID: 33bdd3e85941444249ffbf15b1361992
8 | AndroidProfiler: 0
9 | AndroidFilterTouchesWhenObscured: 0
10 | AndroidEnableSustainedPerformanceMode: 0
11 | defaultScreenOrientation: 4
12 | targetDevice: 2
13 | useOnDemandResources: 0
14 | accelerometerFrequency: 60
15 | companyName: net.ropelato
16 | productName: Unity Browser Bridge
17 | defaultCursor: {fileID: 0}
18 | cursorHotspot: {x: 0, y: 0}
19 | m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1}
20 | m_ShowUnitySplashScreen: 1
21 | m_ShowUnitySplashLogo: 1
22 | m_SplashScreenOverlayOpacity: 1
23 | m_SplashScreenAnimation: 1
24 | m_SplashScreenLogoStyle: 1
25 | m_SplashScreenDrawMode: 0
26 | m_SplashScreenBackgroundAnimationZoom: 1
27 | m_SplashScreenLogoAnimationZoom: 1
28 | m_SplashScreenBackgroundLandscapeAspect: 1
29 | m_SplashScreenBackgroundPortraitAspect: 1
30 | m_SplashScreenBackgroundLandscapeUvs:
31 | serializedVersion: 2
32 | x: 0
33 | y: 0
34 | width: 1
35 | height: 1
36 | m_SplashScreenBackgroundPortraitUvs:
37 | serializedVersion: 2
38 | x: 0
39 | y: 0
40 | width: 1
41 | height: 1
42 | m_SplashScreenLogos: []
43 | m_VirtualRealitySplashScreen: {fileID: 0}
44 | m_HolographicTrackingLossScreen: {fileID: 0}
45 | defaultScreenWidth: 1024
46 | defaultScreenHeight: 768
47 | defaultScreenWidthWeb: 960
48 | defaultScreenHeightWeb: 600
49 | m_StereoRenderingPath: 0
50 | m_ActiveColorSpace: 0
51 | m_MTRendering: 1
52 | mipStripping: 0
53 | numberOfMipsStripped: 0
54 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000
55 | iosShowActivityIndicatorOnLoading: -1
56 | androidShowActivityIndicatorOnLoading: -1
57 | iosUseCustomAppBackgroundBehavior: 0
58 | iosAllowHTTPDownload: 1
59 | allowedAutorotateToPortrait: 1
60 | allowedAutorotateToPortraitUpsideDown: 1
61 | allowedAutorotateToLandscapeRight: 1
62 | allowedAutorotateToLandscapeLeft: 1
63 | useOSAutorotation: 1
64 | use32BitDisplayBuffer: 1
65 | preserveFramebufferAlpha: 0
66 | disableDepthAndStencilBuffers: 0
67 | androidStartInFullscreen: 1
68 | androidRenderOutsideSafeArea: 1
69 | androidUseSwappy: 1
70 | androidBlitType: 0
71 | defaultIsNativeResolution: 1
72 | macRetinaSupport: 1
73 | runInBackground: 1
74 | captureSingleScreen: 0
75 | muteOtherAudioSources: 0
76 | Prepare IOS For Recording: 0
77 | Force IOS Speakers When Recording: 0
78 | deferSystemGesturesMode: 0
79 | hideHomeButton: 0
80 | submitAnalytics: 1
81 | usePlayerLog: 1
82 | bakeCollisionMeshes: 0
83 | forceSingleInstance: 0
84 | useFlipModelSwapchain: 1
85 | resizableWindow: 0
86 | useMacAppStoreValidation: 0
87 | macAppStoreCategory: public.app-category.games
88 | gpuSkinning: 1
89 | xboxPIXTextureCapture: 0
90 | xboxEnableAvatar: 0
91 | xboxEnableKinect: 0
92 | xboxEnableKinectAutoTracking: 0
93 | xboxEnableFitness: 0
94 | visibleInBackground: 1
95 | allowFullscreenSwitch: 1
96 | fullscreenMode: 1
97 | xboxSpeechDB: 0
98 | xboxEnableHeadOrientation: 0
99 | xboxEnableGuest: 0
100 | xboxEnablePIXSampling: 0
101 | metalFramebufferOnly: 0
102 | xboxOneResolution: 0
103 | xboxOneSResolution: 0
104 | xboxOneXResolution: 3
105 | xboxOneMonoLoggingLevel: 0
106 | xboxOneLoggingLevel: 1
107 | xboxOneDisableEsram: 0
108 | xboxOneEnableTypeOptimization: 0
109 | xboxOnePresentImmediateThreshold: 0
110 | switchQueueCommandMemory: 0
111 | switchQueueControlMemory: 16384
112 | switchQueueComputeMemory: 262144
113 | switchNVNShaderPoolsGranularity: 33554432
114 | switchNVNDefaultPoolsGranularity: 16777216
115 | switchNVNOtherPoolsGranularity: 16777216
116 | switchNVNMaxPublicTextureIDCount: 0
117 | switchNVNMaxPublicSamplerIDCount: 0
118 | stadiaPresentMode: 0
119 | stadiaTargetFramerate: 0
120 | vulkanNumSwapchainBuffers: 3
121 | vulkanEnableSetSRGBWrite: 0
122 | vulkanEnablePreTransform: 0
123 | vulkanEnableLateAcquireNextImage: 0
124 | vulkanEnableCommandBufferRecycling: 1
125 | m_SupportedAspectRatios:
126 | 4:3: 1
127 | 5:4: 1
128 | 16:10: 1
129 | 16:9: 1
130 | Others: 1
131 | bundleVersion: 1.0.0
132 | preloadedAssets: []
133 | metroInputSource: 0
134 | wsaTransparentSwapchain: 0
135 | m_HolographicPauseOnTrackingLoss: 1
136 | xboxOneDisableKinectGpuReservation: 1
137 | xboxOneEnable7thCore: 1
138 | vrSettings:
139 | enable360StereoCapture: 0
140 | isWsaHolographicRemotingEnabled: 0
141 | enableFrameTimingStats: 0
142 | useHDRDisplay: 0
143 | D3DHDRBitDepth: 0
144 | m_ColorGamuts: 00000000
145 | targetPixelDensity: 30
146 | resolutionScalingMode: 0
147 | androidSupportedAspectRatio: 1
148 | androidMaxAspectRatio: 2.1
149 | applicationIdentifier: {}
150 | buildNumber:
151 | Standalone: 0
152 | iPhone: 0
153 | tvOS: 0
154 | overrideDefaultApplicationIdentifier: 0
155 | AndroidBundleVersionCode: 1
156 | AndroidMinSdkVersion: 19
157 | AndroidTargetSdkVersion: 0
158 | AndroidPreferredInstallLocation: 1
159 | aotOptions:
160 | stripEngineCode: 1
161 | iPhoneStrippingLevel: 0
162 | iPhoneScriptCallOptimization: 0
163 | ForceInternetPermission: 0
164 | ForceSDCardPermission: 0
165 | CreateWallpaper: 0
166 | APKExpansionFiles: 0
167 | keepLoadedShadersAlive: 0
168 | StripUnusedMeshComponents: 1
169 | VertexChannelCompressionMask: 4054
170 | iPhoneSdkVersion: 988
171 | iOSTargetOSVersionString: 11.0
172 | tvOSSdkVersion: 0
173 | tvOSRequireExtendedGameController: 0
174 | tvOSTargetOSVersionString: 11.0
175 | uIPrerenderedIcon: 0
176 | uIRequiresPersistentWiFi: 0
177 | uIRequiresFullScreen: 1
178 | uIStatusBarHidden: 1
179 | uIExitOnSuspend: 0
180 | uIStatusBarStyle: 0
181 | appleTVSplashScreen: {fileID: 0}
182 | appleTVSplashScreen2x: {fileID: 0}
183 | tvOSSmallIconLayers: []
184 | tvOSSmallIconLayers2x: []
185 | tvOSLargeIconLayers: []
186 | tvOSLargeIconLayers2x: []
187 | tvOSTopShelfImageLayers: []
188 | tvOSTopShelfImageLayers2x: []
189 | tvOSTopShelfImageWideLayers: []
190 | tvOSTopShelfImageWideLayers2x: []
191 | iOSLaunchScreenType: 0
192 | iOSLaunchScreenPortrait: {fileID: 0}
193 | iOSLaunchScreenLandscape: {fileID: 0}
194 | iOSLaunchScreenBackgroundColor:
195 | serializedVersion: 2
196 | rgba: 0
197 | iOSLaunchScreenFillPct: 100
198 | iOSLaunchScreenSize: 100
199 | iOSLaunchScreenCustomXibPath:
200 | iOSLaunchScreeniPadType: 0
201 | iOSLaunchScreeniPadImage: {fileID: 0}
202 | iOSLaunchScreeniPadBackgroundColor:
203 | serializedVersion: 2
204 | rgba: 0
205 | iOSLaunchScreeniPadFillPct: 100
206 | iOSLaunchScreeniPadSize: 100
207 | iOSLaunchScreeniPadCustomXibPath:
208 | iOSLaunchScreenCustomStoryboardPath:
209 | iOSLaunchScreeniPadCustomStoryboardPath:
210 | iOSDeviceRequirements: []
211 | iOSURLSchemes: []
212 | iOSBackgroundModes: 0
213 | iOSMetalForceHardShadows: 0
214 | metalEditorSupport: 1
215 | metalAPIValidation: 1
216 | iOSRenderExtraFrameOnPause: 0
217 | iosCopyPluginsCodeInsteadOfSymlink: 0
218 | appleDeveloperTeamID:
219 | iOSManualSigningProvisioningProfileID:
220 | tvOSManualSigningProvisioningProfileID:
221 | iOSManualSigningProvisioningProfileType: 0
222 | tvOSManualSigningProvisioningProfileType: 0
223 | appleEnableAutomaticSigning: 0
224 | iOSRequireARKit: 0
225 | iOSAutomaticallyDetectAndAddCapabilities: 1
226 | appleEnableProMotion: 0
227 | shaderPrecisionModel: 0
228 | clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea
229 | templatePackageId: com.unity.template.3d@5.0.4
230 | templateDefaultScene: Assets/Scenes/SampleScene.unity
231 | useCustomMainManifest: 0
232 | useCustomLauncherManifest: 0
233 | useCustomMainGradleTemplate: 0
234 | useCustomLauncherGradleManifest: 0
235 | useCustomBaseGradleTemplate: 0
236 | useCustomGradlePropertiesTemplate: 0
237 | useCustomProguardFile: 0
238 | AndroidTargetArchitectures: 1
239 | AndroidSplashScreenScale: 0
240 | androidSplashScreen: {fileID: 0}
241 | AndroidKeystoreName:
242 | AndroidKeyaliasName:
243 | AndroidBuildApkPerCpuArchitecture: 0
244 | AndroidTVCompatibility: 0
245 | AndroidIsGame: 1
246 | AndroidEnableTango: 0
247 | androidEnableBanner: 1
248 | androidUseLowAccuracyLocation: 0
249 | androidUseCustomKeystore: 0
250 | m_AndroidBanners:
251 | - width: 320
252 | height: 180
253 | banner: {fileID: 0}
254 | androidGamepadSupportLevel: 0
255 | AndroidMinifyWithR8: 0
256 | AndroidMinifyRelease: 0
257 | AndroidMinifyDebug: 0
258 | AndroidValidateAppBundleSize: 1
259 | AndroidAppBundleSizeToValidate: 150
260 | m_BuildTargetIcons: []
261 | m_BuildTargetPlatformIcons: []
262 | m_BuildTargetBatching:
263 | - m_BuildTarget: Standalone
264 | m_StaticBatching: 1
265 | m_DynamicBatching: 0
266 | - m_BuildTarget: tvOS
267 | m_StaticBatching: 1
268 | m_DynamicBatching: 0
269 | - m_BuildTarget: Android
270 | m_StaticBatching: 1
271 | m_DynamicBatching: 0
272 | - m_BuildTarget: iPhone
273 | m_StaticBatching: 1
274 | m_DynamicBatching: 0
275 | - m_BuildTarget: WebGL
276 | m_StaticBatching: 0
277 | m_DynamicBatching: 0
278 | m_BuildTargetGraphicsJobs:
279 | - m_BuildTarget: MacStandaloneSupport
280 | m_GraphicsJobs: 0
281 | - m_BuildTarget: Switch
282 | m_GraphicsJobs: 1
283 | - m_BuildTarget: MetroSupport
284 | m_GraphicsJobs: 1
285 | - m_BuildTarget: AppleTVSupport
286 | m_GraphicsJobs: 0
287 | - m_BuildTarget: BJMSupport
288 | m_GraphicsJobs: 1
289 | - m_BuildTarget: LinuxStandaloneSupport
290 | m_GraphicsJobs: 1
291 | - m_BuildTarget: PS4Player
292 | m_GraphicsJobs: 1
293 | - m_BuildTarget: iOSSupport
294 | m_GraphicsJobs: 0
295 | - m_BuildTarget: WindowsStandaloneSupport
296 | m_GraphicsJobs: 1
297 | - m_BuildTarget: XboxOnePlayer
298 | m_GraphicsJobs: 1
299 | - m_BuildTarget: LuminSupport
300 | m_GraphicsJobs: 0
301 | - m_BuildTarget: AndroidPlayer
302 | m_GraphicsJobs: 0
303 | - m_BuildTarget: WebGLSupport
304 | m_GraphicsJobs: 0
305 | m_BuildTargetGraphicsJobMode:
306 | - m_BuildTarget: PS4Player
307 | m_GraphicsJobMode: 0
308 | - m_BuildTarget: XboxOnePlayer
309 | m_GraphicsJobMode: 0
310 | m_BuildTargetGraphicsAPIs:
311 | - m_BuildTarget: AndroidPlayer
312 | m_APIs: 150000000b000000
313 | m_Automatic: 0
314 | - m_BuildTarget: iOSSupport
315 | m_APIs: 10000000
316 | m_Automatic: 1
317 | - m_BuildTarget: AppleTVSupport
318 | m_APIs: 10000000
319 | m_Automatic: 1
320 | - m_BuildTarget: WebGLSupport
321 | m_APIs: 0b000000
322 | m_Automatic: 1
323 | m_BuildTargetVRSettings:
324 | - m_BuildTarget: Standalone
325 | m_Enabled: 0
326 | m_Devices:
327 | - Oculus
328 | - OpenVR
329 | openGLRequireES31: 0
330 | openGLRequireES31AEP: 0
331 | openGLRequireES32: 0
332 | m_TemplateCustomTags: {}
333 | mobileMTRendering:
334 | Android: 1
335 | iPhone: 1
336 | tvOS: 1
337 | m_BuildTargetGroupLightmapEncodingQuality:
338 | - m_BuildTarget: WebGL
339 | m_EncodingQuality: 1
340 | m_BuildTargetGroupLightmapSettings: []
341 | m_BuildTargetNormalMapEncoding: []
342 | playModeTestRunnerEnabled: 0
343 | runPlayModeTestAsEditModeTest: 0
344 | actionOnDotNetUnhandledException: 1
345 | enableInternalProfiler: 0
346 | logObjCUncaughtExceptions: 1
347 | enableCrashReportAPI: 0
348 | cameraUsageDescription:
349 | locationUsageDescription:
350 | microphoneUsageDescription:
351 | switchNMETAOverride:
352 | switchNetLibKey:
353 | switchSocketMemoryPoolSize: 6144
354 | switchSocketAllocatorPoolSize: 128
355 | switchSocketConcurrencyLimit: 14
356 | switchScreenResolutionBehavior: 2
357 | switchUseCPUProfiler: 0
358 | switchUseGOLDLinker: 0
359 | switchLTOSetting: 0
360 | switchApplicationID: 0x01004b9000490000
361 | switchNSODependencies:
362 | switchTitleNames_0:
363 | switchTitleNames_1:
364 | switchTitleNames_2:
365 | switchTitleNames_3:
366 | switchTitleNames_4:
367 | switchTitleNames_5:
368 | switchTitleNames_6:
369 | switchTitleNames_7:
370 | switchTitleNames_8:
371 | switchTitleNames_9:
372 | switchTitleNames_10:
373 | switchTitleNames_11:
374 | switchTitleNames_12:
375 | switchTitleNames_13:
376 | switchTitleNames_14:
377 | switchTitleNames_15:
378 | switchPublisherNames_0:
379 | switchPublisherNames_1:
380 | switchPublisherNames_2:
381 | switchPublisherNames_3:
382 | switchPublisherNames_4:
383 | switchPublisherNames_5:
384 | switchPublisherNames_6:
385 | switchPublisherNames_7:
386 | switchPublisherNames_8:
387 | switchPublisherNames_9:
388 | switchPublisherNames_10:
389 | switchPublisherNames_11:
390 | switchPublisherNames_12:
391 | switchPublisherNames_13:
392 | switchPublisherNames_14:
393 | switchPublisherNames_15:
394 | switchIcons_0: {fileID: 0}
395 | switchIcons_1: {fileID: 0}
396 | switchIcons_2: {fileID: 0}
397 | switchIcons_3: {fileID: 0}
398 | switchIcons_4: {fileID: 0}
399 | switchIcons_5: {fileID: 0}
400 | switchIcons_6: {fileID: 0}
401 | switchIcons_7: {fileID: 0}
402 | switchIcons_8: {fileID: 0}
403 | switchIcons_9: {fileID: 0}
404 | switchIcons_10: {fileID: 0}
405 | switchIcons_11: {fileID: 0}
406 | switchIcons_12: {fileID: 0}
407 | switchIcons_13: {fileID: 0}
408 | switchIcons_14: {fileID: 0}
409 | switchIcons_15: {fileID: 0}
410 | switchSmallIcons_0: {fileID: 0}
411 | switchSmallIcons_1: {fileID: 0}
412 | switchSmallIcons_2: {fileID: 0}
413 | switchSmallIcons_3: {fileID: 0}
414 | switchSmallIcons_4: {fileID: 0}
415 | switchSmallIcons_5: {fileID: 0}
416 | switchSmallIcons_6: {fileID: 0}
417 | switchSmallIcons_7: {fileID: 0}
418 | switchSmallIcons_8: {fileID: 0}
419 | switchSmallIcons_9: {fileID: 0}
420 | switchSmallIcons_10: {fileID: 0}
421 | switchSmallIcons_11: {fileID: 0}
422 | switchSmallIcons_12: {fileID: 0}
423 | switchSmallIcons_13: {fileID: 0}
424 | switchSmallIcons_14: {fileID: 0}
425 | switchSmallIcons_15: {fileID: 0}
426 | switchManualHTML:
427 | switchAccessibleURLs:
428 | switchLegalInformation:
429 | switchMainThreadStackSize: 1048576
430 | switchPresenceGroupId:
431 | switchLogoHandling: 0
432 | switchReleaseVersion: 0
433 | switchDisplayVersion: 1.0.0
434 | switchStartupUserAccount: 0
435 | switchTouchScreenUsage: 0
436 | switchSupportedLanguagesMask: 0
437 | switchLogoType: 0
438 | switchApplicationErrorCodeCategory:
439 | switchUserAccountSaveDataSize: 0
440 | switchUserAccountSaveDataJournalSize: 0
441 | switchApplicationAttribute: 0
442 | switchCardSpecSize: -1
443 | switchCardSpecClock: -1
444 | switchRatingsMask: 0
445 | switchRatingsInt_0: 0
446 | switchRatingsInt_1: 0
447 | switchRatingsInt_2: 0
448 | switchRatingsInt_3: 0
449 | switchRatingsInt_4: 0
450 | switchRatingsInt_5: 0
451 | switchRatingsInt_6: 0
452 | switchRatingsInt_7: 0
453 | switchRatingsInt_8: 0
454 | switchRatingsInt_9: 0
455 | switchRatingsInt_10: 0
456 | switchRatingsInt_11: 0
457 | switchRatingsInt_12: 0
458 | switchLocalCommunicationIds_0:
459 | switchLocalCommunicationIds_1:
460 | switchLocalCommunicationIds_2:
461 | switchLocalCommunicationIds_3:
462 | switchLocalCommunicationIds_4:
463 | switchLocalCommunicationIds_5:
464 | switchLocalCommunicationIds_6:
465 | switchLocalCommunicationIds_7:
466 | switchParentalControl: 0
467 | switchAllowsScreenshot: 1
468 | switchAllowsVideoCapturing: 1
469 | switchAllowsRuntimeAddOnContentInstall: 0
470 | switchDataLossConfirmation: 0
471 | switchUserAccountLockEnabled: 0
472 | switchSystemResourceMemory: 16777216
473 | switchSupportedNpadStyles: 22
474 | switchNativeFsCacheSize: 32
475 | switchIsHoldTypeHorizontal: 0
476 | switchSupportedNpadCount: 8
477 | switchSocketConfigEnabled: 0
478 | switchTcpInitialSendBufferSize: 32
479 | switchTcpInitialReceiveBufferSize: 64
480 | switchTcpAutoSendBufferSizeMax: 256
481 | switchTcpAutoReceiveBufferSizeMax: 256
482 | switchUdpSendBufferSize: 9
483 | switchUdpReceiveBufferSize: 42
484 | switchSocketBufferEfficiency: 4
485 | switchSocketInitializeEnabled: 1
486 | switchNetworkInterfaceManagerInitializeEnabled: 1
487 | switchPlayerConnectionEnabled: 1
488 | switchUseNewStyleFilepaths: 0
489 | switchUseMicroSleepForYield: 1
490 | switchMicroSleepForYieldTime: 25
491 | ps4NPAgeRating: 12
492 | ps4NPTitleSecret:
493 | ps4NPTrophyPackPath:
494 | ps4ParentalLevel: 11
495 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000
496 | ps4Category: 0
497 | ps4MasterVersion: 01.00
498 | ps4AppVersion: 01.00
499 | ps4AppType: 0
500 | ps4ParamSfxPath:
501 | ps4VideoOutPixelFormat: 0
502 | ps4VideoOutInitialWidth: 1920
503 | ps4VideoOutBaseModeInitialWidth: 1920
504 | ps4VideoOutReprojectionRate: 60
505 | ps4PronunciationXMLPath:
506 | ps4PronunciationSIGPath:
507 | ps4BackgroundImagePath:
508 | ps4StartupImagePath:
509 | ps4StartupImagesFolder:
510 | ps4IconImagesFolder:
511 | ps4SaveDataImagePath:
512 | ps4SdkOverride:
513 | ps4BGMPath:
514 | ps4ShareFilePath:
515 | ps4ShareOverlayImagePath:
516 | ps4PrivacyGuardImagePath:
517 | ps4ExtraSceSysFile:
518 | ps4NPtitleDatPath:
519 | ps4RemotePlayKeyAssignment: -1
520 | ps4RemotePlayKeyMappingDir:
521 | ps4PlayTogetherPlayerCount: 0
522 | ps4EnterButtonAssignment: 1
523 | ps4ApplicationParam1: 0
524 | ps4ApplicationParam2: 0
525 | ps4ApplicationParam3: 0
526 | ps4ApplicationParam4: 0
527 | ps4DownloadDataSize: 0
528 | ps4GarlicHeapSize: 2048
529 | ps4ProGarlicHeapSize: 2560
530 | playerPrefsMaxSize: 32768
531 | ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ
532 | ps4pnSessions: 1
533 | ps4pnPresence: 1
534 | ps4pnFriends: 1
535 | ps4pnGameCustomData: 1
536 | playerPrefsSupport: 0
537 | enableApplicationExit: 0
538 | resetTempFolder: 1
539 | restrictedAudioUsageRights: 0
540 | ps4UseResolutionFallback: 0
541 | ps4ReprojectionSupport: 0
542 | ps4UseAudio3dBackend: 0
543 | ps4UseLowGarlicFragmentationMode: 1
544 | ps4SocialScreenEnabled: 0
545 | ps4ScriptOptimizationLevel: 0
546 | ps4Audio3dVirtualSpeakerCount: 14
547 | ps4attribCpuUsage: 0
548 | ps4PatchPkgPath:
549 | ps4PatchLatestPkgPath:
550 | ps4PatchChangeinfoPath:
551 | ps4PatchDayOne: 0
552 | ps4attribUserManagement: 0
553 | ps4attribMoveSupport: 0
554 | ps4attrib3DSupport: 0
555 | ps4attribShareSupport: 0
556 | ps4attribExclusiveVR: 0
557 | ps4disableAutoHideSplash: 0
558 | ps4videoRecordingFeaturesUsed: 0
559 | ps4contentSearchFeaturesUsed: 0
560 | ps4CompatibilityPS5: 0
561 | ps4AllowPS5Detection: 0
562 | ps4GPU800MHz: 1
563 | ps4attribEyeToEyeDistanceSettingVR: 0
564 | ps4IncludedModules: []
565 | ps4attribVROutputEnabled: 0
566 | monoEnv:
567 | splashScreenBackgroundSourceLandscape: {fileID: 0}
568 | splashScreenBackgroundSourcePortrait: {fileID: 0}
569 | blurSplashScreenBackground: 1
570 | spritePackerPolicy:
571 | webGLMemorySize: 16
572 | webGLExceptionSupport: 1
573 | webGLNameFilesAsHashes: 0
574 | webGLDataCaching: 1
575 | webGLDebugSymbols: 0
576 | webGLEmscriptenArgs:
577 | webGLModulesDirectory:
578 | webGLTemplate: PROJECT:UBBExample
579 | webGLAnalyzeBuildSize: 0
580 | webGLUseEmbeddedResources: 0
581 | webGLCompressionFormat: 1
582 | webGLWasmArithmeticExceptions: 0
583 | webGLLinkerTarget: 1
584 | webGLThreadsSupport: 0
585 | webGLDecompressionFallback: 1
586 | scriptingDefineSymbols: {}
587 | additionalCompilerArguments: {}
588 | platformArchitecture: {}
589 | scriptingBackend: {}
590 | il2cppCompilerConfiguration: {}
591 | managedStrippingLevel: {}
592 | incrementalIl2cppBuild: {}
593 | suppressCommonWarnings: 1
594 | allowUnsafeCode: 0
595 | useDeterministicCompilation: 1
596 | enableRoslynAnalyzers: 1
597 | additionalIl2CppArgs:
598 | scriptingRuntimeVersion: 1
599 | gcIncremental: 1
600 | assemblyVersionValidation: 1
601 | gcWBarrierValidation: 0
602 | apiCompatibilityLevelPerPlatform:
603 | WebGL: 3
604 | m_RenderingPath: 1
605 | m_MobileRenderingPath: 1
606 | metroPackageName: Template_3D
607 | metroPackageVersion:
608 | metroCertificatePath:
609 | metroCertificatePassword:
610 | metroCertificateSubject:
611 | metroCertificateIssuer:
612 | metroCertificateNotAfter: 0000000000000000
613 | metroApplicationDescription: Template_3D
614 | wsaImages: {}
615 | metroTileShortName:
616 | metroTileShowName: 0
617 | metroMediumTileShowName: 0
618 | metroLargeTileShowName: 0
619 | metroWideTileShowName: 0
620 | metroSupportStreamingInstall: 0
621 | metroLastRequiredScene: 0
622 | metroDefaultTileSize: 1
623 | metroTileForegroundText: 2
624 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0}
625 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1}
626 | metroSplashScreenUseBackgroundColor: 0
627 | platformCapabilities: {}
628 | metroTargetDeviceFamilies: {}
629 | metroFTAName:
630 | metroFTAFileTypes: []
631 | metroProtocolName:
632 | XboxOneProductId:
633 | XboxOneUpdateKey:
634 | XboxOneSandboxId:
635 | XboxOneContentId:
636 | XboxOneTitleId:
637 | XboxOneSCId:
638 | XboxOneGameOsOverridePath:
639 | XboxOnePackagingOverridePath:
640 | XboxOneAppManifestOverridePath:
641 | XboxOneVersion: 1.0.0.0
642 | XboxOnePackageEncryption: 0
643 | XboxOnePackageUpdateGranularity: 2
644 | XboxOneDescription:
645 | XboxOneLanguage:
646 | - enus
647 | XboxOneCapability: []
648 | XboxOneGameRating: {}
649 | XboxOneIsContentPackage: 0
650 | XboxOneEnhancedXboxCompatibilityMode: 0
651 | XboxOneEnableGPUVariability: 1
652 | XboxOneSockets: {}
653 | XboxOneSplashScreen: {fileID: 0}
654 | XboxOneAllowedProductIds: []
655 | XboxOnePersistentLocalStorageSize: 0
656 | XboxOneXTitleMemory: 8
657 | XboxOneOverrideIdentityName:
658 | XboxOneOverrideIdentityPublisher:
659 | vrEditorSettings: {}
660 | cloudServicesEnabled:
661 | UNet: 1
662 | luminIcon:
663 | m_Name:
664 | m_ModelFolderPath:
665 | m_PortalFolderPath:
666 | luminCert:
667 | m_CertPath:
668 | m_SignPackage: 1
669 | luminIsChannelApp: 0
670 | luminVersion:
671 | m_VersionCode: 1
672 | m_VersionName:
673 | apiCompatibilityLevel: 6
674 | activeInputHandler: 0
675 | cloudProjectId:
676 | framebufferDepthMemorylessMode: 0
677 | qualitySettingsNames: []
678 | projectName:
679 | organizationId:
680 | cloudEnabled: 0
681 | legacyClampBlendShapeWeights: 0
682 | virtualTexturingSupportEnabled: 0
683 |
--------------------------------------------------------------------------------
/ProjectSettings/ProjectVersion.txt:
--------------------------------------------------------------------------------
1 | m_EditorVersion: 2021.1.14f1
2 | m_EditorVersionWithRevision: 2021.1.14f1 (51d2f824827f)
3 |
--------------------------------------------------------------------------------
/ProjectSettings/QualitySettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!47 &1
4 | QualitySettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 5
7 | m_CurrentQuality: 5
8 | m_QualitySettings:
9 | - serializedVersion: 2
10 | name: Very Low
11 | pixelLightCount: 0
12 | shadows: 0
13 | shadowResolution: 0
14 | shadowProjection: 1
15 | shadowCascades: 1
16 | shadowDistance: 15
17 | shadowNearPlaneOffset: 3
18 | shadowCascade2Split: 0.33333334
19 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
20 | shadowmaskMode: 0
21 | blendWeights: 1
22 | textureQuality: 1
23 | anisotropicTextures: 0
24 | antiAliasing: 0
25 | softParticles: 0
26 | softVegetation: 0
27 | realtimeReflectionProbes: 0
28 | billboardsFaceCameraPosition: 0
29 | vSyncCount: 0
30 | lodBias: 0.3
31 | maximumLODLevel: 0
32 | streamingMipmapsActive: 0
33 | streamingMipmapsAddAllCameras: 1
34 | streamingMipmapsMemoryBudget: 512
35 | streamingMipmapsRenderersPerFrame: 512
36 | streamingMipmapsMaxLevelReduction: 2
37 | streamingMipmapsMaxFileIORequests: 1024
38 | particleRaycastBudget: 4
39 | asyncUploadTimeSlice: 2
40 | asyncUploadBufferSize: 16
41 | asyncUploadPersistentBuffer: 1
42 | resolutionScalingFixedDPIFactor: 1
43 | excludedTargetPlatforms: []
44 | - serializedVersion: 2
45 | name: Low
46 | pixelLightCount: 0
47 | shadows: 0
48 | shadowResolution: 0
49 | shadowProjection: 1
50 | shadowCascades: 1
51 | shadowDistance: 20
52 | shadowNearPlaneOffset: 3
53 | shadowCascade2Split: 0.33333334
54 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
55 | shadowmaskMode: 0
56 | blendWeights: 2
57 | textureQuality: 0
58 | anisotropicTextures: 0
59 | antiAliasing: 0
60 | softParticles: 0
61 | softVegetation: 0
62 | realtimeReflectionProbes: 0
63 | billboardsFaceCameraPosition: 0
64 | vSyncCount: 0
65 | lodBias: 0.4
66 | maximumLODLevel: 0
67 | streamingMipmapsActive: 0
68 | streamingMipmapsAddAllCameras: 1
69 | streamingMipmapsMemoryBudget: 512
70 | streamingMipmapsRenderersPerFrame: 512
71 | streamingMipmapsMaxLevelReduction: 2
72 | streamingMipmapsMaxFileIORequests: 1024
73 | particleRaycastBudget: 16
74 | asyncUploadTimeSlice: 2
75 | asyncUploadBufferSize: 16
76 | asyncUploadPersistentBuffer: 1
77 | resolutionScalingFixedDPIFactor: 1
78 | excludedTargetPlatforms: []
79 | - serializedVersion: 2
80 | name: Medium
81 | pixelLightCount: 1
82 | shadows: 1
83 | shadowResolution: 0
84 | shadowProjection: 1
85 | shadowCascades: 1
86 | shadowDistance: 20
87 | shadowNearPlaneOffset: 3
88 | shadowCascade2Split: 0.33333334
89 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
90 | shadowmaskMode: 0
91 | blendWeights: 2
92 | textureQuality: 0
93 | anisotropicTextures: 1
94 | antiAliasing: 0
95 | softParticles: 0
96 | softVegetation: 0
97 | realtimeReflectionProbes: 0
98 | billboardsFaceCameraPosition: 0
99 | vSyncCount: 1
100 | lodBias: 0.7
101 | maximumLODLevel: 0
102 | streamingMipmapsActive: 0
103 | streamingMipmapsAddAllCameras: 1
104 | streamingMipmapsMemoryBudget: 512
105 | streamingMipmapsRenderersPerFrame: 512
106 | streamingMipmapsMaxLevelReduction: 2
107 | streamingMipmapsMaxFileIORequests: 1024
108 | particleRaycastBudget: 64
109 | asyncUploadTimeSlice: 2
110 | asyncUploadBufferSize: 16
111 | asyncUploadPersistentBuffer: 1
112 | resolutionScalingFixedDPIFactor: 1
113 | excludedTargetPlatforms: []
114 | - serializedVersion: 2
115 | name: High
116 | pixelLightCount: 2
117 | shadows: 2
118 | shadowResolution: 1
119 | shadowProjection: 1
120 | shadowCascades: 2
121 | shadowDistance: 40
122 | shadowNearPlaneOffset: 3
123 | shadowCascade2Split: 0.33333334
124 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
125 | shadowmaskMode: 1
126 | blendWeights: 2
127 | textureQuality: 0
128 | anisotropicTextures: 1
129 | antiAliasing: 0
130 | softParticles: 0
131 | softVegetation: 1
132 | realtimeReflectionProbes: 1
133 | billboardsFaceCameraPosition: 1
134 | vSyncCount: 1
135 | lodBias: 1
136 | maximumLODLevel: 0
137 | streamingMipmapsActive: 0
138 | streamingMipmapsAddAllCameras: 1
139 | streamingMipmapsMemoryBudget: 512
140 | streamingMipmapsRenderersPerFrame: 512
141 | streamingMipmapsMaxLevelReduction: 2
142 | streamingMipmapsMaxFileIORequests: 1024
143 | particleRaycastBudget: 256
144 | asyncUploadTimeSlice: 2
145 | asyncUploadBufferSize: 16
146 | asyncUploadPersistentBuffer: 1
147 | resolutionScalingFixedDPIFactor: 1
148 | excludedTargetPlatforms: []
149 | - serializedVersion: 2
150 | name: Very High
151 | pixelLightCount: 3
152 | shadows: 2
153 | shadowResolution: 2
154 | shadowProjection: 1
155 | shadowCascades: 2
156 | shadowDistance: 70
157 | shadowNearPlaneOffset: 3
158 | shadowCascade2Split: 0.33333334
159 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
160 | shadowmaskMode: 1
161 | blendWeights: 4
162 | textureQuality: 0
163 | anisotropicTextures: 2
164 | antiAliasing: 2
165 | softParticles: 1
166 | softVegetation: 1
167 | realtimeReflectionProbes: 1
168 | billboardsFaceCameraPosition: 1
169 | vSyncCount: 1
170 | lodBias: 1.5
171 | maximumLODLevel: 0
172 | streamingMipmapsActive: 0
173 | streamingMipmapsAddAllCameras: 1
174 | streamingMipmapsMemoryBudget: 512
175 | streamingMipmapsRenderersPerFrame: 512
176 | streamingMipmapsMaxLevelReduction: 2
177 | streamingMipmapsMaxFileIORequests: 1024
178 | particleRaycastBudget: 1024
179 | asyncUploadTimeSlice: 2
180 | asyncUploadBufferSize: 16
181 | asyncUploadPersistentBuffer: 1
182 | resolutionScalingFixedDPIFactor: 1
183 | excludedTargetPlatforms: []
184 | - serializedVersion: 2
185 | name: Ultra
186 | pixelLightCount: 4
187 | shadows: 2
188 | shadowResolution: 2
189 | shadowProjection: 1
190 | shadowCascades: 4
191 | shadowDistance: 150
192 | shadowNearPlaneOffset: 3
193 | shadowCascade2Split: 0.33333334
194 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
195 | shadowmaskMode: 1
196 | blendWeights: 4
197 | textureQuality: 0
198 | anisotropicTextures: 2
199 | antiAliasing: 2
200 | softParticles: 1
201 | softVegetation: 1
202 | realtimeReflectionProbes: 1
203 | billboardsFaceCameraPosition: 1
204 | vSyncCount: 1
205 | lodBias: 2
206 | maximumLODLevel: 0
207 | streamingMipmapsActive: 0
208 | streamingMipmapsAddAllCameras: 1
209 | streamingMipmapsMemoryBudget: 512
210 | streamingMipmapsRenderersPerFrame: 512
211 | streamingMipmapsMaxLevelReduction: 2
212 | streamingMipmapsMaxFileIORequests: 1024
213 | particleRaycastBudget: 4096
214 | asyncUploadTimeSlice: 2
215 | asyncUploadBufferSize: 16
216 | asyncUploadPersistentBuffer: 1
217 | resolutionScalingFixedDPIFactor: 1
218 | excludedTargetPlatforms: []
219 | m_PerPlatformDefaultQuality:
220 | Android: 2
221 | Lumin: 5
222 | Nintendo 3DS: 5
223 | Nintendo Switch: 5
224 | PS4: 5
225 | PSP2: 2
226 | Stadia: 5
227 | Standalone: 5
228 | WebGL: 3
229 | Windows Store Apps: 5
230 | XboxOne: 5
231 | iPhone: 2
232 | tvOS: 2
233 |
--------------------------------------------------------------------------------
/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 | }
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/ProjectSettings/UnityConnectSettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!310 &1
4 | UnityConnectSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 1
7 | m_Enabled: 0
8 | m_TestMode: 0
9 | m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events
10 | m_EventUrl: https://cdp.cloud.unity3d.com/v1/events
11 | m_ConfigUrl: https://config.uca.cloud.unity3d.com
12 | m_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: 0
24 | m_TestMode: 0
25 | m_InitializeOnStartup: 1
26 | UnityAdsSettings:
27 | m_Enabled: 0
28 | m_InitializeOnStartup: 1
29 | m_TestMode: 0
30 | m_IosGameId:
31 | m_AndroidGameId:
32 | m_GameIds: {}
33 | m_GameId:
34 | PerformanceReportingSettings:
35 | m_Enabled: 0
36 |
--------------------------------------------------------------------------------
/ProjectSettings/VFXManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!937362698 &1
4 | VFXManager:
5 | m_ObjectHideFlags: 0
6 | m_IndirectShader: {fileID: 0}
7 | m_CopyBufferShader: {fileID: 0}
8 | m_SortShader: {fileID: 0}
9 | m_StripUpdateShader: {fileID: 0}
10 | m_RenderPipeSettingsPath:
11 | m_FixedTimeStep: 0.016666668
12 | m_MaxDeltaTime: 0.05
13 |
--------------------------------------------------------------------------------
/ProjectSettings/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: Hidden Meta Files
7 | m_CollabEditorSettings:
8 | inProgressEnabled: 1
9 |
--------------------------------------------------------------------------------
/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 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Unity Browser Bridge
2 |
3 | When building a Unity project for the web, you can interact with the web browser's JavaScript engine directly from your script code (see [WebGL: Interacting with browser scripting](https://docs.unity3d.com/Manual/webgl-interactingwithbrowserscripting.html)).
4 |
5 | To test these browser interactions, you need to build the project and run it in the web browser. This can be rather time-consuming as compiling for WebGL tends to take a while.
6 |
7 | Unity Browser Bridge (UBB) allows you to test browser interactions directly from the Unity editor.
8 |
9 |
10 | ## How does it work?
11 |
12 | In a WebGL build, browser interaction is implemented by integrating the functions you defined in the _.jslib_ file into the your script code, which eventually gets translated into JavaScript. Similarly, the browser can invoke methods in your code using the SendMessage function on the Unity instance.
13 |
14 | Within the Unity editor, there is no direct way of accessing a JavaScript engine present in web browsers. UBB therefore uses [Selenium WebDriver](https://www.selenium.dev/documentation/webdriver) to control a web browser with which your script code interacts.
15 |
16 | The remote-controlled browser connects to a local HTTP server from where it loads an interface page including user-defined JavaScript files. Your script code then invokes the _ExecuteJS_ method with the JavaScript command to be executed in the browser. UBB instructs the web driver to execute the command and returns the result as return value (if there is any).
17 |
18 | The interface page contains a mockup of the Unity instance (which would be present in a WebGL build) to emulate the _SendMessage_ function. When invoked, the _SendMessage_ function sends a request to the local HTTP server which forwards the message to the corresponding game object on the Unity side. Please note that, like in the real WebGL build, messages from the browser to your script code are unidirectional (i.e. they have no return values). Figure 1 gives a high-level overview of the components involved in the interaction between your project and the web browser.
19 |
20 | 
21 | _Figure 1: Overview of the interaction between your Unity project and the web browser when compiled into a WebGL build (left) and using Unity Browser Bridge in the Unity editor (right)._
22 |
23 |
24 | ## How do I use it?
25 |
26 | #### Prerequisites
27 |
28 | Here's what you need in order to use Unity Browser Bridge:
29 |
30 | * Unity version 2021.1 or higher
31 | * Unity project targeting the WebGL platform
32 | * Web browser and its corresponding [web driver](https://www.selenium.dev/documentation/webdriver/getting_started/install_drivers)
33 | * The Unity Browser Bridge package ([UnityBrowserBridge_v1.0.0.unitypackage](https://github.com/sropelato/UnityBrowserBridge/releases/download/v1.0.0/UnityBrowserBridge_v1.0.0.unitypackage))
34 |
35 | #### Import Unity Browser Bridge
36 |
37 | Import _UnityBrowserBridge_v1.0.0.unitypackage_ into your project. Drag the _UnityBrowserBridge_ prefab (in _UnityBrowserBridge/Prefabs_) into your scene. In the inspector, you can see the following following settings:
38 |
39 | Setting | Description
40 | --------|------------
41 | Browser | The web browser which will be controlled by Unity Browser Bridge. The browser and the web driver must be installed for this to work.
42 | Web Driver Directory | Path to the directory in which the web driver is located. If this is left empty, the web driver will be searched on your system's PATH.
43 | HTTP Server Port | The port on which the local HTTP server will listen for connections.
44 | Index file | The index file opened when the browser connects to Unity Browser Bridge. Changing this may result in UBB not woking properly.
45 | Include JavaScript Files | Your JavaScript files included in the WebGL project. The path will first be resolved relative to the _Assets_ directory or, if not successful, as an absolute path.
46 |
47 | #### Configure your script to use Unity Browser Bridge
48 |
49 | Assume you want to execute a simple JavaScript command, for example ```console.log('hello world')```, from your script code. For this to work, you need to define this command in the _.jslib_ file. This could look something like this:
50 |
51 | ```
52 | mergeInto(LibraryManager.library, {
53 | PrintHelloWorld: function() {
54 | console.log('hello world')
55 | }
56 | })
57 | ```
58 |
59 | In your script code, you would then define the _PrintHelloWorld_ function like this:
60 |
61 | ```
62 | [DllImport("__Internal")]
63 | public static extern void PrintHelloWorld();
64 | ```
65 |
66 | Now you can call ```PrintHelloWorld()``` from anywhere in your script code and it should execute the _console.log_ command above when compiled into a WebGL build.
67 |
68 | To make it work in the editor, the _PrintHelloWorld()_ method needs to be changed as follows:
69 |
70 | ```
71 | public static void PrintHelloWorld() {
72 | UnityBrowserBridge.Instance.ExecuteJS("console.log('hello world')");
73 | }
74 | ```
75 |
76 | If everything has been configured correctly, running your project in the Unity editor should open a browser window and display the UBB overview page. Turning on _Show live browser calls_ allows you to see the JavaScript commands that UBB executes in the browser, in this example, the ```console.log('hello world')``` command.
77 |
78 | 
79 | _Figure 2: Unity Browser Bridge status page displayed in the remote-controlled web browser. It shows a list of included JavaScript files, if any, and a log of commands executed in the browser and messages sent from the browser to Unity. For performance reasons, both logs are disabled by default._
80 |
81 | In a next step, you can use Unity's platform-dependent macros to avoid having to change the definition of the _PrintHelloWorld_ function every time you want to build your project:
82 |
83 | ```
84 | #if UNITY_WEBGL && !UNITY_EDITOR
85 | [DllImport("__Internal")]
86 | public static extern void PrintHelloWorld();
87 | #else
88 | public static void PrintHelloWorld() {
89 | UnityBrowserBridge.Instance.ExecuteJS("console.log('hello world')");
90 | }
91 | #endif
92 | ```
93 |
94 | With this in place, your project can be run in the Unity editor and compiled into a WebGL build, both with working browser interaction.
95 |
96 |
97 | ## The example project
98 |
99 | The example project ([UnityBrowserBridgeExample_v1.0.0.unitypackage](https://github.com/sropelato/UnityBrowserBridge/releases/download/v1.0.0/UnityBrowserBridgeExample_v1.0.0.unitypackage)) contains a sample with a fully-configured UBB setup. It demonstrates how to invoke JavaScript functions with parameters and return types and how to handle function calls from the browser.
100 |
101 | _Please note that the example project does not include the Unity Browser Bridge implementation. In order to work, the main package ___UnityBrowserBridge_v1.0.0.unitypackage___ must be imported as well._
102 |
103 | #### Contents
104 |
105 | The ___WebGLTemplates/UBBExample___ folder contains all files required to define a WebGL template which will be used when compiling the project to a WebGL build. The file ___TemplateData/myscript.js___ is included in the template and defines the functions _getDateAndTime_ and _getDateAndTimeAsync_ which return a formatted date string.
106 |
107 | ___Plugins/BrowserInteraction.json___ defines the two wrapper functions _GetDateAndTime_ and _GetDateAndTimeAsync_ which will invoke the JavaScript functions in _myscript.js_.
108 |
109 | The controller (___Scripts/MainController.cs___) handles the calls to the wrapper functions (using UBB when run in the editor, or directly when compiled to WebGL).
110 |
111 | The example scene (___Scenes/UnityBrowserBridgeExample.scene___) contains a simple UI with two buttons to display the current date (Figure 3), a game object with the _MainController_ script, and the _UnityBrowserBridge_ object (from _UnityBrowserBridge/Prefabs/UnityBrowserBridge.prefab_). Note that the _myscript.js_ file is listed under _Include JavaScript Files_.
112 |
113 |
114 | 
115 | _Figure 3: Unity Browser Bridge example project. Two buttons can be used to get and display the current date and time from the browser._
116 |
117 |
118 |
119 | #### How to run the example project
120 |
121 | Configure Unity Browser Bridge to use the browser of your choice. Make sure the appropriate web driver is installed. If the executable is not on your system's PATH, set the directory containing the driver executable in _Web Driver Directory_ (Figure 4).
122 |
123 | If configured correctly, a browser window displaying the UBB status page should appear when you enter play mode (Figure 5). Pressing the first button, _Get Date And Time_, invokes the _getDateAndTime_ function which directly returns the formatted date string. _Get Date And Time (Async)_ invokes _getDateAndTimeAsync_ respectively which invokes the _SetDateAndTime_ callback method in _MainController.cs_ (after a 1000 ms delay).
124 |
125 | As in the _hello world_ example above, we use Unity's macros to make our code work in the WebGL build as well as in the editor. When compiled to WebGL, _GetDateAndTime_ and _GetDateAndTimeAsync_ are linked to the wrapper functions in _BrowserInteraction.json_. In the editor, they use Unity Browser Bridge instead. The example shows that ```ExecuteJS()``` has a return type ```T``` while ```ExecuteJS()``` (without the diamond) has no return type:
126 |
127 | ```
128 | ...
129 |
130 | #if UNITY_WEBGL && !UNITY_EDITOR
131 |
132 | [DllImport("__Internal")]
133 | public static extern string GetDateAndTime(string locale);
134 | [DllImport("__Internal")]
135 | public static extern void GetDateAndTimeAsync(string locale);
136 |
137 | #else
138 |
139 | public static string GetDateAndTime(string locale) {
140 | return UnityBrowserBridge.Instance.ExecuteJS("getDateAndTime('" + locale + "')");
141 | }
142 |
143 | public static void GetDateAndTimeAsync(string locale) {
144 | UnityBrowserBridge.Instance.ExecuteJS("getDateAndTimeAsync('" + locale + "')");
145 | }
146 |
147 | #endif
148 |
149 | public void SetDateAndTime(string dateAndTimeString) {
150 | dateAndTimeText.text = dateAndTimeString;
151 | getDateAndTimeAsyncButton.interactable = true;
152 | }
153 |
154 | ...
155 |
156 | ```
157 |
158 | 
159 | _Figure 4: Unity Browser Bridge configuration. The web driver executable (here chromedriver) is located in /usr/local/bin which is defined as the Web Driver Directory. The myscript.js file is listed to be included in the web project so its functions can be accessed by Unity Browser Bridge._
160 |
161 | 
162 | _Figure 5: Unity Browser Bridge status page of the example project with the included myscript.js file. Enabling the live calls shows the browser calls from Unity and the messages sent to Unity._
163 |
164 | Of course, the example project can be built as a WebGL project and should show the same behavior like when tested in the Unity editor (Figure 6). Make sure to use the UBBExample WebGL template as it contains the required _myscript.js_ file.
165 |
166 | 
167 | _Figure 6: Example project compiled to WebGL._
168 |
169 |
170 | ## License
171 |
172 | The source code, binaries and all included assets of Unity Browser Bridge are released under the [MIT license](LICENSE).
173 |
174 | #### Included software
175 |
176 | The Selenium framework (used to interact with the web driver) is licensed under the Apache 2.0 license (License file included in [Assets/UnityBrowserBridge/Plugins/SeleniumLicense.txt](Assets/UnityBrowserBridge/Plugins/SeleniumLicense.txt)).
177 |
178 | jQuery (used in the example WebGL template) is licensed under the MIT license (License file included in [Assets/WebGLTemplates/UBBExample/TemplateData/jQueryLicense.txt](Assets/WebGLTemplates/UBBExample/TemplateData/jQueryLicense.txt)).
179 |
--------------------------------------------------------------------------------