Compare commits
4 Commits
b52e1df9f8
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| df7dc04cf1 | |||
| 4f782a638e | |||
| 9336ed0d6f | |||
| 0da10d3e7c |
8
Assets/ExternalDependencyManager.meta
Normal file
8
Assets/ExternalDependencyManager.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b90734360169d4f6e9a0d45c7e68b868
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/ExternalDependencyManager/Editor.meta
Normal file
8
Assets/ExternalDependencyManager/Editor.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 00ae6535975cc4831b66a2a9668ff033
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/ExternalDependencyManager/Editor/1.2.186.meta
Normal file
8
Assets/ExternalDependencyManager/Editor/1.2.186.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bf62de139853544faadf65eb92d0d55d
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -0,0 +1,38 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e2d7ea0845de4cf984265d2a444b7aa4
|
||||
labels:
|
||||
- gvh
|
||||
- gvh_version-1.2.186
|
||||
- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.dll
|
||||
- gvhp_targets-editor
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 0
|
||||
platformData:
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,13 @@
|
||||
fileFormatVersion: 2
|
||||
guid: baf24db2bf904e729e7796721c09e8ad
|
||||
labels:
|
||||
- gvh
|
||||
- gvh_rename_to_disable
|
||||
- gvh_version-1.2.186
|
||||
- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.pdb
|
||||
- gvhp_targets-editor
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -0,0 +1,38 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fa49a85d4ba140a0ae21528ed12d174c
|
||||
labels:
|
||||
- gvh
|
||||
- gvh_version-1.2.186
|
||||
- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.dll
|
||||
- gvhp_targets-editor
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,13 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d13c8602d5e14e43b0e92459754c4315
|
||||
labels:
|
||||
- gvh
|
||||
- gvh_rename_to_disable
|
||||
- gvh_version-1.2.186
|
||||
- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.pdb
|
||||
- gvhp_targets-editor
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -0,0 +1,38 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d8bb10c56a0147bc855a6296778e025e
|
||||
labels:
|
||||
- gvh
|
||||
- gvh_version-1.2.186
|
||||
- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.dll
|
||||
- gvhp_targets-editor
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,13 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a695eb9f64fe49569a2db0c4246c877d
|
||||
labels:
|
||||
- gvh
|
||||
- gvh_rename_to_disable
|
||||
- gvh_version-1.2.186
|
||||
- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.pdb
|
||||
- gvhp_targets-editor
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -0,0 +1,38 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5980a684c61d42fbb6b74e2eb3477016
|
||||
labels:
|
||||
- gvh
|
||||
- gvh_version-1.2.186
|
||||
- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.dll
|
||||
- gvhp_targets-editor
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,13 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9f56badf3ca84753b00163c3b632d4e5
|
||||
labels:
|
||||
- gvh
|
||||
- gvh_rename_to_disable
|
||||
- gvh_version-1.2.186
|
||||
- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.pdb
|
||||
- gvhp_targets-editor
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
1430
Assets/ExternalDependencyManager/Editor/CHANGELOG.md
Normal file
1430
Assets/ExternalDependencyManager/Editor/CHANGELOG.md
Normal file
File diff suppressed because it is too large
Load Diff
12
Assets/ExternalDependencyManager/Editor/CHANGELOG.md.meta
Normal file
12
Assets/ExternalDependencyManager/Editor/CHANGELOG.md.meta
Normal file
@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: aba4ee01c6d145f7bf2d944d892f709a
|
||||
labels:
|
||||
- gvh
|
||||
- gvh_version-1.2.186
|
||||
- gvhp_exportpath-ExternalDependencyManager/Editor/CHANGELOG.md
|
||||
timeCreated: 1584567712
|
||||
licenseType: Store
|
||||
TextScriptImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -0,0 +1,36 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f7632a50b10045458c53a5ddf7b6d238
|
||||
labels:
|
||||
- gvh
|
||||
- gvh_version-1.2.186
|
||||
- gvhp_exportpath-ExternalDependencyManager/Editor/Google.VersionHandler.dll
|
||||
- gvhp_targets-editor
|
||||
timeCreated: 1480838400
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
platformData:
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 57f5a82a79ab4b098f09326c8f3c73a6
|
||||
labels:
|
||||
- gvh
|
||||
- gvh_version-1.2.186
|
||||
- gvhp_exportpath-ExternalDependencyManager/Editor/Google.VersionHandler.pdb
|
||||
timeCreated: 1538009133
|
||||
licenseType: Store
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
245
Assets/ExternalDependencyManager/Editor/LICENSE
Normal file
245
Assets/ExternalDependencyManager/Editor/LICENSE
Normal file
@ -0,0 +1,245 @@
|
||||
Copyright (C) 2014 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
====================================================================================================
|
||||
This package uses MiniJSON
|
||||
|
||||
Copyright (c) 2013 Calvin Rien
|
||||
|
||||
Based on the JSON parser by Patrick van Bergen
|
||||
http://techblog.procurios.nl/k/618/news/view/14605/14863/How-do-I-write-my-own-parser-for-JSON.html
|
||||
|
||||
Simplified it so that it doesn't throw exceptions
|
||||
and can be used in Unity iPhone with maximum code stripping.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
12
Assets/ExternalDependencyManager/Editor/LICENSE.meta
Normal file
12
Assets/ExternalDependencyManager/Editor/LICENSE.meta
Normal file
@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ae8b2bc8d1ac4ad48f0ab2b2e7ac75fb
|
||||
labels:
|
||||
- gvh
|
||||
- gvh_version-1.2.186
|
||||
- gvhp_exportpath-ExternalDependencyManager/Editor/LICENSE
|
||||
timeCreated: 1584567712
|
||||
licenseType: Store
|
||||
TextScriptImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
903
Assets/ExternalDependencyManager/Editor/README.md
Normal file
903
Assets/ExternalDependencyManager/Editor/README.md
Normal file
@ -0,0 +1,903 @@
|
||||
# External Dependency Manager for Unity
|
||||
|
||||
[](https://openupm.com/packages/com.google.external-dependency-manager/)
|
||||
[](https://openupm.com/packages/com.google.external-dependency-manager/)
|
||||
|
||||
## Overview
|
||||
|
||||
The External Dependency Manager for Unity (EDM4U) (formerly Play Services
|
||||
Resolver/Jar Resolver) is intended to be used by any Unity package or user that
|
||||
requires:
|
||||
|
||||
* Android specific libraries (e.g
|
||||
[AARs](https://developer.android.com/studio/projects/android-library.html))
|
||||
|
||||
* iOS [CocoaPods](https://cocoapods.org/)
|
||||
|
||||
* Version management of transitive dependencies
|
||||
|
||||
* Management of Package Manager (PM) Registries
|
||||
|
||||
If you want to add and use iOS/Android dependencies directly in your project,
|
||||
then you should to install EDM4U in your project.
|
||||
|
||||
If you are a package user and the plugin you are using depends on EDM4U, *and*
|
||||
the package does not include EDM4U as a package dependency already, then you
|
||||
should to install EDM4U in your project.
|
||||
|
||||
If you are a UPM package maintainer and your package requires EDM4U, then you
|
||||
should add EDM4U as a
|
||||
[package dependency](https://docs.unity3d.com/2019.3/Documentation/Manual/upm-dependencies.html)
|
||||
in your package manifest (`package.json`):
|
||||
|
||||
```json
|
||||
{
|
||||
"dependencies": {
|
||||
"com.google.external-dependency-manager": "1.2.178"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
You should still install EDM4U to test out the package during development.
|
||||
|
||||
If you are a legacy `.unitypackage` package maintainer and your package requires
|
||||
EDM4U, please ask the user to install EDM4U separately. You should install EDM4U
|
||||
to test out the package during development.
|
||||
|
||||
Updated releases are available on
|
||||
[GitHub](https://github.com/googlesamples/unity-jar-resolver)
|
||||
|
||||
## Requirements
|
||||
|
||||
The *Android Resolver* and *iOS Resolver* components of the plugin only work
|
||||
with Unity version 4.6.8 or higher.
|
||||
|
||||
The *Version Handler* component only works with Unity 5.x or higher as it
|
||||
depends upon the `PluginImporter` UnityEditor API.
|
||||
|
||||
The *Package Manager Resolver* component only works with Unity 2018.4 or above,
|
||||
when [scoped registry](https://docs.unity3d.com/Manual/upm-scoped.html) support
|
||||
was added to the Package Manager.
|
||||
|
||||
## Getting Started
|
||||
|
||||
Check out [troubleshooting](troubleshooting-faq.md) if you need help.
|
||||
|
||||
### Install via OpenUPM
|
||||
|
||||
EDM4U is available on
|
||||
[OpenUPM](https://openupm.com/packages/com.google.external-dependency-manager/):
|
||||
|
||||
```shell
|
||||
openupm add com.google.external-dependency-manager
|
||||
```
|
||||
|
||||
### Install via git URL
|
||||
1. Open Package Manager
|
||||
2. Click on the + icon on the top left corner of the "Package Manager" screen
|
||||
3. Click on "Install package from git url..."
|
||||
4. Paste: https://github.com/googlesamples/unity-jar-resolver.git?path=upm
|
||||
|
||||
### Install via Google APIs for Unity
|
||||
|
||||
EDM4U is available both in UPM and legacy `.unitypackage` formats on
|
||||
[Google APIs for Unity](https://developers.google.com/unity/archive#external_dependency_manager_for_unity).
|
||||
|
||||
You may install the UPM version (.tgz) as a
|
||||
[local UPM package](https://docs.unity3d.com/Manual/upm-ui-local.html).
|
||||
|
||||
You can also install EDM4U in your project as a `.unitypackage`. This is not
|
||||
recommended due to potential conflicts.
|
||||
|
||||
### Conflict Resolution
|
||||
|
||||
For historical reasons, a package maintainer may choose to embed EDM4U in their
|
||||
package for ease of installation. This will create a conflict when you try to
|
||||
install EDM4U with the steps above, or with another package with embedded EDM4U.
|
||||
If your project imported a `.unitypackage` that has a copy of EDM4U embedded in
|
||||
it, you may safely delete it from your Assets folder. If your project depends on
|
||||
another UPM package with EDM4U, please reach out to the package maintainer and
|
||||
ask them to replace it with a dependency to this package. In the meantime, you
|
||||
can workaround the issue by copying the package to your Packages folder (to
|
||||
create an
|
||||
[embedded package](https://docs.unity3d.com/Manual/upm-concepts.html#Embedded))
|
||||
and perform the steps yourself to avoid a dependency conflict.
|
||||
|
||||
### Config file
|
||||
|
||||
To start adding dependencies to your project, copy and rename the
|
||||
[SampleDependencies.xml](https://github.com/googlesamples/unity-jar-resolver/blob/master/sample/Assets/ExternalDependencyManager/Editor/SampleDependencies.xml)
|
||||
file into your plugin and add the dependencies your project requires.
|
||||
|
||||
The XML file needs to be under an `Editor` directory and match the name
|
||||
`*Dependencies.xml`. For example, `MyPlugin/Editor/MyPluginDependencies.xml`.
|
||||
|
||||
## Usages
|
||||
|
||||
### Android Resolver
|
||||
|
||||
The Android Resolver copies specified dependencies from local or remote Maven
|
||||
repositories into the Unity project when a user selects Android as the build
|
||||
target in the Unity editor.
|
||||
|
||||
For example, to add the Google Play Games library
|
||||
(`com.google.android.gms:play-services-games` package) at version `9.8.0` to the
|
||||
set of a plugin's Android dependencies:
|
||||
|
||||
```xml
|
||||
<dependencies>
|
||||
<androidPackages>
|
||||
<androidPackage spec="com.google.android.gms:play-services-games:9.8.0">
|
||||
<androidSdkPackageIds>
|
||||
<androidSdkPackageId>extra-google-m2repository</androidSdkPackageId>
|
||||
</androidSdkPackageIds>
|
||||
</androidPackage>
|
||||
</androidPackages>
|
||||
</dependencies>
|
||||
```
|
||||
|
||||
The version specification (last component) supports:
|
||||
|
||||
* Specific versions e.g `9.8.0`
|
||||
|
||||
* Partial matches e.g `9.8.+` would match 9.8.0, 9.8.1 etc. choosing the most
|
||||
recent version
|
||||
|
||||
* Latest version using `LATEST` or `+`. We do *not* recommend using this
|
||||
unless you're 100% sure the library you depend upon will not break your
|
||||
Unity plugin in future
|
||||
|
||||
The above example specifies the dependency as a component of the Android SDK
|
||||
manager such that the Android SDK manager will be executed to install the
|
||||
package if it's not found. If your Android dependency is located on Maven
|
||||
central it's possible to specify the package simply using the `androidPackage`
|
||||
element:
|
||||
|
||||
```xml
|
||||
<dependencies>
|
||||
<androidPackages>
|
||||
<androidPackage spec="com.google.api-client:google-api-client-android:1.22.0" />
|
||||
</androidPackages>
|
||||
</dependencies>
|
||||
```
|
||||
|
||||
#### Auto-resolution
|
||||
|
||||
By default the Android Resolver automatically monitors the dependencies you have
|
||||
specified and the `Plugins/Android` folder of your Unity project. The resolution
|
||||
process runs when the specified dependencies are not present in your project.
|
||||
|
||||
The *auto-resolution* process can be disabled via the `Assets > External
|
||||
Dependency Manager > Android Resolver > Settings` menu.
|
||||
|
||||
Manual resolution can be performed using the following menu options:
|
||||
|
||||
* `Assets > External Dependency Manager > Android Resolver > Resolve`
|
||||
|
||||
* `Assets > External Dependency Manager > Android Resolver > Force Resolve`
|
||||
|
||||
#### Deleting libraries
|
||||
|
||||
Resolved packages are tracked via asset labels by the Android Resolver. They can
|
||||
easily be deleted using the `Assets > External Dependency Manager > Android
|
||||
Resolver > Delete Resolved Libraries` menu item.
|
||||
|
||||
#### Android Manifest Variable Processing
|
||||
|
||||
Some AAR files (for example play-services-measurement) contain variables that
|
||||
are processed by the Android Gradle plugin. Unfortunately, Unity does not
|
||||
perform the same processing when using Unity's Internal Build System, so the
|
||||
Android Resolver plugin handles known cases of this variable substitution by
|
||||
exploding the AAR into a folder and replacing `${applicationId}` with the
|
||||
`bundleID`.
|
||||
|
||||
Disabling AAR explosion and therefore Android manifest processing can be done
|
||||
via the `Assets > External Dependency Manager > Android Resolver > Settings`
|
||||
menu. You may want to disable explosion of AARs if you're exporting a project to
|
||||
be built with Gradle/Android Studio.
|
||||
|
||||
#### ABI Stripping
|
||||
|
||||
Some AAR files contain native libraries (.so files) for each ABI supported by
|
||||
Android. Unfortunately, when targeting a single ABI (e.g x86), Unity does not
|
||||
strip native libraries for unused ABIs. To strip unused ABIs, the Android
|
||||
Resolver plugin explodes an AAR into a folder and removes unused ABIs to reduce
|
||||
the built APK size. Furthermore, if native libraries are not stripped from an
|
||||
APK (e.g you have a mix of Unity's x86 library and some armeabi-v7a libraries)
|
||||
Android may attempt to load the wrong library for the current runtime ABI
|
||||
completely breaking your plugin when targeting some architectures.
|
||||
|
||||
AAR explosion and therefore ABI stripping can be disabled via the `Assets >
|
||||
External Dependency Manager > Android Resolver > Settings` menu. You may want to
|
||||
disable explosion of AARs if you're exporting a project to be built with
|
||||
Gradle/Android Studio.
|
||||
|
||||
#### Resolution Strategies
|
||||
|
||||
By default the Android Resolver will use Gradle to download dependencies prior
|
||||
to integrating them into a Unity project. This works with Unity's internal build
|
||||
system and Gradle/Android Studio project export.
|
||||
|
||||
It's possible to change the resolution strategy via the `Assets > External
|
||||
Dependency Manager > Android Resolver > Settings` menu.
|
||||
|
||||
##### Download Artifacts with Gradle
|
||||
|
||||
Using the default resolution strategy, the Android resolver executes the
|
||||
following operations:
|
||||
|
||||
- Remove the result of previous Android resolutions. E.g Delete all files and
|
||||
directories labeled with "gpsr" under `Plugins/Android` from the project.
|
||||
|
||||
- Collect the set of Android dependencies (libraries) specified by a project's
|
||||
`*Dependencies.xml` files.
|
||||
|
||||
- Run `download_artifacts.gradle` with Gradle to resolve conflicts and, if
|
||||
successful, download the set of resolved Android libraries (AARs, JARs).
|
||||
|
||||
- Process each AAR/JAR so that it can be used with the currently selected
|
||||
Unity build system (e.g Internal vs. Gradle, Export vs. No Export). This
|
||||
involves patching each reference to `applicationId` in the
|
||||
`AndroidManifest.xml` with the project's bundle ID. This means resolution
|
||||
must be run again if the bundle ID has changed.
|
||||
|
||||
- Move the processed AARs to `Plugins/Android` so they will be included when
|
||||
Unity invokes the Android build.
|
||||
|
||||
##### Integrate into mainTemplate.gradle
|
||||
|
||||
Unity 5.6 introduced support for customizing the `build.gradle` used to build
|
||||
Unity projects with Gradle. When the *Patch mainTemplate.gradle* setting is
|
||||
enabled, rather than downloading artifacts before the build, Android resolution
|
||||
results in the execution of the following operations:
|
||||
|
||||
- Remove the result of previous Android resolutions. E.g Delete all files and
|
||||
directories labeled with "gpsr" under `Plugins/Android` from the project and
|
||||
remove sections delimited with `// Android Resolver * Start` and `// Android
|
||||
Resolver * End` lines.
|
||||
|
||||
- Collect the set of Android dependencies (libraries) specified by a project's
|
||||
`*Dependencies.xml` files.
|
||||
|
||||
- Rename any `.srcaar` files in the build to `.aar` and exclude them from
|
||||
being included directly by Unity in the Android build as
|
||||
`mainTemplate.gradle` will be patched to include them instead from their
|
||||
local maven repositories.
|
||||
|
||||
- Inject the required Gradle repositories into `mainTemplate.gradle` at the
|
||||
line matching the pattern `.*apply plugin:
|
||||
'com\.android\.(application|library)'.*` or the section starting at the line
|
||||
`// Android Resolver Repos Start`. If you want to control the injection
|
||||
point in the file, the section delimited by the lines `// Android Resolver
|
||||
Repos Start` and `// Android Resolver Repos End` should be placed in the
|
||||
global scope before the `dependencies` section.
|
||||
|
||||
- Inject the required Android dependencies (libraries) into
|
||||
`mainTemplate.gradle` at the line matching the pattern `***DEPS***` or the
|
||||
section starting at the line `// Android Resolver Dependencies Start`. If
|
||||
you want to control the injection point in the file, the section delimited
|
||||
by the lines `// Android Resolver Dependencies Start` and `// Android
|
||||
Resolver Dependencies End` should be placed in the `dependencies` section.
|
||||
|
||||
- Inject the packaging options logic, which excludes architecture specific
|
||||
libraries based upon the selected build target, into `mainTemplate.gradle`
|
||||
at the line matching the pattern `android +{` or the section starting at the
|
||||
line `// Android Resolver Exclusions Start`. If you want to control the
|
||||
injection point in the file, the section delimited by the lines `// Android
|
||||
Resolver Exclusions Start` and `// Android Resolver Exclusions End` should
|
||||
be placed in the global scope before the `android` section.
|
||||
|
||||
#### Dependency Tracking
|
||||
|
||||
The Android Resolver creates the
|
||||
`ProjectSettings/AndroidResolverDependencies.xml` to quickly determine the set
|
||||
of resolved dependencies in a project. This is used by the auto-resolution
|
||||
process to only run the expensive resolution process when necessary.
|
||||
|
||||
#### Displaying Dependencies
|
||||
|
||||
It's possible to display the set of dependencies the Android Resolver would
|
||||
download and process in your project via the `Assets > External Dependency
|
||||
Manager > Android Resolver > Display Libraries` menu item.
|
||||
|
||||
### iOS Resolver
|
||||
|
||||
The iOS resolver component of this plugin manages
|
||||
[CocoaPods](https://cocoapods.org/). A CocoaPods `Podfile` is generated and the
|
||||
`pod` tool is executed as a post build process step to add dependencies to the
|
||||
Xcode project exported by Unity.
|
||||
|
||||
Dependencies for iOS are added by referring to CocoaPods.
|
||||
|
||||
For example, to add the AdMob pod, version 7.0 or greater with bitcode enabled:
|
||||
|
||||
```xml
|
||||
<dependencies>
|
||||
<iosPods>
|
||||
<iosPod name="Google-Mobile-Ads-SDK" version="~> 7.0" bitcodeEnabled="true"
|
||||
minTargetSdk="6.0" addToAllTargets="false" />
|
||||
</iosPods>
|
||||
</dependencies>
|
||||
```
|
||||
|
||||
#### Integration Strategies
|
||||
|
||||
The `CocoaPods` are either:
|
||||
|
||||
* Downloaded and injected into the Xcode project file directly, rather than
|
||||
creating a separate xcworkspace. We call this `Xcode project` integration.
|
||||
|
||||
* If the Unity version supports opening a xcworkspace file, the `pod` tool is
|
||||
used as intended to generate a xcworkspace which references the CocoaPods.
|
||||
We call this `Xcode workspace` integration.
|
||||
|
||||
The resolution strategy can be changed via the `Assets > External Dependency
|
||||
Manager > iOS Resolver > Settings` menu.
|
||||
|
||||
##### Appending text to generated Podfile
|
||||
|
||||
In order to modify the generated Podfile you can create a script like this:
|
||||
|
||||
```csharp
|
||||
using System.IO;
|
||||
|
||||
using UnityEditor;
|
||||
using UnityEditor.Callbacks;
|
||||
using UnityEngine;
|
||||
|
||||
public class PostProcessIOS : MonoBehaviour
|
||||
{
|
||||
// Must be between 40 and 50 to ensure that it's not overriden by Podfile generation (40) and
|
||||
// that it's added before "pod install" (50).
|
||||
[PostProcessBuildAttribute(45)]
|
||||
private static void PostProcessBuild_iOS(BuildTarget target, string buildPath)
|
||||
{
|
||||
if (target == BuildTarget.iOS)
|
||||
{
|
||||
using (StreamWriter sw = File.AppendText(buildPath + "/Podfile"))
|
||||
{
|
||||
// E.g. add an app extension
|
||||
sw.WriteLine("\ntarget 'NSExtension' do\n pod 'Firebase/Messaging', '6.6.0'\nend");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Package Manager Resolver
|
||||
|
||||
Adding registries to the
|
||||
[Package Manager](https://docs.unity3d.com/Manual/Packages.html) (PM) is a
|
||||
manual process. The Package Manager Resolver (PMR) component of this plugin
|
||||
makes it easy for plugin maintainers to distribute new PM registry servers and
|
||||
easy for plugin users to manage PM registry servers.
|
||||
|
||||
#### Adding Registries
|
||||
|
||||
For example, to add a registry for plugins in the scope `com.coolstuff`:
|
||||
|
||||
```xml
|
||||
<registries>
|
||||
<registry name="Cool Stuff"
|
||||
url="https://unityregistry.coolstuff.com"
|
||||
termsOfService="https://coolstuff.com/unityregistry/terms"
|
||||
privacyPolicy="https://coolstuff.com/unityregistry/privacy">
|
||||
<scopes>
|
||||
<scope>com.coolstuff</scope>
|
||||
</scopes>
|
||||
</registry>
|
||||
</registries>
|
||||
```
|
||||
|
||||
When PMR is loaded it will prompt the developer to add the registry to their
|
||||
project if it isn't already present in the `Packages/manifest.json` file.
|
||||
|
||||
For more information, see Unity's documentation on
|
||||
[scoped package registries](https://docs.unity3d.com/Manual/upm-scoped.html).
|
||||
|
||||
#### Managing Registries
|
||||
|
||||
It's possible to add and remove registries that are specified via PMR XML
|
||||
configuration files via the following menu options:
|
||||
|
||||
* `Assets > External Dependency Manager > Package Manager Resolver > Add
|
||||
Registries` will prompt the user with a window which allows them to add
|
||||
registries discovered in the project to the Package Manager.
|
||||
|
||||
* `Assets > External Dependency Manager > Package Manager Resolver > Remove
|
||||
Registries` will prompt the user with a window which allows them to remove
|
||||
registries discovered in the project from the Package Manager.
|
||||
|
||||
* `Assets > External Dependency Manager > Package Manager Resolver > Modify
|
||||
Registries` will prompt the user with a window which allows them to add or
|
||||
remove registries discovered in the project.
|
||||
|
||||
#### Migration
|
||||
|
||||
PMR can migrate Version Handler packages installed in the `Assets` folder to PM
|
||||
packages. This requires the plugins to implement the following:
|
||||
|
||||
* `.unitypackage` must include a Version Handler manifests that describes the
|
||||
components of the plugin. If the plugin has no dependencies the manifest
|
||||
would just include the files in the plugin.
|
||||
|
||||
* The PM package JSON provided by the registry must include a keyword (in the
|
||||
`versions.VERSION.keyword` list) that maps the PM package to a Version
|
||||
Handler package using the format `vh-name:VERSION_HANDLER_MANIFEST_NAME`
|
||||
where `VERSION_HANDLER_MANIFEST_NAME` is the name of the manifest defined in
|
||||
the `.unitypackage`. For more information see the description of the
|
||||
`gvhp_manifestname` asset label in the [Version Handler](#version-handler)
|
||||
section.
|
||||
|
||||
When using the `Assets > External Dependency Manager > Package Manager
|
||||
Resolver > Migrate Packages` menu option, PMR then will:
|
||||
|
||||
* List all Version Handler manager packages in the project.
|
||||
|
||||
* Search all available packages in the PM registries and fetch keywords
|
||||
associated with each package parsing the Version Handler manifest names for
|
||||
each package.
|
||||
|
||||
* Map each installed Version Handler package to a PM package.
|
||||
|
||||
* Prompt the user to migrate the discovered packages.
|
||||
|
||||
* Perform package migration for all selected packages if the user clicks the
|
||||
`Apply` button.
|
||||
|
||||
#### Configuration
|
||||
|
||||
PMR can be configured via the `Assets > External Dependency Manager > Package
|
||||
Manager Resolver > Settings` menu option:
|
||||
|
||||
* `Add package registries` when enabled, when the plugin loads or registry
|
||||
configuration files change, this will prompt the user to add registries that
|
||||
are not present in the Package Manager.
|
||||
|
||||
* `Prompt to add package registries` will cause a developer to be prompted
|
||||
with a window that will ask for confirmation before adding registries. When
|
||||
this is disabled registries are added silently to the project.
|
||||
|
||||
* `Prompt to migrate packages` will cause a developer to be prompted with a
|
||||
window that will ask for confirmation before migrating packages installed in
|
||||
the `Assets` directory to PM packages.
|
||||
|
||||
* `Enable Analytics Reporting` when enabled, reports the use of the plugin to
|
||||
the developers so they can make imrpovements.
|
||||
|
||||
* `Verbose logging` when enabled prints debug information to the console which
|
||||
can be useful when filing bug reports.
|
||||
|
||||
### Version Handler
|
||||
|
||||
The Version Handler component of this plugin manages:
|
||||
|
||||
* Shared Unity plugin dependencies.
|
||||
|
||||
* Upgrading Unity plugins by cleaning up old files from previous versions.
|
||||
|
||||
* Uninstallation of plugins that are distributed with manifest files.
|
||||
|
||||
* Restoration of plugin assets to their original install locations if assets
|
||||
are tagged with the `exportpath` label.
|
||||
|
||||
Since the Version Handler needs to modify Unity asset metadata (`.meta` files),
|
||||
to enable/disable components, rename and delete asset files it does not work
|
||||
with Package Manager installed packages. It's still possible to include EDM4U in
|
||||
Package Manager packages, the Version Handler component simply won't do anything
|
||||
to PM plugins in this case.
|
||||
|
||||
#### Using Version Handler Managed Plugins
|
||||
|
||||
If a plugin is imported at multiple different versions into a project, if the
|
||||
Version Handler is enabled, it will automatically check all managed assets to
|
||||
determine the set of assets that are out of date and assets that should be
|
||||
removed. To disable automatic checking managed assets disable the `Enable
|
||||
version management` option in the `Assets > External Dependency Manager >
|
||||
Version Handler > Settings` menu.
|
||||
|
||||
If version management is disabled, it's possible to check managed assets
|
||||
manually using the `Assets > External Dependency Manager > Version Handler >
|
||||
Update` menu option.
|
||||
|
||||
##### Listing Managed Plugins
|
||||
|
||||
Plugins managed by the Version Handler, those that ship with manifest files, can
|
||||
displayed using the `Assets > External Dependency Manager > Version Handler >
|
||||
Display Managed Packages` menu option. The list of plugins are written to the
|
||||
console window along with the set of files used by each plugin.
|
||||
|
||||
##### Uninstalling Managed Plugins
|
||||
|
||||
Plugins managed by the Version Handler, those that ship with manifest files, can
|
||||
be removed using the `Assets > External Dependency Manager > Version Handler >
|
||||
Uninstall Managed Packages` menu option. This operation will display a window
|
||||
that allows a developer to select a set of plugins to remove which will remove
|
||||
all files owned by each plugin excluding those that are in use by other
|
||||
installed plugins.
|
||||
|
||||
Files managed by the Version Handler, those labeled with the `gvh` asset label,
|
||||
can be checked to see whether anything needs to be upgraded, disabled or removed
|
||||
using the `Assets > External Dependency Manager > Version Handler > Update` menu
|
||||
option.
|
||||
|
||||
##### Restore Install Paths
|
||||
|
||||
Some developers move assets around in their project which can make it harder for
|
||||
plugin maintainers to debug issues if this breaks Unity's
|
||||
[special folders](https://docs.unity3d.com/Manual/SpecialFolders.html) rules. If
|
||||
assets are labeled with their original install/export path (see
|
||||
`gvhp_exportpath` below), Version Handler can restore assets to their original
|
||||
locations when using the `Assets > External Dependency Manager > Version
|
||||
Handler > Move Files To Install Locations` menu option.
|
||||
|
||||
##### Settings
|
||||
|
||||
Some behavior of the Version Handler can be configured via the `Assets >
|
||||
External Dependency Manager > Version Handler > Settings` menu option.
|
||||
|
||||
* `Enable version management` controls whether the plugin should automatically
|
||||
check asset versions and apply changes. If this is disabled the process
|
||||
should be run manually when installing or upgrading managed plugins using
|
||||
`Assets > External Dependency Manager > Version Handler > Update`.
|
||||
|
||||
* `Rename to canonical filenames` is a legacy option that will rename files to
|
||||
remove version numbers and other labels from filenames.
|
||||
|
||||
* `Prompt for obsolete file deletion` enables the display of a window when
|
||||
obsolete files are deleted allowing the developer to select which files to
|
||||
delete and those to keep.
|
||||
|
||||
* `Allow disabling files via renaming` controls whether obsolete or disabled
|
||||
files should be disabled by renaming them to `myfilename_DISABLED`. Renaming
|
||||
to disable files is required in some scenarios where Unity doesn't support
|
||||
removing files from the build via the PluginImporter.
|
||||
|
||||
* `Enable Analytics Reporting` enables/disables usage reporting to plugin
|
||||
developers to improve the product.
|
||||
|
||||
* `Verbose logging` enables *very* noisy log output that is useful for
|
||||
debugging while filing a bug report or building a new managed plugin.
|
||||
|
||||
* `Use project settings` saves settings for the plugin in the project rather
|
||||
than system-wide.
|
||||
|
||||
#### Redistributing a Managed Plugin
|
||||
|
||||
The Version Handler employs a couple of methods for managing version selection,
|
||||
upgrade and removal of plugins.
|
||||
|
||||
* Each plugin can ship with a manifest file that lists the files it includes.
|
||||
This makes it possible for Version Handler to calculate the difference in
|
||||
assets between the most recent release of a plugin and the previous release
|
||||
installed in a project. If a files are removed the Version Handler will
|
||||
prompt the user to clean up obsolete files.
|
||||
|
||||
* Plugins can ship using assets with unique names, unique GUIDs and version
|
||||
number labels. Version numbers can be attached to assets using labels or
|
||||
added to the filename (e.g `myfile.txt` would be `myfile_version-x.y.z.txt).
|
||||
This allows the Version Handler to determine which set of files are the same
|
||||
file at different versions, select the most recent version and prompt the
|
||||
developer to clean up old versions.
|
||||
|
||||
Unity plugins can be managed by the Version Handler using the following steps:
|
||||
|
||||
1. Add the `gvh` asset label to each asset (file) you want Version Handler to
|
||||
manage.
|
||||
|
||||
1. Add the `gvh_version-VERSION` label to each asset where `VERSION` is the
|
||||
version of the plugin you're releasing (e.g 1.2.3).
|
||||
|
||||
1. Add the `gvhp_exportpath-PATH` label to each asset where `PATH` is the
|
||||
export path of the file when the `.unitypackage` is created. This is used to
|
||||
track files if they're moved around in a project by developers.
|
||||
|
||||
1. Optional: Add `gvh_targets-editor` label to each editor DLL in your plugin
|
||||
and disable `editor` as a target platform for the DLL. The Version Handler
|
||||
will enable the most recent version of this DLL when the plugin is imported.
|
||||
|
||||
1. Optional: If your plugin is included in other Unity plugins, you should add
|
||||
the version number to each filename and change the GUID of each asset. This
|
||||
allows multiple versions of your plugin to be imported into a Unity project,
|
||||
with the Version Handler component activating only the most recent version.
|
||||
|
||||
1. Create a manifest text file named `MY_UNIQUE_PLUGIN_NAME_VERSION.txt` that
|
||||
lists all the files in your plugin relative to the project root. Then add
|
||||
the `gvh_manifest` label to the asset to indicate this file is a plugin
|
||||
manifest.
|
||||
|
||||
1. Optional: Add a `gvhp_manifestname-NAME` label to your manifest file to
|
||||
provide a human readable name for your package. If this isn't provided the
|
||||
name of the manifest file will be used as the package name. NAME can match
|
||||
the pattern `[0-9]+[a-zA-Z -]` where a leading integer will set the priority
|
||||
of the name where `0` is the highest priority and preferably used as the
|
||||
display name. The lowest value (i.e highest priority name) will be used as
|
||||
the display name and all other specified names will be aliases of the
|
||||
display name. Aliases can refer to previous names of the package allowing
|
||||
renaming across published versions.
|
||||
|
||||
1. Redistribute EDM4U Unity plugin with your plugin. See the
|
||||
[Plugin Redistribution](#plugin-redistribution) section for details.
|
||||
|
||||
If you follow these steps:
|
||||
|
||||
* When users import a newer version of your plugin, files referenced by the
|
||||
older version's manifest are cleaned up.
|
||||
|
||||
* The latest version of the plugin will be selected when users import multiple
|
||||
packages that include your plugin, assuming the steps in
|
||||
[Plugin Redistribution](#plugin-redistribution) are followed.
|
||||
|
||||
## Background
|
||||
|
||||
Many Unity plugins have dependencies upon Android specific libraries, iOS
|
||||
CocoaPods, and sometimes have transitive dependencies upon other Unity plugins.
|
||||
This causes the following problems:
|
||||
|
||||
* Integrating platform specific (e.g Android and iOS) libraries within a Unity
|
||||
project can be complex and a burden on a Unity plugin maintainer.
|
||||
* The process of resolving conflicting dependencies on platform specific
|
||||
libraries is pushed to the developer attempting to use a Unity plugin. The
|
||||
developer trying to use your plugin is very likely to give up when faced
|
||||
with Android or iOS specific build errors.
|
||||
* The process of resolving conflicting Unity plugins (due to shared Unity
|
||||
plugin components) is pushed to the developer attempting to use your Unity
|
||||
plugin. In an effort to resolve conflicts, the developer will very likely
|
||||
attempt to resolve problems by deleting random files in your plugin, report
|
||||
bugs when that doesn't work and finally give up.
|
||||
|
||||
EDM4U provides solutions for each of these problems.
|
||||
|
||||
### Android Dependency Management
|
||||
|
||||
The *Android Resolver* component of this plugin will download and integrate
|
||||
Android library dependencies and handle any conflicts between plugins that share
|
||||
the same dependencies.
|
||||
|
||||
Without the Android Resolver, typically Unity plugins bundle their AAR and JAR
|
||||
dependencies, e.g. a Unity plugin `SomePlugin` that requires the Google Play
|
||||
Games Android library would redistribute the library and its transitive
|
||||
dependencies in the folder `SomePlugin/Android/`. When a user imports
|
||||
`SomeOtherPlugin` that includes the same libraries (potentially at different
|
||||
versions) in `SomeOtherPlugin/Android/`, the developer using `SomePlugin` and
|
||||
`SomeOtherPlugin` will see an error when building for Android that can be hard
|
||||
to interpret.
|
||||
|
||||
Using the Android Resolver to manage Android library dependencies:
|
||||
|
||||
* Solves Android library conflicts between plugins.
|
||||
* Handles all of the various processing steps required to use Android
|
||||
libraries (AARs, JARs) in Unity 4.x and above projects. Almost all versions
|
||||
of Unity have - at best - partial support for AARs.
|
||||
* (Experimental) Supports minification of included Java components without
|
||||
exporting a project.
|
||||
|
||||
### iOS Dependency Management
|
||||
|
||||
The *iOS Resolver* component of this plugin integrates with
|
||||
[CocoaPods](https://cocoapods.org/) to download and integrate iOS libraries and
|
||||
frameworks into the Xcode project Unity generates when building for iOS. Using
|
||||
CocoaPods allows multiple plugins to utilize shared components without forcing
|
||||
developers to fix either duplicate or incompatible versions of libraries
|
||||
included through multiple Unity plugins in their project.
|
||||
|
||||
### Package Manager Registry Setup
|
||||
|
||||
The [Package Manager](https://docs.unity3d.com/Manual/Packages.html) (PM) makes
|
||||
use of [NPM](https://www.npmjs.com/) registry servers for package hosting and
|
||||
provides ways to discover, install, upgrade and uninstall packages. This makes
|
||||
it easier for developers to manage plugins within their projects.
|
||||
|
||||
However, installing additional package registries requires a few manual steps
|
||||
that can potentially be error prone. The *Package Manager Resolver* component of
|
||||
this plugin integrates with [PM](https://docs.unity3d.com/Manual/Packages.html)
|
||||
to provide a way to auto-install PM package registries when a `.unitypackage` is
|
||||
installed which allows plugin maintainers to ship a `.unitypackage` that can
|
||||
provide access to their own PM registry server to make it easier for developers
|
||||
to manage their plugins.
|
||||
|
||||
### Unity Plugin Version Management
|
||||
|
||||
Finally, the *Version Handler* component of this plugin simplifies the process
|
||||
of managing transitive dependencies of Unity plugins and each plugin's upgrade
|
||||
process.
|
||||
|
||||
For example, without the Version Handler plugin, if:
|
||||
|
||||
* Unity plugin `SomePlugin` includes `EDM4U` plugin at version 1.1.
|
||||
* Unity plugin `SomeOtherPlugin` includes `EDM4U` plugin at version 1.2.
|
||||
|
||||
The version of `EDM4U` included in the developer's project depends upon the
|
||||
order the developer imports `SomePlugin` or `SomeOtherPlugin`.
|
||||
|
||||
This results in:
|
||||
|
||||
* `EDM4U` at version 1.2, if `SomePlugin` is imported then `SomeOtherPlugin`
|
||||
is imported.
|
||||
* `EDM4U` at version 1.1, if `SomeOtherPlugin` is imported then `SomePlugin`
|
||||
is imported.
|
||||
|
||||
The Version Handler solves the problem of managing transitive dependencies by:
|
||||
|
||||
* Specifying a set of packaging requirements that enable a plugin at different
|
||||
versions to be imported into a Unity project.
|
||||
* Providing activation logic that selects the latest version of a plugin
|
||||
within a project.
|
||||
|
||||
When using the Version Handler to manage `EDM4U` included in `SomePlugin` and
|
||||
`SomeOtherPlugin`, from the prior example, version 1.2 will always be the
|
||||
version activated in a developer's Unity project.
|
||||
|
||||
Plugin creators are encouraged to adopt this library to ease integration for
|
||||
their customers. For more information about integrating EDM4U into your own
|
||||
plugin, see the [Plugin Redistribution](#plugin-redistribution) section of this
|
||||
document.
|
||||
|
||||
## Analytics
|
||||
|
||||
The External Dependency Manager for Unity plugin by default logs usage to Google
|
||||
Analytics. The purpose of the logging is to quantitatively measure the usage of
|
||||
functionality, to gather reports on integration failures and to inform future
|
||||
improvements to the developer experience of the External Dependency Manager
|
||||
plugin. Note that the analytics collected are limited to the scope of the EDM4U
|
||||
plugin’s usage.
|
||||
|
||||
For details of what is logged, please refer to the usage of
|
||||
`EditorMeasurement.Report()` in the source code.
|
||||
|
||||
## Plugin Redistribution
|
||||
|
||||
If you are a package maintainer and your package depends on EDM4U, it is highly
|
||||
recommended to use the UPM format and add EDM4U as a dependency. If you must
|
||||
include it in your `.unitypackage`, redistributing `EDM4U` inside your own
|
||||
plugin might ease the integration process for your users.
|
||||
|
||||
If you wish to redistribute `EDM4U` inside your plugin, you **must** follow
|
||||
these steps when importing the `external-dependency-manager-*.unitypackage`, and
|
||||
when exporting your own plugin package:
|
||||
|
||||
1. Import the `external-dependency-manager-*.unitypackage` into your plugin
|
||||
project by
|
||||
[running Unity from the command line](https://docs.unity3d.com/Manual/CommandLineArguments.html),
|
||||
ensuring that you add the `-gvh_disable` option.
|
||||
1. Export your plugin by
|
||||
[running Unity from the command line](https://docs.unity3d.com/Manual/CommandLineArguments.html),
|
||||
ensuring that you:
|
||||
- Include the contents of the `Assets/PlayServicesResolver` and
|
||||
`Assets/ExternalDependencyManager` directory.
|
||||
- Add the `-gvh_disable` option.
|
||||
|
||||
You **must** specify the `-gvh_disable` option in order for the Version Handler
|
||||
to work correctly!
|
||||
|
||||
For example, the following command will import the
|
||||
`external-dependency-manager-1.2.46.0.unitypackage` into the project
|
||||
`MyPluginProject` and export the entire Assets folder to
|
||||
`MyPlugin.unitypackage`:
|
||||
|
||||
```shell
|
||||
Unity -gvh_disable \
|
||||
-batchmode \
|
||||
-importPackage external-dependency-manager-1.2.46.0.unitypackage \
|
||||
-projectPath MyPluginProject \
|
||||
-exportPackage Assets MyPlugin.unitypackage \
|
||||
-quit
|
||||
```
|
||||
|
||||
### Background
|
||||
|
||||
The *Version Handler* component relies upon deferring the load of editor DLLs so
|
||||
that it can run first and determine the latest version of a plugin component to
|
||||
activate. The build of `EDM4U` plugin has Unity asset metadata that is
|
||||
configured so that the editor components are not initially enabled when it's
|
||||
imported into a Unity project. To maintain this configuration when importing the
|
||||
`external-dependency-manager.unitypackage` into a Unity plugin project, you
|
||||
*must* specify the command line option `-gvh_disable` which will prevent the
|
||||
Version Handler component from running and changing the Unity asset metadata.
|
||||
|
||||
## Building from Source
|
||||
|
||||
To build this plugin from source you need the following tools installed: * Unity
|
||||
2021 and below (with iOS and Android modules installed) * Java 11
|
||||
|
||||
You can build the plugin by running the following from your shell (Linux / OSX):
|
||||
|
||||
```shell
|
||||
./gradlew build
|
||||
|
||||
```
|
||||
|
||||
or Windows:
|
||||
|
||||
```shell
|
||||
./gradlew.bat build
|
||||
```
|
||||
|
||||
If Java 11 is not your default Java command, add
|
||||
`-Dorg.gradle.java.home=<PATH_TO_JAVA_HOME>` to the command above.
|
||||
|
||||
## Testing
|
||||
|
||||
You can run the tests by running the following from your shell (Linux / OSX):
|
||||
|
||||
```shell
|
||||
./gradlew test
|
||||
```
|
||||
|
||||
or Windows:
|
||||
|
||||
```shell
|
||||
./gradlew.bat test
|
||||
```
|
||||
|
||||
The following properties can be set to narrow down the tests to run or change
|
||||
the test run behavior.
|
||||
|
||||
* `INTERACTIVE_MODE_TESTS_ENABLED` - Default to `1`. Set to `1` to enable
|
||||
interactive mode tests, which requires GPU on the machine. Otherwise, only
|
||||
run tests in the batch mode.
|
||||
* `INCLUDE_TEST_TYPES` - Default to empty string, which means to include every
|
||||
type of the test. To narrow down the types of test to run, set this
|
||||
properties with a list of case-insensitive type strings separated by comma.
|
||||
For instance, `-PINCLUDE_TEST_TYPES="Python,NUnit"` means to include only
|
||||
Python tests and NUnit tests. See `TestTypeEnum` in `build.gradle` for
|
||||
available options.
|
||||
* `EXCLUDE_TEST_TYPES` - Default to empty string, which means to exclude none.
|
||||
To add types of tests to exclude, set this properties with a list of
|
||||
case-insensitive type strings separated by comma. For instance,
|
||||
`-PEXCLUDE_TEST_TYPES="Python,NUnit"` means to exclude Python tests and
|
||||
NUnit tests. See `TestTypeEnum` in `build.gradle` for available options.
|
||||
* `INCLUDE_TEST_MODULES` - Default to empty string, which means to include the
|
||||
tests for every modules. To narrow down modules to test, set this properties
|
||||
with a list of case-insensitive module strings separated by comma. For
|
||||
instance, `-PINCLUDE_TEST_MODULES="Tool,AndroidResolver"` means to run tests
|
||||
for tools and Android Resolver only. See `TestModuleEnum` in `build.gradle`
|
||||
for available options.
|
||||
* `EXCLUDE_TEST_MODULES` - Default to empty string, which means to exclude
|
||||
none. To add modules to exclude, set this properties with a list of
|
||||
case-insensitive module strings separated by comma. For instance,
|
||||
`-PEXCLUDE_TEST_MODULES="Tool,AndroidResolver"` means to run tests for any
|
||||
modules other than tools and Android Resolver. See `TestModuleEnum` in
|
||||
`build.gradle` for available options.
|
||||
* `EXCLUDE_TESTS` - Default to empty string, which means to exclude none. To
|
||||
add tests to exclude, set this properties with a list of case-insensitive
|
||||
test names separated by comma. For instance,
|
||||
`-PEXCLUDE_TESTS="testGenGuids,testDownloadArtifacts"` means to run tests
|
||||
except the tests with name of `testGenGuids` and `testDownloadArtifacts`.
|
||||
* `CONTINUE_ON_FAIL_FOR_TESTS_ENABLED` - Default to `1`. Set to `1` to
|
||||
continue running the next test when the current one fails. Otherwise, the
|
||||
build script stops whenever any test fails.
|
||||
|
||||
For instance, by running the following command, it only runs the Unity
|
||||
integration tests that does not requires GPU, but exclude tests for Android
|
||||
Resolver module and iOS Resolver module.
|
||||
|
||||
```shell
|
||||
./gradlew test \
|
||||
-PINTERACTIVE_MODE_TESTS_ENABLED=0 \
|
||||
-PINCLUDE_TEST_TYPES="Integration" \
|
||||
-PEXCLUDE_TEST_MODULES="AndroidResolver,iOSResolver"
|
||||
```
|
||||
|
||||
## Releasing
|
||||
|
||||
Each time a new build of this plugin is checked into the source tree you need to
|
||||
do the following:
|
||||
|
||||
* Bump the plugin version variable `pluginVersion` in `build.gradle`
|
||||
* Update `CHANGELOG.md` with the new version number and changes included in
|
||||
the release.
|
||||
* Build the release using `./gradlew release` which performs the following:
|
||||
* Updates `external-dependency-manager-*.unitypackage`
|
||||
* Copies the unpacked plugin to the `exploded` directory.
|
||||
* Updates template metadata files in the `plugin` directory. The GUIDs of
|
||||
all asset metadata is modified due to the version number change. Each
|
||||
file within the plugin is versioned to allow multiple versions of the
|
||||
plugin to be imported into a Unity project which allows the most recent
|
||||
version to be activated by the Version Handler component.
|
||||
* Create release commit using `./gradlew gitCreateReleaseCommit` which
|
||||
performs `git commit -a -m "description from CHANGELOG.md"`
|
||||
* Once the release commit is merge, tag the release using `./gradlew
|
||||
gitTagRelease` which performs the following:
|
||||
* `git tag -a pluginVersion -m "version RELEASE"` to tag the release.
|
||||
* Update tags on remote branch using `git push --tag REMOTE HEAD:master`
|
||||
12
Assets/ExternalDependencyManager/Editor/README.md.meta
Normal file
12
Assets/ExternalDependencyManager/Editor/README.md.meta
Normal file
@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 77919e84cef8419ab4b725fc16e83d52
|
||||
labels:
|
||||
- gvh
|
||||
- gvh_version-1.2.186
|
||||
- gvhp_exportpath-ExternalDependencyManager/Editor/README.md
|
||||
timeCreated: 1584567712
|
||||
licenseType: Store
|
||||
TextScriptImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,13 @@
|
||||
Assets/ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.dll
|
||||
Assets/ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.pdb
|
||||
Assets/ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.dll
|
||||
Assets/ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.pdb
|
||||
Assets/ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.dll
|
||||
Assets/ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.pdb
|
||||
Assets/ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.dll
|
||||
Assets/ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.pdb
|
||||
Assets/ExternalDependencyManager/Editor/CHANGELOG.md
|
||||
Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll
|
||||
Assets/ExternalDependencyManager/Editor/Google.VersionHandler.pdb
|
||||
Assets/ExternalDependencyManager/Editor/LICENSE
|
||||
Assets/ExternalDependencyManager/Editor/README.md
|
||||
@ -0,0 +1,15 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c9a3138961c74d99b7046b783112fceb
|
||||
labels:
|
||||
- gvh
|
||||
- gvh_manifest
|
||||
- gvh_version-1.2.186
|
||||
- gvhp_exportpath-ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.186_manifest.txt
|
||||
- gvhp_manifestname-0External Dependency Manager
|
||||
- gvhp_manifestname-play-services-resolver
|
||||
timeCreated: 1474401009
|
||||
licenseType: Store
|
||||
TextScriptImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/WordConnectGameToolkit/Editor.meta
Normal file
8
Assets/WordConnectGameToolkit/Editor.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 333c08c9aed6c4f9cb7b1d08c7b23dd2
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,106 @@
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using System.IO;
|
||||
|
||||
namespace WordsToolkit.Editor
|
||||
{
|
||||
[InitializeOnLoad]
|
||||
public static class SentisToInferenceEngineMigrator
|
||||
{
|
||||
private const string MIGRATION_KEY = "SentisToInferenceEngineMigrated";
|
||||
|
||||
static SentisToInferenceEngineMigrator()
|
||||
{
|
||||
if (!SessionState.GetBool(MIGRATION_KEY, false))
|
||||
{
|
||||
EditorApplication.delayCall += PerformMigration;
|
||||
}
|
||||
}
|
||||
|
||||
private static void PerformMigration()
|
||||
{
|
||||
bool migrationPerformed = false;
|
||||
|
||||
// Force remove any Sentis references from PackageCache
|
||||
string packageCachePath = Path.Combine(Application.dataPath, "..", "Library", "PackageCache");
|
||||
if (Directory.Exists(packageCachePath))
|
||||
{
|
||||
var sentisDirectories = Directory.GetDirectories(packageCachePath, "com.unity.sentis*");
|
||||
foreach (var dir in sentisDirectories)
|
||||
{
|
||||
try
|
||||
{
|
||||
Directory.Delete(dir, true);
|
||||
Debug.Log($"Removed Sentis package cache: {dir}");
|
||||
migrationPerformed = true;
|
||||
}
|
||||
catch (System.Exception e)
|
||||
{
|
||||
Debug.LogWarning($"Could not remove Sentis cache directory {dir}: {e.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Clean up any remaining Sentis meta files
|
||||
CleanupMetaFiles();
|
||||
|
||||
if (migrationPerformed)
|
||||
{
|
||||
Debug.Log("Sentis to Inference Engine migration completed automatically. Restarting Unity...");
|
||||
AssetDatabase.Refresh();
|
||||
|
||||
// Restart Unity to ensure clean state
|
||||
EditorApplication.delayCall += () => {
|
||||
EditorApplication.OpenProject(System.IO.Path.GetDirectoryName(Application.dataPath));
|
||||
};
|
||||
}
|
||||
|
||||
SessionState.SetBool(MIGRATION_KEY, true);
|
||||
}
|
||||
|
||||
private static void ForceMigrationAndRestart()
|
||||
{
|
||||
SessionState.SetBool(MIGRATION_KEY, false);
|
||||
PerformMigration();
|
||||
}
|
||||
|
||||
private static void RestartUnity()
|
||||
{
|
||||
Debug.Log("Restarting Unity...");
|
||||
EditorApplication.OpenProject(System.IO.Path.GetDirectoryName(Application.dataPath));
|
||||
}
|
||||
|
||||
private static void CleanupMetaFiles()
|
||||
{
|
||||
string[] searchPaths = {
|
||||
Path.Combine(Application.dataPath, "Scripts"),
|
||||
Path.Combine(Application.dataPath, "WordConnectGameToolkit")
|
||||
};
|
||||
|
||||
foreach (string searchPath in searchPaths)
|
||||
{
|
||||
if (Directory.Exists(searchPath))
|
||||
{
|
||||
var metaFiles = Directory.GetFiles(searchPath, "*.meta", SearchOption.AllDirectories);
|
||||
foreach (var metaFile in metaFiles)
|
||||
{
|
||||
string content = File.ReadAllText(metaFile);
|
||||
if (content.Contains("com.unity.sentis"))
|
||||
{
|
||||
try
|
||||
{
|
||||
content = content.Replace("com.unity.sentis", "com.unity.ai.inference");
|
||||
File.WriteAllText(metaFile, content);
|
||||
Debug.Log($"Updated meta file: {metaFile}");
|
||||
}
|
||||
catch (System.Exception e)
|
||||
{
|
||||
Debug.LogWarning($"Could not update meta file {metaFile}: {e.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b732c2cfd0cf0433a85b0cd7e48d100c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/WordConnectGameToolkit/Font/BalooBhai-Regular.ttf
Normal file
BIN
Assets/WordConnectGameToolkit/Font/BalooBhai-Regular.ttf
Normal file
Binary file not shown.
@ -0,0 +1,21 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 06fea1744dabf414c8bdadfe687197d6
|
||||
TrueTypeFontImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 4
|
||||
fontSize: 16
|
||||
forceTextureCase: -2
|
||||
characterSpacing: 0
|
||||
characterPadding: 1
|
||||
includeFontData: 1
|
||||
fontNames:
|
||||
- Baloo Bhai
|
||||
fallbackFontReferences: []
|
||||
customCharacters:
|
||||
fontRenderingMode: 0
|
||||
ascentCalculationMode: 1
|
||||
useLegacyBoundsCalculation: 0
|
||||
shouldRoundAdvanceValue: 1
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -6882,6 +6882,7 @@ MonoBehaviour:
|
||||
m_GlyphPairAdjustmentRecords: []
|
||||
fallbackFontAssets: []
|
||||
m_FallbackFontAssetTable:
|
||||
- {fileID: 11400000, guid: cdb8507d60e4b4e5fadb9b1825d39fb0, type: 2}
|
||||
- {fileID: 11400000, guid: 0dfe64dccfb1419084fb31e94bf08869, type: 2}
|
||||
- {fileID: 11400000, guid: f18c6f2f696cf48b2a4e92b7f29b7fc3, type: 2}
|
||||
m_CreationSettings:
|
||||
|
||||
File diff suppressed because one or more lines are too long
2363
Assets/WordConnectGameToolkit/Font/turkish_font.asset
Normal file
2363
Assets/WordConnectGameToolkit/Font/turkish_font.asset
Normal file
File diff suppressed because one or more lines are too long
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cdb8507d60e4b4e5fadb9b1825d39fb0
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -88,6 +88,7 @@ GameObject:
|
||||
- component: {fileID: 4245167539472542765}
|
||||
- component: {fileID: 4013824183019657187}
|
||||
- component: {fileID: 8023491363183538939}
|
||||
- component: {fileID: 1068866132162880213}
|
||||
m_Layer: 0
|
||||
m_Name: Coins
|
||||
m_TagString: Coins
|
||||
@ -202,6 +203,7 @@ MonoBehaviour:
|
||||
onClick:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
noSound: 0
|
||||
--- !u!114 &8023491363183538939
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -219,6 +221,21 @@ MonoBehaviour:
|
||||
associatedResource: {fileID: 11400000, guid: 05af233fe9cfa409abb37d57d2cceaea, type: 2}
|
||||
fxPrefab: {fileID: 7046139580850344571, guid: 3372b6fd62f2b4e058c6757fe9d4afd3, type: 3}
|
||||
coinsTextPrefab: {fileID: 6331716406342226620, guid: 4dedea56b3321416b95d34dc8b7efba5, type: 3}
|
||||
OnAnimationComplete:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!114 &1068866132162880213
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1287760599166922580}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: c9c6b14262f434e07ad593f7b28fbfba, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!1 &4301976480888807572
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
||||
@ -222,6 +222,7 @@ GameObject:
|
||||
- component: {fileID: 4094651174836377014}
|
||||
- component: {fileID: 5140382344608309896}
|
||||
- component: {fileID: 3974817099587506368}
|
||||
- component: {fileID: 7945160288457162381}
|
||||
m_Layer: 0
|
||||
m_Name: Gems
|
||||
m_TagString: Gems
|
||||
@ -336,6 +337,7 @@ MonoBehaviour:
|
||||
onClick:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
noSound: 0
|
||||
--- !u!114 &3974817099587506368
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -356,6 +358,18 @@ MonoBehaviour:
|
||||
OnAnimationComplete:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!114 &7945160288457162381
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8282061143723735201}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: c9c6b14262f434e07ad593f7b28fbfba, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!1 &8288800362416271104
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
||||
@ -0,0 +1,14 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 229059528153459db318609c350eea5f, type: 3}
|
||||
m_Name: IronsourceBannerHandler
|
||||
m_EditorClassIdentifier:
|
||||
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 796df1b72912f46b09a0545be43c896e
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -15,3 +15,6 @@ MonoBehaviour:
|
||||
bannedWordsByLanguage:
|
||||
- languageCode: en
|
||||
bannedWords: []
|
||||
- languageCode: tr
|
||||
bannedWords:
|
||||
- "\xFCre"
|
||||
|
||||
@ -36,5 +36,10 @@ MonoBehaviour:
|
||||
- language: fr
|
||||
title:
|
||||
text:
|
||||
- language: tr
|
||||
title: "\u015Eelaleler"
|
||||
text: "D\xFCnyan\u0131n en y\xFCksek \u015Felalesi Venezuela'daki Angel \u015Eelalesi
|
||||
Dir. Su 979 metre y\xFCkseklikten d\xFC\u015Fer ve ak\u0131nt\u0131n\u0131n
|
||||
bir k\u0131sm\u0131 yere ula\u015Fmadan buharla\u015F\u0131r!"
|
||||
colorsTile: {fileID: 11400000, guid: 63f1377c90d84ec478676a869dc2a2c1, type: 2}
|
||||
targetExtraWords: 8
|
||||
|
||||
@ -77,9 +77,10 @@ MonoBehaviour:
|
||||
rows: 7
|
||||
placements: []
|
||||
specialItems: []
|
||||
minBounds: {x: 0, y: 0}
|
||||
maxBounds: {x: 9, y: 6}
|
||||
serializedGrid:
|
||||
minBounds: {x: 5, y: 3}
|
||||
maxBounds: {x: 5, y: 3}
|
||||
serializedGrid: ' | | | | |
|
||||
| '
|
||||
- language: fr
|
||||
letters:
|
||||
wordsAmount: 5
|
||||
|
||||
@ -84,9 +84,10 @@ MonoBehaviour:
|
||||
rows: 7
|
||||
placements: []
|
||||
specialItems: []
|
||||
minBounds: {x: 0, y: 0}
|
||||
maxBounds: {x: 9, y: 6}
|
||||
serializedGrid:
|
||||
minBounds: {x: 5, y: 3}
|
||||
maxBounds: {x: 5, y: 3}
|
||||
serializedGrid: ' | | | | |
|
||||
| '
|
||||
- language: fr
|
||||
letters:
|
||||
wordsAmount: 5
|
||||
|
||||
@ -98,9 +98,10 @@ MonoBehaviour:
|
||||
rows: 7
|
||||
placements: []
|
||||
specialItems: []
|
||||
minBounds: {x: 0, y: 0}
|
||||
maxBounds: {x: 9, y: 6}
|
||||
serializedGrid:
|
||||
minBounds: {x: 5, y: 3}
|
||||
maxBounds: {x: 5, y: 3}
|
||||
serializedGrid: ' | | | | |
|
||||
| '
|
||||
- language: fr
|
||||
letters:
|
||||
wordsAmount: 5
|
||||
|
||||
@ -120,6 +120,18 @@ MonoBehaviour:
|
||||
minBounds: {x: 0, y: 0}
|
||||
maxBounds: {x: 9, y: 6}
|
||||
serializedGrid:
|
||||
- language: tr
|
||||
letters:
|
||||
wordsAmount: 5
|
||||
words: []
|
||||
crosswordData:
|
||||
columns: 0
|
||||
rows: 0
|
||||
placements: []
|
||||
specialItems: []
|
||||
minBounds: {x: 0, y: 0}
|
||||
maxBounds: {x: 0, y: 0}
|
||||
serializedGrid:
|
||||
colorsTile: {fileID: 11400000, guid: 530ee400bda75ad44bcc4067e5f57ab8, type: 2}
|
||||
words: 5
|
||||
letters: 7
|
||||
|
||||
@ -70,9 +70,10 @@ MonoBehaviour:
|
||||
rows: 7
|
||||
placements: []
|
||||
specialItems: []
|
||||
minBounds: {x: 0, y: 0}
|
||||
maxBounds: {x: 9, y: 6}
|
||||
serializedGrid:
|
||||
minBounds: {x: 5, y: 3}
|
||||
maxBounds: {x: 5, y: 3}
|
||||
serializedGrid: ' | | | | |
|
||||
| '
|
||||
- language: fr
|
||||
letters:
|
||||
wordsAmount: 5
|
||||
|
||||
@ -94,37 +94,16 @@ MonoBehaviour:
|
||||
- language: es
|
||||
letters: citar
|
||||
wordsAmount: 4
|
||||
words:
|
||||
- citar
|
||||
- ira
|
||||
- cat
|
||||
words: []
|
||||
crosswordData:
|
||||
columns: 10
|
||||
rows: 7
|
||||
placements:
|
||||
- word: citar
|
||||
wordNumber: 1
|
||||
startPosition: {x: 3, y: 3}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: ira
|
||||
wordNumber: 2
|
||||
startPosition: {x: 4, y: 3}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: cat
|
||||
wordNumber: 3
|
||||
startPosition: {x: 3, y: 5}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
placements: []
|
||||
specialItems: []
|
||||
minBounds: {x: 3, y: 3}
|
||||
maxBounds: {x: 7, y: 5}
|
||||
serializedGrid: ' | | | citar | r |
|
||||
cat | '
|
||||
minBounds: {x: 5, y: 3}
|
||||
maxBounds: {x: 5, y: 3}
|
||||
serializedGrid: ' | | | | |
|
||||
| '
|
||||
- language: fr
|
||||
letters:
|
||||
wordsAmount: 5
|
||||
@ -137,9 +116,36 @@ MonoBehaviour:
|
||||
minBounds: {x: 0, y: 0}
|
||||
maxBounds: {x: 9, y: 6}
|
||||
serializedGrid:
|
||||
- language: tr
|
||||
letters: ask
|
||||
wordsAmount: 5
|
||||
words:
|
||||
- ask
|
||||
- sak
|
||||
crosswordData:
|
||||
columns: 10
|
||||
rows: 7
|
||||
placements:
|
||||
- word: ask
|
||||
wordNumber: 1
|
||||
startPosition: {x: 3, y: 1}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: sAK
|
||||
wordNumber: 2
|
||||
startPosition: {x: 4, y: 1}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
specialItems: []
|
||||
minBounds: {x: 3, y: 1}
|
||||
maxBounds: {x: 5, y: 3}
|
||||
serializedGrid: ' | ask | A | K | |
|
||||
| '
|
||||
colorsTile: {fileID: 11400000, guid: 63f1377c90d84ec478676a869dc2a2c1, type: 2}
|
||||
words: 5
|
||||
letters: 5
|
||||
letters: 3
|
||||
min: 3
|
||||
max: 6
|
||||
difficulty: 0
|
||||
|
||||
@ -100,51 +100,16 @@ MonoBehaviour:
|
||||
- language: es
|
||||
letters: cabra
|
||||
wordsAmount: 5
|
||||
words:
|
||||
- cabra
|
||||
- cara
|
||||
- bar
|
||||
- barca
|
||||
- arca
|
||||
words: []
|
||||
crosswordData:
|
||||
columns: 10
|
||||
rows: 7
|
||||
placements:
|
||||
- word: cabra
|
||||
wordNumber: 1
|
||||
startPosition: {x: 3, y: 0}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: cara
|
||||
wordNumber: 2
|
||||
startPosition: {x: 3, y: 0}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: bar
|
||||
wordNumber: 3
|
||||
startPosition: {x: 1, y: 2}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: barca
|
||||
wordNumber: 4
|
||||
startPosition: {x: 1, y: 2}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: arca
|
||||
wordNumber: 5
|
||||
startPosition: {x: 3, y: 3}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
placements: []
|
||||
specialItems: []
|
||||
minBounds: {x: 1, y: 0}
|
||||
maxBounds: {x: 7, y: 6}
|
||||
serializedGrid: ' cabra | a | bar | a arca | r | c
|
||||
| a '
|
||||
minBounds: {x: 5, y: 3}
|
||||
maxBounds: {x: 5, y: 3}
|
||||
serializedGrid: ' | | | | |
|
||||
| '
|
||||
- language: fr
|
||||
letters:
|
||||
wordsAmount: 5
|
||||
@ -157,9 +122,43 @@ MonoBehaviour:
|
||||
minBounds: {x: 0, y: 0}
|
||||
maxBounds: {x: 0, y: 0}
|
||||
serializedGrid:
|
||||
- language: tr
|
||||
letters: suz
|
||||
wordsAmount: 5
|
||||
words:
|
||||
- suz
|
||||
- us
|
||||
- uz
|
||||
crosswordData:
|
||||
columns: 10
|
||||
rows: 7
|
||||
placements:
|
||||
- word: suz
|
||||
wordNumber: 1
|
||||
startPosition: {x: 3, y: 2}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: uS
|
||||
wordNumber: 2
|
||||
startPosition: {x: 4, y: 2}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: Uz
|
||||
wordNumber: 3
|
||||
startPosition: {x: 5, y: 1}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
specialItems: []
|
||||
minBounds: {x: 3, y: 1}
|
||||
maxBounds: {x: 5, y: 3}
|
||||
serializedGrid: ' | U | suz | S | |
|
||||
| '
|
||||
colorsTile: {fileID: 11400000, guid: 63f1377c90d84ec478676a869dc2a2c1, type: 2}
|
||||
words: 5
|
||||
letters: 5
|
||||
letters: 3
|
||||
min: 3
|
||||
max: 6
|
||||
difficulty: 0
|
||||
|
||||
@ -101,50 +101,15 @@ MonoBehaviour:
|
||||
- language: es
|
||||
letters: saldo
|
||||
wordsAmount: 5
|
||||
words:
|
||||
- sol
|
||||
- sal
|
||||
- ola
|
||||
- oda
|
||||
- osa
|
||||
words: []
|
||||
crosswordData:
|
||||
columns: 10
|
||||
rows: 7
|
||||
placements:
|
||||
- word: sol
|
||||
wordNumber: 1
|
||||
startPosition: {x: 5, y: 1}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: sal
|
||||
wordNumber: 2
|
||||
startPosition: {x: 5, y: 1}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: ola
|
||||
wordNumber: 3
|
||||
startPosition: {x: 4, y: 3}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: oda
|
||||
wordNumber: 4
|
||||
startPosition: {x: 4, y: 3}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: osa
|
||||
wordNumber: 5
|
||||
startPosition: {x: 2, y: 5}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
placements: []
|
||||
specialItems: []
|
||||
minBounds: {x: 2, y: 1}
|
||||
maxBounds: {x: 7, y: 5}
|
||||
serializedGrid: ' | sol | a | ola | d | osa
|
||||
minBounds: {x: 5, y: 3}
|
||||
maxBounds: {x: 5, y: 3}
|
||||
serializedGrid: ' | | | | |
|
||||
| '
|
||||
- language: fr
|
||||
letters:
|
||||
@ -158,6 +123,40 @@ MonoBehaviour:
|
||||
minBounds: {x: 0, y: 0}
|
||||
maxBounds: {x: 0, y: 0}
|
||||
serializedGrid:
|
||||
- language: tr
|
||||
letters: "k\xFCre"
|
||||
wordsAmount: 5
|
||||
words:
|
||||
- "k\xFCre"
|
||||
- "k\xFCr"
|
||||
- ek
|
||||
crosswordData:
|
||||
columns: 10
|
||||
rows: 7
|
||||
placements:
|
||||
- word: ek
|
||||
wordNumber: 3
|
||||
startPosition: {x: 4, y: 2}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: "k\xFCre"
|
||||
wordNumber: 2
|
||||
startPosition: {x: 3, y: 4}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: "k\xFCr"
|
||||
wordNumber: 1
|
||||
startPosition: {x: 5, y: 2}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
specialItems: []
|
||||
minBounds: {x: 3, y: 2}
|
||||
maxBounds: {x: 6, y: 4}
|
||||
serializedGrid: " | | ek | \xFC | k\xFCre
|
||||
| | "
|
||||
colorsTile: {fileID: 11400000, guid: 63f1377c90d84ec478676a869dc2a2c1, type: 2}
|
||||
words: 5
|
||||
letters: 4
|
||||
|
||||
@ -114,51 +114,16 @@ MonoBehaviour:
|
||||
- language: es
|
||||
letters: radio
|
||||
wordsAmount: 5
|
||||
words:
|
||||
- ira
|
||||
- ida
|
||||
- aro
|
||||
- oda
|
||||
- dar
|
||||
words: []
|
||||
crosswordData:
|
||||
columns: 10
|
||||
rows: 7
|
||||
placements:
|
||||
- word: ira
|
||||
wordNumber: 1
|
||||
startPosition: {x: 4, y: 1}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: ida
|
||||
wordNumber: 2
|
||||
startPosition: {x: 4, y: 1}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: aro
|
||||
wordNumber: 3
|
||||
startPosition: {x: 4, y: 3}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: oda
|
||||
wordNumber: 4
|
||||
startPosition: {x: 6, y: 3}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: dar
|
||||
wordNumber: 5
|
||||
startPosition: {x: 6, y: 4}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
placements: []
|
||||
specialItems: []
|
||||
minBounds: {x: 4, y: 1}
|
||||
maxBounds: {x: 8, y: 5}
|
||||
serializedGrid: ' | ira | d | aro | dar |
|
||||
a | '
|
||||
minBounds: {x: 5, y: 3}
|
||||
maxBounds: {x: 5, y: 3}
|
||||
serializedGrid: ' | | | | |
|
||||
| '
|
||||
- language: fr
|
||||
letters:
|
||||
wordsAmount: 5
|
||||
@ -171,9 +136,43 @@ MonoBehaviour:
|
||||
minBounds: {x: 0, y: 0}
|
||||
maxBounds: {x: 0, y: 0}
|
||||
serializedGrid:
|
||||
- language: tr
|
||||
letters: geri
|
||||
wordsAmount: 5
|
||||
words:
|
||||
- geri
|
||||
- gir
|
||||
- eri
|
||||
crosswordData:
|
||||
columns: 10
|
||||
rows: 7
|
||||
placements:
|
||||
- word: geri
|
||||
wordNumber: 1
|
||||
startPosition: {x: 3, y: 3}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: gir
|
||||
wordNumber: 3
|
||||
startPosition: {x: 3, y: 5}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: eri
|
||||
wordNumber: 2
|
||||
startPosition: {x: 4, y: 3}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
specialItems: []
|
||||
minBounds: {x: 3, y: 3}
|
||||
maxBounds: {x: 6, y: 5}
|
||||
serializedGrid: ' | | | geri | r |
|
||||
gir | '
|
||||
colorsTile: {fileID: 11400000, guid: 63f1377c90d84ec478676a869dc2a2c1, type: 2}
|
||||
words: 5
|
||||
letters: 5
|
||||
letters: 4
|
||||
min: 3
|
||||
max: 6
|
||||
difficulty: 0
|
||||
|
||||
@ -109,44 +109,16 @@ MonoBehaviour:
|
||||
- language: es
|
||||
letters: motor
|
||||
wordsAmount: 5
|
||||
words:
|
||||
- specialitem
|
||||
- motor
|
||||
- moro
|
||||
- toro
|
||||
words: []
|
||||
crosswordData:
|
||||
columns: 10
|
||||
rows: 7
|
||||
placements:
|
||||
- word: Motor
|
||||
wordNumber: 1
|
||||
startPosition: {x: 3, y: 3}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: Moro
|
||||
wordNumber: 2
|
||||
startPosition: {x: 3, y: 3}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: toro
|
||||
wordNumber: 3
|
||||
startPosition: {x: 0, y: 4}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: SpecialItem
|
||||
wordNumber: -1
|
||||
startPosition: {x: 3, y: 3}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 1
|
||||
specialItemPath: Assets/WordConnectGameToolkit/Sprites/game_ui/in-game-item-1.png
|
||||
placements: []
|
||||
specialItems: []
|
||||
minBounds: {x: 0, y: 3}
|
||||
maxBounds: {x: 7, y: 6}
|
||||
serializedGrid: ' | | | Motor |toro |
|
||||
r | o '
|
||||
minBounds: {x: 5, y: 3}
|
||||
maxBounds: {x: 5, y: 3}
|
||||
serializedGrid: ' | | | | |
|
||||
| '
|
||||
- language: fr
|
||||
letters:
|
||||
wordsAmount: 5
|
||||
@ -159,9 +131,50 @@ MonoBehaviour:
|
||||
minBounds: {x: 0, y: 0}
|
||||
maxBounds: {x: 0, y: 0}
|
||||
serializedGrid:
|
||||
- language: tr
|
||||
letters: "ko\u015Fa"
|
||||
wordsAmount: 5
|
||||
words:
|
||||
- ok
|
||||
- "ko\u015Fa"
|
||||
- ak
|
||||
- "ka\u015F"
|
||||
crosswordData:
|
||||
columns: 10
|
||||
rows: 7
|
||||
placements:
|
||||
- word: Ok
|
||||
wordNumber: 1
|
||||
startPosition: {x: 4, y: 1}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: "ko\u015Fa"
|
||||
wordNumber: 2
|
||||
startPosition: {x: 3, y: 3}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: ak
|
||||
wordNumber: 3
|
||||
startPosition: {x: 3, y: 2}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: "ka\u015F"
|
||||
wordNumber: 4
|
||||
startPosition: {x: 5, y: 1}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
specialItems: []
|
||||
minBounds: {x: 3, y: 1}
|
||||
maxBounds: {x: 6, y: 3}
|
||||
serializedGrid: " | Ok | a a | ko\u015Fa |
|
||||
| | "
|
||||
colorsTile: {fileID: 11400000, guid: 63f1377c90d84ec478676a869dc2a2c1, type: 2}
|
||||
words: 5
|
||||
letters: 5
|
||||
letters: 4
|
||||
min: 3
|
||||
max: 6
|
||||
difficulty: 0
|
||||
|
||||
@ -115,51 +115,15 @@ MonoBehaviour:
|
||||
- language: es
|
||||
letters: salir
|
||||
wordsAmount: 5
|
||||
words:
|
||||
- sal
|
||||
- liar
|
||||
- ira
|
||||
- risa
|
||||
- asir
|
||||
words: []
|
||||
crosswordData:
|
||||
columns: 10
|
||||
rows: 7
|
||||
placements:
|
||||
- word: sal
|
||||
wordNumber: 1
|
||||
startPosition: {x: 1, y: 0}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: liar
|
||||
wordNumber: 2
|
||||
startPosition: {x: 3, y: 0}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: ira
|
||||
wordNumber: 3
|
||||
startPosition: {x: 3, y: 1}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: risa
|
||||
wordNumber: 4
|
||||
startPosition: {x: 3, y: 3}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: asir
|
||||
wordNumber: 5
|
||||
startPosition: {x: 6, y: 3}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
placements: []
|
||||
specialItems: []
|
||||
minBounds: {x: 1, y: 0}
|
||||
maxBounds: {x: 6, y: 6}
|
||||
serializedGrid: ' sal | ira | a | risa | s |
|
||||
i | r '
|
||||
minBounds: {x: 0, y: 0}
|
||||
maxBounds: {x: 9, y: 6}
|
||||
serializedGrid:
|
||||
- language: fr
|
||||
letters:
|
||||
wordsAmount: 5
|
||||
@ -172,9 +136,50 @@ MonoBehaviour:
|
||||
minBounds: {x: 0, y: 0}
|
||||
maxBounds: {x: 0, y: 0}
|
||||
serializedGrid:
|
||||
- language: tr
|
||||
letters: "\xE7al\u0131"
|
||||
wordsAmount: 5
|
||||
words:
|
||||
- al
|
||||
- "a\xE7"
|
||||
- "a\xE7\u0131"
|
||||
- "\xE7al\u0131"
|
||||
crosswordData:
|
||||
columns: 10
|
||||
rows: 7
|
||||
placements:
|
||||
- word: al
|
||||
wordNumber: 2
|
||||
startPosition: {x: 5, y: 2}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: "\xE7al\u0131"
|
||||
wordNumber: 3
|
||||
startPosition: {x: 2, y: 4}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: "a\xE7"
|
||||
wordNumber: 4
|
||||
startPosition: {x: 2, y: 3}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: "a\xE7\u0131"
|
||||
wordNumber: 1
|
||||
startPosition: {x: 5, y: 2}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
specialItems: []
|
||||
minBounds: {x: 2, y: 2}
|
||||
maxBounds: {x: 6, y: 4}
|
||||
serializedGrid: " | | al | a \xE7 | \xE7al\u0131
|
||||
| | "
|
||||
colorsTile: {fileID: 11400000, guid: e8a60425bb67f42618a943883b553d29, type: 2}
|
||||
words: 5
|
||||
letters: 5
|
||||
letters: 4
|
||||
min: 3
|
||||
max: 4
|
||||
difficulty: 0
|
||||
|
||||
@ -121,51 +121,16 @@ MonoBehaviour:
|
||||
- language: es
|
||||
letters: torpe
|
||||
wordsAmount: 5
|
||||
words:
|
||||
- porte
|
||||
- tope
|
||||
- torpe
|
||||
- reto
|
||||
- peor
|
||||
words: []
|
||||
crosswordData:
|
||||
columns: 10
|
||||
rows: 7
|
||||
placements:
|
||||
- word: porte
|
||||
wordNumber: 1
|
||||
startPosition: {x: 1, y: 0}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: tope
|
||||
wordNumber: 2
|
||||
startPosition: {x: 4, y: 0}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: torpe
|
||||
wordNumber: 3
|
||||
startPosition: {x: 6, y: 2}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: reto
|
||||
wordNumber: 4
|
||||
startPosition: {x: 3, y: 3}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: peor
|
||||
wordNumber: 5
|
||||
startPosition: {x: 6, y: 5}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
placements: []
|
||||
specialItems: []
|
||||
minBounds: {x: 1, y: 0}
|
||||
maxBounds: {x: 9, y: 6}
|
||||
serializedGrid: ' porte | o | p t | reto | r |
|
||||
peor| e '
|
||||
minBounds: {x: 5, y: 3}
|
||||
maxBounds: {x: 5, y: 3}
|
||||
serializedGrid: ' | | | | |
|
||||
| '
|
||||
- language: fr
|
||||
letters:
|
||||
wordsAmount: 5
|
||||
@ -178,6 +143,18 @@ MonoBehaviour:
|
||||
minBounds: {x: 0, y: 0}
|
||||
maxBounds: {x: 0, y: 0}
|
||||
serializedGrid:
|
||||
- language: tr
|
||||
letters:
|
||||
wordsAmount: 5
|
||||
words: []
|
||||
crosswordData:
|
||||
columns: 0
|
||||
rows: 0
|
||||
placements: []
|
||||
specialItems: []
|
||||
minBounds: {x: 0, y: 0}
|
||||
maxBounds: {x: 0, y: 0}
|
||||
serializedGrid:
|
||||
colorsTile: {fileID: 11400000, guid: e8a60425bb67f42618a943883b553d29, type: 2}
|
||||
words: 5
|
||||
letters: 5
|
||||
|
||||
@ -107,50 +107,15 @@ MonoBehaviour:
|
||||
- language: es
|
||||
letters: coste
|
||||
wordsAmount: 5
|
||||
words:
|
||||
- set
|
||||
- tos
|
||||
- seco
|
||||
- eco
|
||||
- seto
|
||||
words: []
|
||||
crosswordData:
|
||||
columns: 10
|
||||
rows: 7
|
||||
placements:
|
||||
- word: set
|
||||
wordNumber: 1
|
||||
startPosition: {x: 1, y: 1}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: tos
|
||||
wordNumber: 2
|
||||
startPosition: {x: 3, y: 1}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: seco
|
||||
wordNumber: 3
|
||||
startPosition: {x: 3, y: 3}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: eco
|
||||
wordNumber: 4
|
||||
startPosition: {x: 4, y: 3}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: seto
|
||||
wordNumber: 5
|
||||
startPosition: {x: 1, y: 5}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
placements: []
|
||||
specialItems: []
|
||||
minBounds: {x: 1, y: 1}
|
||||
maxBounds: {x: 6, y: 5}
|
||||
serializedGrid: ' | set | o | seco | c | seto
|
||||
minBounds: {x: 5, y: 3}
|
||||
maxBounds: {x: 5, y: 3}
|
||||
serializedGrid: ' | | | | |
|
||||
| '
|
||||
- language: fr
|
||||
letters:
|
||||
@ -164,9 +129,50 @@ MonoBehaviour:
|
||||
minBounds: {x: 0, y: 0}
|
||||
maxBounds: {x: 0, y: 0}
|
||||
serializedGrid:
|
||||
- language: tr
|
||||
letters: arka
|
||||
wordsAmount: 5
|
||||
words:
|
||||
- arka
|
||||
- ara
|
||||
- ark
|
||||
- kar
|
||||
crosswordData:
|
||||
columns: 10
|
||||
rows: 7
|
||||
placements:
|
||||
- word: arka
|
||||
wordNumber: 4
|
||||
startPosition: {x: 4, y: 1}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: kar
|
||||
wordNumber: 3
|
||||
startPosition: {x: 2, y: 2}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: ark
|
||||
wordNumber: 1
|
||||
startPosition: {x: 4, y: 3}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: ara
|
||||
wordNumber: 2
|
||||
startPosition: {x: 4, y: 1}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
specialItems: []
|
||||
minBounds: {x: 2, y: 1}
|
||||
maxBounds: {x: 7, y: 3}
|
||||
serializedGrid: ' | arka | kar | ark | |
|
||||
| '
|
||||
colorsTile: {fileID: 11400000, guid: e8a60425bb67f42618a943883b553d29, type: 2}
|
||||
words: 5
|
||||
letters: 5
|
||||
letters: 4
|
||||
min: 3
|
||||
max: 6
|
||||
difficulty: 0
|
||||
|
||||
@ -107,50 +107,15 @@ MonoBehaviour:
|
||||
- language: es
|
||||
letters: abuso
|
||||
wordsAmount: 5
|
||||
words:
|
||||
- bus
|
||||
- boa
|
||||
- uso
|
||||
- osa
|
||||
- abuso
|
||||
words: []
|
||||
crosswordData:
|
||||
columns: 10
|
||||
rows: 7
|
||||
placements:
|
||||
- word: bus
|
||||
wordNumber: 1
|
||||
startPosition: {x: 3, y: 1}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: boa
|
||||
wordNumber: 2
|
||||
startPosition: {x: 3, y: 1}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: uso
|
||||
wordNumber: 3
|
||||
startPosition: {x: 1, y: 2}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: osa
|
||||
wordNumber: 4
|
||||
startPosition: {x: 6, y: 2}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: abuso
|
||||
wordNumber: 5
|
||||
startPosition: {x: 3, y: 3}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
placements: []
|
||||
specialItems: []
|
||||
minBounds: {x: 1, y: 1}
|
||||
maxBounds: {x: 7, y: 4}
|
||||
serializedGrid: ' | bus | uso o | abuso | a |
|
||||
minBounds: {x: 5, y: 3}
|
||||
maxBounds: {x: 5, y: 3}
|
||||
serializedGrid: ' | | | | |
|
||||
| '
|
||||
- language: fr
|
||||
letters:
|
||||
@ -164,9 +129,51 @@ MonoBehaviour:
|
||||
minBounds: {x: 0, y: 0}
|
||||
maxBounds: {x: 0, y: 0}
|
||||
serializedGrid:
|
||||
- language: tr
|
||||
letters: faiz
|
||||
wordsAmount: 5
|
||||
words:
|
||||
- faiz
|
||||
- faz
|
||||
- iz
|
||||
- az
|
||||
- af
|
||||
crosswordData:
|
||||
columns: 10
|
||||
rows: 7
|
||||
placements:
|
||||
- word: af
|
||||
wordNumber: 1
|
||||
startPosition: {x: 4, y: 1}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: az
|
||||
wordNumber: 2
|
||||
startPosition: {x: 5, y: 2}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: faiz
|
||||
wordNumber: 3
|
||||
startPosition: {x: 2, y: 3}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: faz
|
||||
wordNumber: 4
|
||||
startPosition: {x: 5, y: 1}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
specialItems: []
|
||||
minBounds: {x: 2, y: 1}
|
||||
maxBounds: {x: 6, y: 3}
|
||||
serializedGrid: ' | af | az | faiz | |
|
||||
| '
|
||||
colorsTile: {fileID: 11400000, guid: e8a60425bb67f42618a943883b553d29, type: 2}
|
||||
words: 5
|
||||
letters: 5
|
||||
letters: 4
|
||||
min: 3
|
||||
max: 6
|
||||
difficulty: 0
|
||||
|
||||
@ -110,51 +110,16 @@ MonoBehaviour:
|
||||
- language: es
|
||||
letters: piano
|
||||
wordsAmount: 5
|
||||
words:
|
||||
- pan
|
||||
- piano
|
||||
- pino
|
||||
- poni
|
||||
- apio
|
||||
words: []
|
||||
crosswordData:
|
||||
columns: 10
|
||||
rows: 7
|
||||
placements:
|
||||
- word: pan
|
||||
wordNumber: 1
|
||||
startPosition: {x: 5, y: 2}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: piano
|
||||
wordNumber: 2
|
||||
startPosition: {x: 3, y: 3}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: pino
|
||||
wordNumber: 3
|
||||
startPosition: {x: 3, y: 3}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: poni
|
||||
wordNumber: 4
|
||||
startPosition: {x: 0, y: 4}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: apio
|
||||
wordNumber: 5
|
||||
startPosition: {x: 0, y: 6}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
placements: []
|
||||
specialItems: []
|
||||
minBounds: {x: 0, y: 2}
|
||||
maxBounds: {x: 7, y: 6}
|
||||
serializedGrid: ' | | p | piano |poni n |
|
||||
n |apio '
|
||||
minBounds: {x: 5, y: 3}
|
||||
maxBounds: {x: 5, y: 3}
|
||||
serializedGrid: ' | | | | |
|
||||
| '
|
||||
- language: fr
|
||||
letters:
|
||||
wordsAmount: 5
|
||||
@ -167,9 +132,70 @@ MonoBehaviour:
|
||||
minBounds: {x: 0, y: 0}
|
||||
maxBounds: {x: 0, y: 0}
|
||||
serializedGrid:
|
||||
- language: tr
|
||||
letters: "ayn\u0131"
|
||||
wordsAmount: 5
|
||||
words:
|
||||
- "ayn\u0131"
|
||||
- an
|
||||
- "an\u0131"
|
||||
- "ay\u0131"
|
||||
- yan
|
||||
crosswordData:
|
||||
columns: 10
|
||||
rows: 7
|
||||
placements:
|
||||
- word: an
|
||||
wordNumber: 3
|
||||
startPosition: {x: 5, y: 2}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: yan
|
||||
wordNumber: 2
|
||||
startPosition: {x: 3, y: 3}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: "ay\u0131"
|
||||
wordNumber: 5
|
||||
startPosition: {x: 1, y: 5}
|
||||
isHorizontal: 1
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: "ayn\u0131"
|
||||
wordNumber: 4
|
||||
startPosition: {x: 3, y: 2}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
- word: "an\u0131"
|
||||
wordNumber: 1
|
||||
startPosition: {x: 5, y: 2}
|
||||
isHorizontal: 0
|
||||
isSpecialItem: 0
|
||||
specialItemPath:
|
||||
specialItems: []
|
||||
minBounds: {x: 1, y: 2}
|
||||
maxBounds: {x: 6, y: 5}
|
||||
serializedGrid: " | | a an | yan | n \u0131
|
||||
| ay\u0131 | "
|
||||
- language: new
|
||||
letters:
|
||||
wordsAmount: 5
|
||||
words: []
|
||||
crosswordData:
|
||||
columns: 10
|
||||
rows: 7
|
||||
placements: []
|
||||
specialItems: []
|
||||
minBounds: {x: 5, y: 3}
|
||||
maxBounds: {x: 5, y: 3}
|
||||
serializedGrid: ' | | | | |
|
||||
| '
|
||||
colorsTile: {fileID: 11400000, guid: e8a60425bb67f42618a943883b553d29, type: 2}
|
||||
words: 5
|
||||
letters: 5
|
||||
letters: 4
|
||||
min: 3
|
||||
max: 6
|
||||
difficulty: 0
|
||||
|
||||
@ -7,7 +7,6 @@ DAY : Day
|
||||
THANKS : Thanks!
|
||||
LOADING : Loading...
|
||||
LUCKYSPIN : Lucky Spin
|
||||
OK : OK
|
||||
NOADSLABEL1 : Play without ads!
|
||||
NOADSLABEL2 : Reward videos are optional and available for viewing after purchase
|
||||
BUY : BUY
|
||||
|
||||
@ -7,7 +7,6 @@ DAY : Jour
|
||||
THANKS : Merci !
|
||||
LOADING : Chargement...
|
||||
LUCKYSPIN : Roue de la Fortune
|
||||
OK : OK
|
||||
NOADSLABEL1 : Jouez sans publicit<69>s !
|
||||
NOADSLABEL2 : Les vid<69>os de r<>compense sont optionnelles et disponibles apr<70>s l'achat
|
||||
BUY : ACHETER
|
||||
|
||||
@ -0,0 +1,77 @@
|
||||
COINSSHOP : Κατάστημα Νομισμάτων
|
||||
FREE : ΔΩΡΕΑΝ
|
||||
BUYTIPS : Αγόρασε Βοήθειες (Tips)
|
||||
GETFREE : Λάβε Δωρεάν
|
||||
DAILYREWARD : Καθημερινές Ανταμοιβές
|
||||
DAY : Ημέρα
|
||||
THANKS : Ευχαριστούμε!
|
||||
LOADING : Φορτώνει...
|
||||
LUCKYSPIN : Τυχερή Περιστροφή
|
||||
NOADSLABEL1 : Παίξε χωρίς διαφημίσεις!
|
||||
NOADSLABEL2 : Τα βίντεο ανταμοιβής είναι προαιρετικά και διαθέσιμα για προβολή μετά την αγορά
|
||||
BUY : ΑΓΟΡΑ
|
||||
OUTOFLIVES : ΕΞΑΝΤΛΗΘΗΚΑΝ ΟΙ ΖΩΕΣ
|
||||
REFILLTHELIVES : Αναπλήρωση των ζωών;
|
||||
OUTOFTIME : ΕΞΑΝΤΛΗΘΗΚΕ Ο ΧΡΟΝΟΣ
|
||||
REFILLTHETIME : Αναπλήρωση του χρόνου;
|
||||
GIFT : Δώρο
|
||||
LEVELCLEARED : ΕΠΙΠΕΔΟ ΟΛΟΚΛΗΡΩΘΗΚΕ!
|
||||
SETTINGS : Ρυθμίσεις
|
||||
SHOP : ΚΑΤΑΣΤΗΜΑ
|
||||
PRIVACY : Απόρρητο
|
||||
QUITTHEGAME : Έξοδος από το παιχνίδι
|
||||
DOYOUWANTTOQUIT : Θέλετε πραγματικά να βγείτε;
|
||||
YES : ΝΑΙ
|
||||
NO : ΟΧΙ
|
||||
COMINGSOON : Νέα επίπεδα έρχονται σύντομα. <br>Μείνετε συντονισμένοι για την επόμενη ενημέρωση.
|
||||
WIN : ΝΙΚΗ
|
||||
NEXTLEVEL : Επόμενο Επίπεδο
|
||||
SCORE : Σκορ
|
||||
POINTS : Πόντοι
|
||||
REVIVEWITHNEWSHAPES : Αναβίωση με νέα σχήματα;
|
||||
WHATCHADS : Παρακολούθηση Διαφημίσεων
|
||||
CONTINUE : Συνέχεια
|
||||
YOULOSE : Χάσατε...
|
||||
RETRY : Ξαναπροσπάθησε
|
||||
ALMOST : Σχεδόν τα καταφέρατε...
|
||||
ARCADEMODE : ΛΕΙΤΟΥΡΓΙΑ ARCADE
|
||||
STAGE : ΣΤΑΔΙΟ {stage}
|
||||
LEVEL : Επίπεδο {level}
|
||||
MOSTPOPULAR : Πιο Δημοφιλές
|
||||
BESTOFFER : ΚΑΛΥΤΕΡΗ ΠΡΟΣΦΟΡΑ
|
||||
NOADS : Κατάργηση Διαφημίσεων
|
||||
FREESPIN : ΔΩΡΕΑΝ Περιστροφή
|
||||
SOUNDS : Ήχοι
|
||||
MUSIC : Μουσική
|
||||
VIBRATION : Δόνηση
|
||||
GAMEOVER : Τέλος Παιχνιδιού
|
||||
YOURSCORE : Το Σκορ σας
|
||||
BESTSCORE : ΚΑΛΥΤΕΡΟ Σκορ
|
||||
NEWRECORD : Νέο Ρεκόρ!
|
||||
EXITGAME : Έξοδος από το Παιχνίδι
|
||||
ADVENTURE : ΠΕΡΙΠΕΤΕΙΑ
|
||||
CLASSIC : ΚΛΑΣΙΚΟ
|
||||
TUTORIAL : Εκμάθηση
|
||||
RESTORE_PURCHASES : Επαναφορά Αγορών
|
||||
EXTRAWORDS : Επιπλέον Λέξεις
|
||||
WORDSNOTINTCLUDEDINTHISLEVEL : Λέξεις που δεν περιλαμβάνονται σε αυτό το επίπεδο
|
||||
CLAIM : Διεκδίκηση
|
||||
COINS : ΝΟΜΙΣΜΑΤΑ
|
||||
GEMS : ΠΕΤΡΑΔΙΑ
|
||||
TAPTOCOLLECT : ΠΑΤΗΣΤΕ ΓΙΑ ΣΥΛΛΟΓΗ
|
||||
DAILYREWARDS : ΚΑΘΗΜΕΡΙΝΕΣ ΑΝΤΑΜΟΙΒΕΣ
|
||||
SPIN : ΠΕΡΙΣΤΡΟΦΗ
|
||||
SELECTLANGUAGE : ΕΠΙΛΟΓΗ ΓΛΩΣΣΑΣ
|
||||
AGAIN : ΞΑΝΑ
|
||||
UNLOCK : Συλλέξτε κάρτες για να ξεκλειδώσετε ενδιαφέροντα στοιχεία (facts)
|
||||
TipBoosterButton : Εάν κολλήσετε, μπορείτε να χρησιμοποιήσετε μια ΥΠΟΔΕΙΞΗ (HINT)
|
||||
HammerBoosterButton : Το ΣΦΥΡΙ αποκαλύπτει οποιοδήποτε γράμμα της επιλογής σας
|
||||
ExtraWordsButton : Βρήκατε μια ΕΠΙΠΛΕΟΝ ΛΕΞΗ!
|
||||
Extra words are displayed here : Οι επιπλέον λέξεις εμφανίζονται εδώ
|
||||
GiftButton : Έχετε ξεκλειδώσει ένα ΔΩΡΟ! <br><br> ΞΟΔΕΨΤΕ ΠΕΤΡΑΔΙΑ για να λάβετε μια πολύτιμη ΑΝΤΑΜΟΙΒΗ
|
||||
ShuffleButton : Το κουμπί ΑΝΑΚΑΤΕΜΑ (SHUFFLE) μπορεί να σας βοηθήσει να βρείτε λέξεις πιο γρήγορα
|
||||
RedGem : Συνδέστε τη λέξη {word} για να λάβετε ένα ΚΟΚΚΙΝΟ ΠΕΤΡΑΔΙ
|
||||
GameTutorial : Σύρετε για να συνδέσετε τη λέξη {word} με μία κίνηση
|
||||
Home : Αρχική
|
||||
HARD : ΔΥΣΚΟΛΟ
|
||||
TIMETUT : Λύστε όλες τις λέξεις έγκαιρα για να ΚΕΡΔΙΣΕΤΕ
|
||||
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 576d9cb2289d541228a31b12421cdab8
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,76 @@
|
||||
COINSSHOP : Loja de Moedas
|
||||
FREE : GRÁTIS
|
||||
BUYTIPS : Comprar Dicas
|
||||
GETFREE : Obter Grátis
|
||||
DAILYREWARD : Recompensas Diárias
|
||||
DAY : Dia
|
||||
THANKS : Obrigado!
|
||||
LOADING : Carregando...
|
||||
LUCKYSPIN : Giro da Sorte
|
||||
NOADSLABEL1 : Jogue sem anúncios!
|
||||
NOADSLABEL2 : Vídeos de recompensa são opcionais e disponíveis para visualização após a compra
|
||||
BUY : COMPRAR
|
||||
OUTOFLIVES : SEM VIDAS
|
||||
REFILLTHELIVES : Recarregar as vidas?
|
||||
OUTOFTIME : SEM TEMPO
|
||||
REFILLTHETIME : Recarregar o tempo?
|
||||
GIFT : Presente
|
||||
LEVELCLEARED : NÍVEL CONCLUÍDO!
|
||||
SETTINGS : Configurações
|
||||
SHOP : LOJA
|
||||
PRIVACY : Privacidade
|
||||
QUITTHEGAME : Sair do jogo
|
||||
DOYOUWANTTOQUIT : Você realmente quer sair?
|
||||
YES : Sim
|
||||
NO : NÃO
|
||||
COMINGSOON : Novos níveis em breve. <br>Fique atento à próxima atualização.
|
||||
WIN : VITÓRIA
|
||||
NEXTLEVEL : Próximo Nível
|
||||
SCORE : Pontuação
|
||||
POINTS : Pontos
|
||||
REVIVEWITHNEWSHAPES : Reviver com novas formas?
|
||||
WHATCHADS : Assistir Anúncios
|
||||
CONTINUE : Continuar
|
||||
YOULOSE : Você Perdeu...
|
||||
RETRY : Tentar Novamente
|
||||
ALMOST : Quase lá...
|
||||
ARCADEMODE : MODO ARCADE
|
||||
STAGE : ESTÁGIO {stage}
|
||||
LEVEL : Nível {level}
|
||||
MOSTPOPULAR : Mais Popular
|
||||
BESTOFFER : MELHOR Oferta
|
||||
NOADS : Remover ADS
|
||||
FREESPIN : Giro GRÁTIS
|
||||
SOUNDS : Sons
|
||||
MUSIC : Música
|
||||
VIBRATION : Vibração
|
||||
GAMEOVER : Fim de Jogo
|
||||
YOURSCORE : Sua Pontuação
|
||||
BESTSCORE : MELHOR Pontuação
|
||||
NEWRECORD : Novo Recorde!
|
||||
EXITGAME : Sair do Jogo
|
||||
ADVENTURE : AVENTURA
|
||||
CLASSIC : CLÁSSICO
|
||||
TUTORIAL : Tutorial
|
||||
RESTORE_PURCHASES : Restaurar Compras
|
||||
EXTRAWORDS : Palavras Extras
|
||||
WORDSNOTINTCLUDEDINTHISLEVEL : Palavras não incluídas neste nível
|
||||
CLAIM : Reivindicar
|
||||
COINS : MOEDAS
|
||||
GEMS : GEMAS
|
||||
TAPTOCOLLECT : TOQUE PARA COLETAR
|
||||
DAILYREWARDS : RECOMPENSAS DIÁRIAS
|
||||
SPIN :GIRO
|
||||
SELECTLANGUAGE : SELECIONAR LÍNGUA
|
||||
AGAIN : NOVAMENTE
|
||||
UNLOCK : Colete cartas para desbloquear fatos interessantes
|
||||
TipBoosterButton : Se você ficar preso, pode usar uma DICA
|
||||
HammerBoosterButton : O MARTELO revela qualquer letra da sua escolha
|
||||
ExtraWordsButton : Você encontrou uma PALAVRA EXTRA! Palavras extras são exibidas aqui
|
||||
GiftButton : Você desbloqueou um PRESENTE!<br><br> GASTE GEMAS para receber uma RECOMPENSA valiosa
|
||||
ShuffleButton : O botão EMBARALHAR pode ajudá-lo a encontrar palavras mais rápido
|
||||
RedGem : Conecte a palavra {word} para obter uma GEMAS VERMELHA
|
||||
GameTutorial : Deslize para conectar a palavra {word} em um único movimento
|
||||
Home : Início
|
||||
HARD : DIFÍCIL
|
||||
TIMETUT : Resolva todas as palavras a tempo para VENCER
|
||||
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f3a020d5ed0c44909e7df6a54db58fd9
|
||||
timeCreated: 1756110934
|
||||
@ -7,7 +7,6 @@ DAY : День
|
||||
THANKS : Спасибо!
|
||||
LOADING : Загрузка...
|
||||
LUCKYSPIN : Колесо удачи
|
||||
OK : OK
|
||||
NOADSLABEL1 : Сделайте эту покупку, чтобы навсегда убрать рекламу
|
||||
NOADSLABEL2 : Рекламные видео остаются доступными для просмотра по желанию после покупки
|
||||
BUY : КУПИТЬ
|
||||
@ -19,7 +18,7 @@ GIFT : Подарок
|
||||
LEVELCLEARED : УРОВЕНЬ ПРОЙДЕН!
|
||||
SETTINGS : Настройки
|
||||
SHOP : МАГАЗИН
|
||||
PRIVACY : КОНФИДЕНЦИАЛЬНОСТЬ
|
||||
PRIVACY : ПРИВАТНОСТЬ
|
||||
QUITTHEGAME : Выйти из игры
|
||||
DOYOUWANTTOQUIT : Вы действительно хотите выйти?
|
||||
YES : Да
|
||||
@ -53,7 +52,7 @@ EXITGAME : Выйти из игры
|
||||
ADVENTURE : ПРИКЛЮЧЕНИЕ
|
||||
CLASSIC : КЛАССИКА
|
||||
TUTORIAL : Обучение
|
||||
RESTORE_PURCHASES : Восстановить покупки
|
||||
RESTORE_PURCHASES : Восст. покупки
|
||||
EXTRAWORDS : Дополнительные слова
|
||||
WORDSNOTINTCLUDEDINTHISLEVEL : Слова, не включенные в этот уровень
|
||||
CLAIM : Получить
|
||||
|
||||
@ -7,7 +7,6 @@ DAY : Día
|
||||
THANKS : ¡Gracias!
|
||||
LOADING : Cargando...
|
||||
LUCKYSPIN : GIRO DE SUERTE
|
||||
OK : OK
|
||||
YOURWIN : ¡Has Ganado!
|
||||
NOADSLABEL1 : Haz esta compra para eliminar los anuncios permanentemente
|
||||
NOADSLABEL2 : Los videos de recompensa son opcionales y están disponibles después de la compra
|
||||
|
||||
@ -0,0 +1,76 @@
|
||||
COINSSHOP : Jeton Mağazası
|
||||
FREE : ÜCRETSİZ
|
||||
BUYTIPS : İpucu Satın Al
|
||||
GETFREE : Ücretsiz Al
|
||||
DAILYREWARD : Günlük Ödüller
|
||||
DAY : Gün
|
||||
THANKS : Teşekkürler!
|
||||
LOADING : Yükleniyor...
|
||||
LUCKYSPIN : Şanslı Çark
|
||||
NOADSLABEL1 : Reklamsız oyna!
|
||||
NOADSLABEL2 : Ödül videoları isteğe bağlıdır ve satın alma sonrası izlenebilir
|
||||
BUY : SATIN AL
|
||||
OUTOFLIVES : CAN BİTTİ
|
||||
REFILLTHELIVES : Canları yenile?
|
||||
OUTOFTIME : SÜRE BİTTİ
|
||||
REFILLTHETIME : Süreyi yenile?
|
||||
GIFT : Hediye
|
||||
LEVELCLEARED : LEVEL TAMAMLANDI!
|
||||
SETTINGS : Ayarlar
|
||||
SHOP : MAĞAZA
|
||||
PRIVACY : Gizlilik
|
||||
QUITTHEGAME : Oyundan çık
|
||||
DOYOUWANTTOQUIT : Gerçekten çıkmak istiyor musun?
|
||||
YES : Evet
|
||||
NO : HAYIR
|
||||
COMINGSOON : Yeni levellar yakında. <br>Bir sonraki güncelleme için takipte kalın.
|
||||
WIN : KAZAN
|
||||
NEXTLEVEL : Sonraki Level
|
||||
SCORE : Skor
|
||||
POINTS : Puan
|
||||
REVIVEWITHNEWSHAPES : Yeni şekillerle canlan?
|
||||
WHATCHADS : Reklam İzle
|
||||
CONTINUE : Devam Et
|
||||
YOULOSE : Kaybettin...
|
||||
RETRY : Tekrar Dene
|
||||
ALMOST : Neredeyse bitti...
|
||||
ARCADEMODE : ARCADE MODU
|
||||
STAGE : AŞAMA {stage}
|
||||
LEVEL : Seviye {level}
|
||||
MOSTPOPULAR : En Popüler
|
||||
BESTOFFER : EN İYİ Teklif
|
||||
NOADS : Reklamları Kaldır
|
||||
FREESPIN : ÜCRETSİZ Çark
|
||||
SOUNDS : Sesler
|
||||
MUSIC : Müzik
|
||||
VIBRATION : Titreşim
|
||||
GAMEOVER : Oyun Bitti
|
||||
YOURSCORE : Skorun
|
||||
BESTSCORE : EN İYİ Skor
|
||||
NEWRECORD : Yeni Rekor!
|
||||
EXITGAME : Oyundan Çık
|
||||
ADVENTURE : MACERA
|
||||
CLASSIC : KLASİK
|
||||
TUTORIAL : Öğretici
|
||||
RESTORE_PURCHASES : Satın Alımları Geri Yükle
|
||||
EXTRAWORDS : Ekstra Kelimeler
|
||||
WORDSNOTINTCLUDEDINTHISLEVEL : Bu levelde bulunmayan kelimeler
|
||||
CLAIM : Al
|
||||
COINS : JETONLAR
|
||||
GEMS : MÜCEVHERLER
|
||||
TAPTOCOLLECT : ALMAK İÇİN DOKUN
|
||||
DAILYREWARDS : GÜNLÜK ÖDÜLLER
|
||||
SPIN : ÇARK
|
||||
SELECTLANGUAGE : DİL SEÇ
|
||||
AGAIN : TEKRAR
|
||||
UNLOCK : İlginç gerçekleri açmak için kartları topla
|
||||
TipBoosterButton : Takılırsan, İPUCU kullanabilirsin
|
||||
HammerBoosterButton : ÇEKİÇ seçtiğin herhangi bir harfi açar
|
||||
ExtraWordsButton : EKSTRA KELİME buldun! Ekstra kelimeler burada gösterilir
|
||||
GiftButton : Bir HEDİYE açtın!<br><br> Değerli bir ÖDÜL almak için MÜCEVHER HARCA
|
||||
ShuffleButton : KARIŞTIR butonu kelimeleri daha hızlı bulmanı sağlar
|
||||
RedGem : {word} kelimesini birleştirerek KIRMIZI MÜCEVHER kazan
|
||||
GameTutorial : {word} kelimesini tek harekette birleştirmek için kaydır
|
||||
Home : Ana Sayfa
|
||||
HARD : ZOR
|
||||
TIMETUT : Tüm kelimeleri zamanında çözerek KAZAN
|
||||
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 23172cfae5ce473c93c89484749c57f1
|
||||
timeCreated: 1755096283
|
||||
@ -13,7 +13,6 @@ GameObject:
|
||||
- component: {fileID: 1950329202737063183}
|
||||
- component: {fileID: 3147130223869816525}
|
||||
- component: {fileID: 6033270132168065964}
|
||||
- component: {fileID: 636551701378598401}
|
||||
m_Layer: 0
|
||||
m_Name: NoAds
|
||||
m_TagString: Untagged
|
||||
@ -150,24 +149,6 @@ MonoBehaviour:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
noSound: 0
|
||||
--- !u!114 &636551701378598401
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1411125501940549780}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: ecf8678021564e0c8ccdb00b43162f58, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
BuyItemButton: {fileID: 6033270132168065964}
|
||||
price: {fileID: 994560272042212353}
|
||||
count: {fileID: 0}
|
||||
discountPercent: {fileID: 0}
|
||||
productID: {fileID: 11400000, guid: 5a976435f08ad439db8305e3de645368, type: 2}
|
||||
resource: {fileID: 0}
|
||||
--- !u!1 &3033206250374185977
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -1371,6 +1352,7 @@ MonoBehaviour:
|
||||
- {fileID: 2587162064600910403}
|
||||
- {fileID: 8029056659159804162}
|
||||
noAdsProduct: {fileID: 11400000, guid: 5a976435f08ad439db8305e3de645368, type: 2}
|
||||
noAdsPriceText: {fileID: 994560272042212353}
|
||||
coinsSound: {fileID: 0}
|
||||
--- !u!95 &1506187382743174503
|
||||
Animator:
|
||||
|
||||
@ -1119,8 +1119,8 @@ RectTransform:
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: -13.999998, y: 205.09991}
|
||||
m_SizeDelta: {x: 805.3, y: 125.2}
|
||||
m_AnchoredPosition: {x: 10.214, y: 221.7}
|
||||
m_SizeDelta: {x: 960.6, y: 125.2}
|
||||
m_Pivot: {x: 0.50953984, y: 1.5127809}
|
||||
--- !u!222 &7535087139974686469
|
||||
CanvasRenderer:
|
||||
@ -1177,7 +1177,7 @@ MonoBehaviour:
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 52.8
|
||||
m_fontSize: 59.7
|
||||
m_fontSizeBase: 32
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 1
|
||||
|
||||
@ -0,0 +1,465 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &1818791151053463826
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2567939603980722763}
|
||||
- component: {fileID: 3423675973788078395}
|
||||
- component: {fileID: 1805814460615924799}
|
||||
- component: {fileID: 6259068709827928649}
|
||||
- component: {fileID: 1114516486659757762}
|
||||
m_Layer: 5
|
||||
m_Name: MessageText
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &2567939603980722763
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1818791151053463826}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1.0007356, y: 1.0007356, z: 1.0007356}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 8034155342639863909}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: -0.55041504, y: 120.05658}
|
||||
m_SizeDelta: {x: 800, y: 100}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &3423675973788078395
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1818791151053463826}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &1805814460615924799
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1818791151053463826}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: New Text
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4279308570
|
||||
m_fontColor: {r: 0.103773594, g: 0.06510325, b: 0.06510325, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 48
|
||||
m_fontSizeBase: 48
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 1
|
||||
m_HorizontalAlignment: 2
|
||||
m_VerticalAlignment: 512
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_enableWordWrapping: 1
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 1
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!95 &6259068709827928649
|
||||
Animator:
|
||||
serializedVersion: 5
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1818791151053463826}
|
||||
m_Enabled: 1
|
||||
m_Avatar: {fileID: 0}
|
||||
m_Controller: {fileID: 0}
|
||||
m_CullingMode: 0
|
||||
m_UpdateMode: 0
|
||||
m_ApplyRootMotion: 0
|
||||
m_LinearVelocityBlending: 0
|
||||
m_StabilizeFeet: 0
|
||||
m_WarningMessage:
|
||||
m_HasTransformHierarchy: 1
|
||||
m_AllowConstantClipSamplingOptimization: 1
|
||||
m_KeepAnimatorStateOnDisable: 0
|
||||
m_WriteDefaultValuesOnDisable: 0
|
||||
--- !u!225 &1114516486659757762
|
||||
CanvasGroup:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1818791151053463826}
|
||||
m_Enabled: 1
|
||||
m_Alpha: 1
|
||||
m_Interactable: 1
|
||||
m_BlocksRaycasts: 1
|
||||
m_IgnoreParentGroups: 0
|
||||
--- !u!1 &7811482148034564061
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8034155342639863909}
|
||||
- component: {fileID: 8031136941516792535}
|
||||
- component: {fileID: 8016891387234896929}
|
||||
- component: {fileID: 3521832069348138651}
|
||||
- component: {fileID: 5153632076726711166}
|
||||
m_Layer: 5
|
||||
m_Name: MessagePopup
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &8034155342639863909
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7811482148034564061}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 2567939603980722763}
|
||||
- {fileID: 8729196215722196391}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 1284, y: 400}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &8031136941516792535
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7811482148034564061}
|
||||
m_CullTransparentMesh: 0
|
||||
--- !u!95 &8016891387234896929
|
||||
Animator:
|
||||
serializedVersion: 5
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7811482148034564061}
|
||||
m_Enabled: 1
|
||||
m_Avatar: {fileID: 0}
|
||||
m_Controller: {fileID: 9100000, guid: cac0359e35eca487b8be1ca73b3d159d, type: 2}
|
||||
m_CullingMode: 0
|
||||
m_UpdateMode: 0
|
||||
m_ApplyRootMotion: 0
|
||||
m_LinearVelocityBlending: 0
|
||||
m_StabilizeFeet: 0
|
||||
m_WarningMessage:
|
||||
m_HasTransformHierarchy: 1
|
||||
m_AllowConstantClipSamplingOptimization: 1
|
||||
m_KeepAnimatorStateOnDisable: 0
|
||||
m_WriteDefaultValuesOnDisable: 0
|
||||
--- !u!225 &3521832069348138651
|
||||
CanvasGroup:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7811482148034564061}
|
||||
m_Enabled: 1
|
||||
m_Alpha: 1
|
||||
m_Interactable: 1
|
||||
m_BlocksRaycasts: 1
|
||||
m_IgnoreParentGroups: 0
|
||||
--- !u!114 &5153632076726711166
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7811482148034564061}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: b00e69d6788d74f1cb21197ea9faaa8d, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
fade: 1
|
||||
closeButton: {fileID: 0}
|
||||
tagsToShow: []
|
||||
isPopupAboveTags: 0
|
||||
fadeAlpha: 1
|
||||
appearSound: {fileID: 0}
|
||||
disappearSound: {fileID: 0}
|
||||
messageText: {fileID: 1805814460615924799}
|
||||
--- !u!1001 &4313604078728082956
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 8034155342639863909}
|
||||
m_Modifications:
|
||||
- target: {fileID: 90856562591110198, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_Color.b
|
||||
value: 0.14509805
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 90856562591110198, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_Color.g
|
||||
value: 0.8901961
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 90856562591110198, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_Color.r
|
||||
value: 0.10980392
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 907128453201242062, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: NO
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1804143460132237798, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 308.7
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1804143460132237798, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 93.683
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1804143460132237798, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 6
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1804143460132237798, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 9.76
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3661189285963648132, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_IsActive
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4641059037314894576, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_text
|
||||
value: NO
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4641059037314894576, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: instanceID
|
||||
value: NO
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4641059037314894576, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_fontSize
|
||||
value: 77.4
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4641059037314894576, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_sharedMaterial
|
||||
value:
|
||||
objectReference: {fileID: 3722732180671858053, guid: 14928a98ac0086a4483452d618f1764c, type: 2}
|
||||
- target: {fileID: 4825982739004869547, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4825982739004869547, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_Pivot.y
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4825982739004869547, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4825982739004869547, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4825982739004869547, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_AnchorMin.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4825982739004869547, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4825982739004869547, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 422.6
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4825982739004869547, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 80
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4825982739004869547, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_LocalScale.x
|
||||
value: 1.0007356
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4825982739004869547, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_LocalScale.y
|
||||
value: 1.0007356
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4825982739004869547, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_LocalScale.z
|
||||
value: 1.0007356
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4825982739004869547, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4825982739004869547, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4825982739004869547, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4825982739004869547, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4825982739004869547, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4825982739004869547, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4825982739004869547, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4825982739004869547, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 242.62836
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4825982739004869547, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: -7.036865
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4825982739004869547, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4825982739004869547, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4825982739004869547, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8610968763401608209, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_IsActive
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8644439777305475629, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_Color.b
|
||||
value: 0.84313726
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8644439777305475629, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_Color.g
|
||||
value: 0.8039216
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8644439777305475629, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_Color.r
|
||||
value: 0.7921569
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8673558434284163724, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_Color.b
|
||||
value: 0.047058824
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8673558434284163724, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_Color.g
|
||||
value: 0.69803923
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8673558434284163724, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
propertyPath: m_Color.r
|
||||
value: 0.007843138
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects:
|
||||
- {fileID: 6038492710620930376, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
- {fileID: 3661189285963648132, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
--- !u!224 &8729196215722196391 stripped
|
||||
RectTransform:
|
||||
m_CorrespondingSourceObject: {fileID: 4825982739004869547, guid: e81bbbc218b73d345bfb5f45c5fa7c66, type: 3}
|
||||
m_PrefabInstance: {fileID: 4313604078728082956}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 520cfca0b533043a68fce421523ffd17
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -269,6 +269,7 @@ MonoBehaviour:
|
||||
disappearSound: {fileID: 0}
|
||||
removeAdsButton: {fileID: 1978271021528692323}
|
||||
productID: {fileID: 11400000, guid: 5a976435f08ad439db8305e3de645368, type: 2}
|
||||
priceText: {fileID: 5469067225883325548}
|
||||
--- !u!223 &107975066550012903
|
||||
Canvas:
|
||||
m_ObjectHideFlags: 0
|
||||
|
||||
@ -242,8 +242,7 @@ RectTransform:
|
||||
- {fileID: 3904014851963953829}
|
||||
- {fileID: 8498546336381412538}
|
||||
- {fileID: 6912875309253603059}
|
||||
- {fileID: 389028524070462765}
|
||||
- {fileID: 7342428514651788858}
|
||||
- {fileID: 6580947508340125878}
|
||||
m_Father: {fileID: 4888698260352988140}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
@ -509,18 +508,18 @@ RectTransform:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2674760614323516302}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 2664.143}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 4386370085143922448}
|
||||
- {fileID: 6674073733379322089}
|
||||
m_Father: {fileID: 2148560976257270264}
|
||||
m_Father: {fileID: 6580947508340125878}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 255, y: -596}
|
||||
m_SizeDelta: {x: 436.0297, y: 253.0126}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 253.0126}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &6669546556015746141
|
||||
CanvasRenderer:
|
||||
@ -631,6 +630,70 @@ MonoBehaviour:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
noSound: 0
|
||||
--- !u!1 &5088694231550735736
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6580947508340125878}
|
||||
- component: {fileID: 3737039387247353948}
|
||||
m_Layer: 5
|
||||
m_Name: Buttons
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &6580947508340125878
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5088694231550735736}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: -2664.143}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 389028524070462765}
|
||||
- {fileID: 7342428514651788858}
|
||||
m_Father: {fileID: 2148560976257270264}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 17.165, y: -590.07}
|
||||
m_SizeDelta: {x: 928.17, y: 253}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &3737039387247353948
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5088694231550735736}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Padding:
|
||||
m_Left: 0
|
||||
m_Right: 0
|
||||
m_Top: 0
|
||||
m_Bottom: 0
|
||||
m_ChildAlignment: 4
|
||||
m_Spacing: 0
|
||||
m_ChildForceExpandWidth: 1
|
||||
m_ChildForceExpandHeight: 0
|
||||
m_ChildControlWidth: 1
|
||||
m_ChildControlHeight: 0
|
||||
m_ChildScaleWidth: 0
|
||||
m_ChildScaleHeight: 0
|
||||
m_ReverseArrangement: 0
|
||||
--- !u!1 &5987972094866960005
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -696,7 +759,7 @@ MonoBehaviour:
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text:
|
||||
m_text: AGAIN
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 14928a98ac0086a4483452d618f1764c, type: 2}
|
||||
m_sharedMaterial: {fileID: 2100000, guid: 68c9b8949d6894b4fac4f68f9a6fe10e, type: 2}
|
||||
@ -723,7 +786,7 @@ MonoBehaviour:
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 32
|
||||
m_fontSize: 60.25
|
||||
m_fontSizeBase: 32
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 1
|
||||
@ -1123,6 +1186,7 @@ GameObject:
|
||||
- component: {fileID: 4686081452797347009}
|
||||
- component: {fileID: 7087705036038996266}
|
||||
- component: {fileID: 1306931333348575190}
|
||||
- component: {fileID: 3582926535624043061}
|
||||
m_Layer: 0
|
||||
m_Name: Buy
|
||||
m_TagString: Untagged
|
||||
@ -1138,18 +1202,18 @@ RectTransform:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7551346846335541968}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 2664.143}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 8035301690477598643}
|
||||
- {fileID: 1593944131338580978}
|
||||
m_Father: {fileID: 2148560976257270264}
|
||||
m_Father: {fileID: 6580947508340125878}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: -228.9, y: -601}
|
||||
m_SizeDelta: {x: 436.0297, y: 253.0126}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 253.0126}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &2189947461181701794
|
||||
CanvasRenderer:
|
||||
@ -1260,6 +1324,18 @@ MonoBehaviour:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
noSound: 0
|
||||
--- !u!114 &3582926535624043061
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7551346846335541968}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: c9c6b14262f434e07ad593f7b28fbfba, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!1 &7627276145714778815
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -1442,9 +1518,9 @@ RectTransform:
|
||||
m_Children: []
|
||||
m_Father: {fileID: 7342428514651788858}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: -101, y: 13}
|
||||
m_AnchorMin: {x: 0, y: 0.5}
|
||||
m_AnchorMax: {x: 0, y: 0.5}
|
||||
m_AnchoredPosition: {x: 131, y: 13}
|
||||
m_SizeDelta: {x: 91.1761, y: 103.8394}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &3736785195808042210
|
||||
|
||||
@ -741,6 +741,7 @@ RectTransform:
|
||||
- {fileID: 7560663172583379825}
|
||||
- {fileID: 2322537657978783918}
|
||||
- {fileID: 90789140801721391}
|
||||
- {fileID: 2652648118269143667}
|
||||
- {fileID: 837921014736427326}
|
||||
m_Father: {fileID: 7285109989598965343}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
@ -1143,6 +1144,7 @@ MonoBehaviour:
|
||||
appearSound: {fileID: 0}
|
||||
disappearSound: {fileID: 0}
|
||||
privacypolicy: {fileID: 9102471955984009255}
|
||||
googleUMPConsent: {fileID: 6611547390847006331}
|
||||
restorePurchase: {fileID: 8408240860258485558}
|
||||
vibrationSlider: {fileID: 505551677814366046}
|
||||
--- !u!114 &7505269174666667659
|
||||
@ -2190,11 +2192,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5342761196953066357, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_text
|
||||
value: Privacy
|
||||
value: GDPR
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5342761196953066357, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: instanceID
|
||||
value: PRIVACY
|
||||
value:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5342761196953066357, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_fontSize
|
||||
@ -2294,11 +2296,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6746304736006806339, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: -7
|
||||
value: -2.8722
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6746304736006806339, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: -761
|
||||
value: -773
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6746304736006806339, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
@ -2421,3 +2423,336 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: c9659348afa04bc6bb30eb6900f94b65, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!1001 &8741391224511066416
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 3963225542060995251}
|
||||
m_Modifications:
|
||||
- target: {fileID: 968135515561558649, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 968135515561558649, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 968135515561558649, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_AnchorMin.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 968135515561558649, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 968135515561558649, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 77.4014
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 968135515561558649, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 85.2995
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 968135515561558649, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 101.2
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 968135515561558649, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 95.8
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1734678026940801168, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Sprite
|
||||
value:
|
||||
objectReference: {fileID: 21300000, guid: 7f7bb377a7687438bb5a87d2eff4bfd7, type: 3}
|
||||
- target: {fileID: 1734678026940801168, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Color.b
|
||||
value: 0.7764706
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1734678026940801168, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Color.g
|
||||
value: 0.57254905
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1734678026940801168, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Color.r
|
||||
value: 0.3529412
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2327761819407891759, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Color.b
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2327761819407891759, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Color.g
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2327761819407891759, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Color.r
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2490286444286461771, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_TargetGraphic
|
||||
value:
|
||||
objectReference: {fileID: 3705024337948060229}
|
||||
- target: {fileID: 2611169328416249915, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: part1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3155086027690401780, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Color.b
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3155086027690401780, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Color.g
|
||||
value: 0.9686275
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3155086027690401780, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Color.r
|
||||
value: 0.9058824
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4025083493491244185, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Color.b
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4025083493491244185, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Color.g
|
||||
value: 0.95294124
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4025083493491244185, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Color.r
|
||||
value: 0.9058824
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5342761196953066357, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_text
|
||||
value: Privacy
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5342761196953066357, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: instanceID
|
||||
value: PRIVACY
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5342761196953066357, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_fontSize
|
||||
value: 60
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5342761196953066357, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_fontStyle
|
||||
value: 4
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5342761196953066357, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_fontColor.b
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5342761196953066357, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_fontColor.g
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5342761196953066357, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_fontColor.r
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5342761196953066357, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_fontSizeBase
|
||||
value: 60
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5342761196953066357, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_enableAutoSizing
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5342761196953066357, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_fontColor32.rgba
|
||||
value: 4294967295
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5972637010007008015, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: icon
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6746304736006806339, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6746304736006806339, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Pivot.y
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6746304736006806339, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6746304736006806339, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6746304736006806339, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_AnchorMin.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6746304736006806339, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6746304736006806339, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 627.1525
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6746304736006806339, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 106.1967
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6746304736006806339, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6746304736006806339, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6746304736006806339, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6746304736006806339, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6746304736006806339, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6746304736006806339, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6746304736006806339, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6746304736006806339, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: -8
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6746304736006806339, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: -666.8
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6746304736006806339, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6746304736006806339, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6746304736006806339, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7905749766136477480, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Type
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7905749766136477480, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Sprite
|
||||
value:
|
||||
objectReference: {fileID: 21300000, guid: 123f05a2a44574111bd629640dbce473, type: 3}
|
||||
- target: {fileID: 7905749766136477480, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Color.b
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7905749766136477480, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Color.g
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7905749766136477480, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Color.r
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7905749766136477480, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Enabled
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7905749766136477480, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_PixelsPerUnitMultiplier
|
||||
value: 1.35
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8001603133226906570, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8001603133226906570, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8001603133226906570, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_AnchorMin.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8001603133226906570, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8001603133226906570, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8001603133226906570, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8001603133226906570, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8001603133226906570, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8201212475682522876, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: UMP
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8201212475682522876, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_IsActive
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 9157385146011294632, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: part 2
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents:
|
||||
- {fileID: 7905749766136477480, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
m_RemovedGameObjects:
|
||||
- {fileID: 808954587397050430, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
- {fileID: 9157385146011294632, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
- {fileID: 2611169328416249915, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
- {fileID: 5972637010007008015, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
--- !u!224 &2652648118269143667 stripped
|
||||
RectTransform:
|
||||
m_CorrespondingSourceObject: {fileID: 6746304736006806339, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
m_PrefabInstance: {fileID: 8741391224511066416}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!114 &3705024337948060229 stripped
|
||||
MonoBehaviour:
|
||||
m_CorrespondingSourceObject: {fileID: 5342761196953066357, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
m_PrefabInstance: {fileID: 8741391224511066416}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 2bc838cbc2e148b3a5e7578d063ccb18, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!114 &6611547390847006331 stripped
|
||||
MonoBehaviour:
|
||||
m_CorrespondingSourceObject: {fileID: 2490286444286461771, guid: 4a90a7a36be6c3249a0612ab1316c8fc, type: 3}
|
||||
m_PrefabInstance: {fileID: 8741391224511066416}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: c9659348afa04bc6bb30eb6900f94b65, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
|
||||
@ -194,6 +194,7 @@ MonoBehaviour:
|
||||
onClick:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
noSound: 0
|
||||
--- !u!1 &5404509939308836076
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -412,6 +413,10 @@ PrefabInstance:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 0}
|
||||
m_Modifications:
|
||||
- target: {fileID: 621257374199314380, guid: 42fecf35a1e774a20a5f0e45c3d3c10e, type: 3}
|
||||
propertyPath: m_IsActive
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2363198712010147430, guid: 42fecf35a1e774a20a5f0e45c3d3c10e, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
@ -597,7 +602,10 @@ MonoBehaviour:
|
||||
- LanguageSelection
|
||||
isPopupAboveTags: 0
|
||||
fadeAlpha: 0.98
|
||||
appearSound: {fileID: 0}
|
||||
disappearSound: {fileID: 0}
|
||||
privacypolicy: {fileID: 0}
|
||||
googleUMPConsent: {fileID: 0}
|
||||
restorePurchase: {fileID: 0}
|
||||
vibrationSlider: {fileID: 6267439442198750998}
|
||||
homeButton: {fileID: 3971681028222562917}
|
||||
|
||||
@ -0,0 +1,23 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 44ad2bed4c494715ba8ad21e150b03ee, type: 3}
|
||||
m_Name: AdsInterstitialSettings
|
||||
m_EditorClassIdentifier:
|
||||
interstitials:
|
||||
- elementName: Interstitial
|
||||
adReference: {fileID: 11400000, guid: f9303f4b583464bc08f45f673b581f90, type: 2}
|
||||
popup: {fileID: 578949463131755950, guid: a9a2cf415d78749059b02eb227bd4ff0, type: 3}
|
||||
showOnOpen: 1
|
||||
showOnClose: 0
|
||||
minLevel: 1
|
||||
maxLevel: 1000
|
||||
frequency: 1
|
||||
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d40017039bee543bd909a2ec0c80c188
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -14,7 +14,7 @@ MonoBehaviour:
|
||||
m_EditorClassIdentifier:
|
||||
adProfiles:
|
||||
- name: Unity ads iOS
|
||||
enable: 1
|
||||
enable: 0
|
||||
testInEditor: 1
|
||||
platforms: 1
|
||||
appId: 5698950
|
||||
@ -33,7 +33,7 @@ MonoBehaviour:
|
||||
showOnOpen: 0
|
||||
showOnClose: 0
|
||||
- name: Unity ads banner ios
|
||||
enable: 1
|
||||
enable: 0
|
||||
testInEditor: 1
|
||||
platforms: 1
|
||||
appId: 5698950
|
||||
@ -46,7 +46,7 @@ MonoBehaviour:
|
||||
showOnOpen: 0
|
||||
showOnClose: 0
|
||||
- name: Unity ads Android
|
||||
enable: 1
|
||||
enable: 0
|
||||
testInEditor: 1
|
||||
platforms: 0
|
||||
appId: 5870065
|
||||
@ -65,7 +65,7 @@ MonoBehaviour:
|
||||
showOnOpen: 0
|
||||
showOnClose: 0
|
||||
- name: Unity ads banner android
|
||||
enable: 1
|
||||
enable: 0
|
||||
testInEditor: 1
|
||||
platforms: 0
|
||||
appId: 5870065
|
||||
@ -116,7 +116,7 @@ MonoBehaviour:
|
||||
showOnOpen: 0
|
||||
showOnClose: 0
|
||||
- name: admob iOS
|
||||
enable: 0
|
||||
enable: 1
|
||||
testInEditor: 1
|
||||
platforms: 1
|
||||
appId: ca-app-pub-1921802893067184~3779034969
|
||||
@ -135,7 +135,7 @@ MonoBehaviour:
|
||||
showOnOpen: 0
|
||||
showOnClose: 0
|
||||
- name: admob Android
|
||||
enable: 0
|
||||
enable: 1
|
||||
testInEditor: 1
|
||||
platforms: 0
|
||||
appId: ca-app-pub-1921802893067184~8049698250
|
||||
@ -154,7 +154,7 @@ MonoBehaviour:
|
||||
showOnOpen: 0
|
||||
showOnClose: 0
|
||||
- name: Admob banner IOS
|
||||
enable: 0
|
||||
enable: 1
|
||||
testInEditor: 1
|
||||
platforms: 1
|
||||
appId: ca-app-pub-1921802893067184~3779034969
|
||||
@ -167,10 +167,10 @@ MonoBehaviour:
|
||||
showOnOpen: 0
|
||||
showOnClose: 0
|
||||
- name: Admob banner android
|
||||
enable: 0
|
||||
enable: 1
|
||||
testInEditor: 1
|
||||
platforms: 0
|
||||
appId: ca-app-pub-1921802893067184~8049698250
|
||||
appId: ca-app-pub-3940256099942544/6300978111
|
||||
adsHandler: {fileID: 11400000, guid: 2115921dfa5e14398a54b0ad2a801cec, type: 2}
|
||||
adElements:
|
||||
- placementId: ca-app-pub-1921802893067184/7055346637
|
||||
|
||||
@ -17,4 +17,5 @@ MonoBehaviour:
|
||||
Lose: 26
|
||||
Back: 60
|
||||
Restart: 32
|
||||
TestLanguage: 10
|
||||
SimulateDuplicate: 16
|
||||
TestLanguageCode: en
|
||||
|
||||
@ -11,7 +11,8 @@
|
||||
"GUID:c98377141161c7746a178fb5cb1af075",
|
||||
"GUID:75469ad4d38634e559750d17036d5f7c",
|
||||
"GUID:b0214a6008ed146ff8f122a6a9c2f6cc",
|
||||
"jp.hadashikick.vcontainer"
|
||||
"jp.hadashikick.vcontainer",
|
||||
"GUID:63a57c8b658089e49a173b0f0c4870a7"
|
||||
],
|
||||
"includePlatforms": [],
|
||||
"excludePlatforms": [],
|
||||
|
||||
@ -0,0 +1,126 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using System.IO;
|
||||
|
||||
namespace WordsToolkit.Scripts.Editor
|
||||
{
|
||||
public class CustomModelPostProcessor : AssetPostprocessor
|
||||
{
|
||||
private static readonly string SOURCE_PATH = "Assets/WordsToolkit/model/custom";
|
||||
private static readonly string TARGET_PATH = "Assets/StreamingAssets/WordConnectGameToolkit/model/custom";
|
||||
|
||||
static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
|
||||
{
|
||||
bool hasCustomModelChanges = false;
|
||||
|
||||
// Check imported assets
|
||||
foreach (string assetPath in importedAssets)
|
||||
{
|
||||
if (IsCustomModelFile(assetPath))
|
||||
{
|
||||
hasCustomModelChanges = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Check moved assets
|
||||
if (!hasCustomModelChanges)
|
||||
{
|
||||
foreach (string assetPath in movedAssets)
|
||||
{
|
||||
if (IsCustomModelFile(assetPath))
|
||||
{
|
||||
hasCustomModelChanges = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (hasCustomModelChanges)
|
||||
{
|
||||
CopyCustomModelsToStreamingAssets();
|
||||
}
|
||||
}
|
||||
|
||||
private static bool IsCustomModelFile(string assetPath)
|
||||
{
|
||||
return assetPath.StartsWith(SOURCE_PATH) &&
|
||||
(assetPath.EndsWith(".bin") || assetPath.EndsWith(".json") || assetPath.EndsWith(".txt"));
|
||||
}
|
||||
|
||||
private static void CopyCustomModelsToStreamingAssets()
|
||||
{
|
||||
if (!Directory.Exists(SOURCE_PATH))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Create target directory
|
||||
Directory.CreateDirectory(TARGET_PATH);
|
||||
|
||||
// Get all custom model files
|
||||
string[] files = Directory.GetFiles(SOURCE_PATH, "*", SearchOption.AllDirectories);
|
||||
|
||||
foreach (string sourceFile in files)
|
||||
{
|
||||
// Skip .meta files
|
||||
if (sourceFile.EndsWith(".meta"))
|
||||
continue;
|
||||
|
||||
// Calculate relative path from source directory
|
||||
string relativePath = Path.GetRelativePath(SOURCE_PATH, sourceFile);
|
||||
string targetFile = Path.Combine(TARGET_PATH, relativePath);
|
||||
|
||||
// Create target subdirectory if needed
|
||||
string targetDir = Path.GetDirectoryName(targetFile);
|
||||
if (!Directory.Exists(targetDir))
|
||||
{
|
||||
Directory.CreateDirectory(targetDir);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// Copy file if it doesn't exist or is newer
|
||||
if (!File.Exists(targetFile) || File.GetLastWriteTime(sourceFile) > File.GetLastWriteTime(targetFile))
|
||||
{
|
||||
File.Copy(sourceFile, targetFile, true);
|
||||
Debug.Log($"[CustomModelPostProcessor] Copied {relativePath} to StreamingAssets");
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.LogError($"[CustomModelPostProcessor] Failed to copy {sourceFile}: {e.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
// Refresh the asset database so Unity sees the new files
|
||||
AssetDatabase.Refresh();
|
||||
}
|
||||
|
||||
[MenuItem("WordToolkit/Copy Custom Models to StreamingAssets")]
|
||||
private static void ManualCopyCustomModels()
|
||||
{
|
||||
CopyCustomModelsToStreamingAssets();
|
||||
Debug.Log("[CustomModelPostProcessor] Manual copy completed");
|
||||
}
|
||||
|
||||
[MenuItem("WordToolkit/Clean Custom Models from StreamingAssets")]
|
||||
private static void CleanCustomModelsFromStreamingAssets()
|
||||
{
|
||||
if (Directory.Exists(TARGET_PATH))
|
||||
{
|
||||
try
|
||||
{
|
||||
Directory.Delete(TARGET_PATH, true);
|
||||
Debug.Log("[CustomModelPostProcessor] Cleaned custom models from StreamingAssets");
|
||||
AssetDatabase.Refresh();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.LogError($"[CustomModelPostProcessor] Failed to clean StreamingAssets: {e.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1a1b585689cce4771abd8ec25020f1a9
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -84,7 +84,7 @@ namespace WordsToolkit.Scripts.Editor
|
||||
[MenuItem( nameof(WordConnect) + "/Settings/Gift settings")]
|
||||
public static void GiftSettings()
|
||||
{
|
||||
Selection.activeObject = AssetDatabase.LoadMainAssetAtPath(WordConnectPath + "/Resources/Settings/GiftSettings.asset");
|
||||
Selection.activeObject = AssetDatabase.LoadMainAssetAtPath(WordConnectPath + "/Resources/Settings/GiftsSettings.asset");
|
||||
}
|
||||
|
||||
[MenuItem( nameof(WordConnect) + "/Scenes/Main scene &1", priority = 0)]
|
||||
|
||||
@ -34,6 +34,7 @@ namespace WordsToolkit.Scripts.Editor.GUI
|
||||
var root = new VisualElement();
|
||||
|
||||
root.Add(new PropertyField(serializedObject.FindProperty("noSound")));
|
||||
root.Add(new PropertyField(serializedObject.FindProperty("isRewarded")));
|
||||
root.Add(new PropertyField(serializedObject.FindProperty("overrideClickSound")));
|
||||
root.Add(new PropertyField(serializedObject.FindProperty("overrideAnimatorController")));
|
||||
|
||||
|
||||
93
Assets/WordConnectGameToolkit/Scripts/Editor/PopupPreview.cs
Normal file
93
Assets/WordConnectGameToolkit/Scripts/Editor/PopupPreview.cs
Normal file
@ -0,0 +1,93 @@
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
public class PopupPreview : EditorWindow
|
||||
{
|
||||
private GameObject[] prefabs;
|
||||
private int currentIndex = 0;
|
||||
private GameObject currentInstance;
|
||||
|
||||
[MenuItem("Tools/Prefab Batch Viewer")]
|
||||
public static void ShowWindow()
|
||||
{
|
||||
GetWindow<PopupPreview>("Prefab Batch Viewer");
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
string path = "Assets/WordConnectGameToolkit/Resources/Popups";
|
||||
string[] prefabPaths = Directory.GetFiles(path, "*.prefab", SearchOption.AllDirectories);
|
||||
prefabs = prefabPaths
|
||||
.Select(p => AssetDatabase.LoadAssetAtPath<GameObject>(p))
|
||||
.Where(p => p != null)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
private void OnGUI()
|
||||
{
|
||||
if (prefabs == null || prefabs.Length == 0)
|
||||
{
|
||||
EditorGUILayout.LabelField("No prefabs found in Resources/Popups.");
|
||||
return;
|
||||
}
|
||||
|
||||
EditorGUILayout.LabelField($"Prefab {currentIndex + 1}/{prefabs.Length}", EditorStyles.boldLabel);
|
||||
EditorGUILayout.ObjectField("Current Prefab", prefabs[currentIndex], typeof(GameObject), false);
|
||||
|
||||
GUILayout.Space(10);
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
if (GUILayout.Button("Previous"))
|
||||
{
|
||||
ShowPreviousPrefab();
|
||||
}
|
||||
if (GUILayout.Button("Next"))
|
||||
{
|
||||
ShowNextPrefab();
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
GUILayout.Space(10);
|
||||
|
||||
if (currentInstance == null)
|
||||
{
|
||||
if (GUILayout.Button("Instantiate in Scene"))
|
||||
{
|
||||
InstantiateCurrentPrefab();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (GUILayout.Button("Remove Instance"))
|
||||
{
|
||||
DestroyImmediate(currentInstance);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void ShowPreviousPrefab()
|
||||
{
|
||||
currentIndex = (currentIndex - 1 + prefabs.Length) % prefabs.Length;
|
||||
InstantiateCurrentPrefab();
|
||||
}
|
||||
|
||||
private void ShowNextPrefab()
|
||||
{
|
||||
currentIndex = (currentIndex + 1) % prefabs.Length;
|
||||
InstantiateCurrentPrefab();
|
||||
}
|
||||
|
||||
private void InstantiateCurrentPrefab()
|
||||
{
|
||||
if (currentInstance != null)
|
||||
{
|
||||
DestroyImmediate(currentInstance);
|
||||
}
|
||||
|
||||
currentInstance = (GameObject)PrefabUtility.InstantiatePrefab(prefabs[currentIndex]);
|
||||
currentInstance.name = prefabs[currentIndex].name + "_Preview";
|
||||
Selection.activeGameObject = currentInstance;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 599a70f1dde3c4f8b879a52397f2416e
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -23,6 +23,7 @@ namespace WordsToolkit.Scripts.Editor
|
||||
private static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
|
||||
{
|
||||
CheckDefines("Assets/GoogleMobileAds", "ADMOB");
|
||||
CheckUMPAvailable();
|
||||
CheckDefines("Assets/FacebookSDK", "FACEBOOK");
|
||||
CheckDefines("Assets/PlayFabSDK", "PLAYFAB");
|
||||
CheckDefines("Assets/GameSparks", "GAMESPARKS");
|
||||
@ -41,6 +42,18 @@ namespace WordsToolkit.Scripts.Editor
|
||||
}
|
||||
}
|
||||
|
||||
private static void CheckUMPAvailable()
|
||||
{
|
||||
if (( Directory.Exists("Assets/GoogleMobileAds")))
|
||||
{
|
||||
DefineSymbolsUtils.AddSymbol("UMP_AVAILABLE");
|
||||
}
|
||||
else
|
||||
{
|
||||
DefineSymbolsUtils.DeleteSymbol("UMP_AVAILABLE");
|
||||
}
|
||||
}
|
||||
|
||||
public static void CheckIronsourceFolder()
|
||||
{
|
||||
var str = "Assets/LevelPlay";
|
||||
|
||||
@ -34,7 +34,9 @@ namespace WordsToolkit.Scripts.GUI.Buttons.Boosts
|
||||
|
||||
private CanvasGroup canvasGroup;
|
||||
private bool isActive;
|
||||
private bool isAnimating;
|
||||
|
||||
protected override bool ShouldShowRewarded() => isRewarded && resourseToHoldBoost.GetValue() == 0;
|
||||
|
||||
protected override void OnEnable()
|
||||
{
|
||||
@ -69,6 +71,11 @@ namespace WordsToolkit.Scripts.GUI.Buttons.Boosts
|
||||
priceObject.gameObject.SetActive(false);
|
||||
countText.text = resourseToHoldBoost.GetValue().ToString();
|
||||
}
|
||||
else if (ShouldShowRewarded())
|
||||
{
|
||||
countTextObject.gameObject.SetActive(false);
|
||||
priceObject.gameObject.SetActive(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
countTextObject.gameObject.SetActive(false);
|
||||
@ -79,6 +86,12 @@ namespace WordsToolkit.Scripts.GUI.Buttons.Boosts
|
||||
|
||||
protected void OnClick()
|
||||
{
|
||||
// Prevent clicks during animation
|
||||
if (isAnimating)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (isActive)
|
||||
{
|
||||
Refund();
|
||||
@ -89,6 +102,10 @@ namespace WordsToolkit.Scripts.GUI.Buttons.Boosts
|
||||
{
|
||||
ActivateBoost();
|
||||
}
|
||||
else if (ShouldShowRewarded())
|
||||
{
|
||||
return;
|
||||
}
|
||||
// If not, consume from the regular resource
|
||||
else if (resourceManager.ConsumeWithEffects(resourceToPay, count))
|
||||
{
|
||||
@ -103,8 +120,16 @@ namespace WordsToolkit.Scripts.GUI.Buttons.Boosts
|
||||
UpdatePriceDisplay();
|
||||
}
|
||||
|
||||
protected override void ExecuteEvent()
|
||||
{
|
||||
if(isRewarded)
|
||||
resourseToHoldBoost.Add(1);
|
||||
base.ExecuteEvent();
|
||||
}
|
||||
|
||||
protected virtual void ActivateBoost(bool hideButtons = true)
|
||||
{
|
||||
isAnimating = true;
|
||||
UpdatePriceDisplay();
|
||||
if(hideButtons)
|
||||
buttonViewController.HideOtherButtons(this);
|
||||
@ -117,6 +142,7 @@ namespace WordsToolkit.Scripts.GUI.Buttons.Boosts
|
||||
protected virtual void DeactivateBoost()
|
||||
{
|
||||
isActive = false;
|
||||
isAnimating = false;
|
||||
buttonViewController.ShowButtons();
|
||||
waves.Clear();
|
||||
waves.Stop();
|
||||
|
||||
@ -17,6 +17,8 @@ using UnityEngine.UI;
|
||||
using VContainer;
|
||||
using WordsToolkit.Scripts.Audio;
|
||||
using WordsToolkit.Scripts.Enums;
|
||||
using WordsToolkit.Scripts.Popups.Reward;
|
||||
using WordsToolkit.Scripts.Services.Ads.AdUnits;
|
||||
using WordsToolkit.Scripts.System;
|
||||
using WordsToolkit.Scripts.System.Haptic;
|
||||
|
||||
@ -32,31 +34,48 @@ namespace WordsToolkit.Scripts.GUI.Buttons
|
||||
public new ButtonClickedEvent onClick;
|
||||
private new Animator animator;
|
||||
public bool noSound;
|
||||
public bool isRewarded;
|
||||
private RewardedButtonHandler handler;
|
||||
private PointerEventData currentEventData;
|
||||
|
||||
private static bool blockInput;
|
||||
|
||||
protected virtual bool ShouldShowRewarded() => isRewarded;
|
||||
|
||||
public static CustomButton latestClickedButton;
|
||||
private IAudioService audioService;
|
||||
private IObjectResolver objectResolver;
|
||||
[Inject]
|
||||
public void Construct(IAudioService audioService)
|
||||
public void Construct(IAudioService audioService, IObjectResolver objectResolver)
|
||||
{
|
||||
this.audioService = audioService;
|
||||
this.objectResolver = objectResolver;
|
||||
}
|
||||
|
||||
protected override void OnEnable()
|
||||
{
|
||||
isClicked = false;
|
||||
// run only in runtime
|
||||
if (ShouldShowRewarded() && !GetComponent<RewardedButtonHandler>() && Application.isPlaying)
|
||||
{
|
||||
handler = gameObject.AddComponent<RewardedButtonHandler>();
|
||||
objectResolver.Inject(handler);
|
||||
var adReference = UnityEditor.AssetDatabase.LoadAssetAtPath<AdReference>("Assets/WordConnectGameToolkit/Prefabs/ScriptableAds/AdsTypes/Rewarded.asset");
|
||||
handler.adReference = adReference;
|
||||
handler.onRewardedAdComplete = new UnityEngine.Events.UnityEvent();
|
||||
handler.onRewardedAdComplete.AddListener(ExecuteEvent);
|
||||
}
|
||||
if (Application.isEditor)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
base.OnEnable();
|
||||
animator = GetComponent<Animator>();
|
||||
if (overrideAnimatorController != null)
|
||||
{
|
||||
animator.runtimeAnimatorController = overrideAnimatorController;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public override void OnPointerClick(PointerEventData eventData)
|
||||
@ -66,6 +85,17 @@ namespace WordsToolkit.Scripts.GUI.Buttons
|
||||
return;
|
||||
}
|
||||
|
||||
currentEventData = eventData;
|
||||
|
||||
if (ShouldShowRewarded())
|
||||
{
|
||||
if (handler != null)
|
||||
{
|
||||
handler.ShowRewardedAd();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (transition != Transition.Animation)
|
||||
{
|
||||
Pressed();
|
||||
@ -75,7 +105,6 @@ namespace WordsToolkit.Scripts.GUI.Buttons
|
||||
if(!noSound)
|
||||
audioService.PlayClick(overrideClickSound);
|
||||
HapticFeedback.TriggerHapticFeedback(HapticFeedback.HapticForce.Light);
|
||||
// Start cooldown
|
||||
if (gameObject.activeInHierarchy)
|
||||
{
|
||||
StartCoroutine(Cooldown());
|
||||
@ -91,8 +120,23 @@ namespace WordsToolkit.Scripts.GUI.Buttons
|
||||
return;
|
||||
}
|
||||
latestClickedButton = this;
|
||||
if (ShouldShowRewarded())
|
||||
{
|
||||
if (handler != null)
|
||||
{
|
||||
handler.ShowRewardedAd();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
ExecuteEvent();
|
||||
}
|
||||
|
||||
protected virtual void ExecuteEvent()
|
||||
{
|
||||
onClick?.Invoke();
|
||||
EventManager.GetEvent<CustomButton>(EGameEvent.ButtonClicked).Invoke(this);
|
||||
base.onClick?.Invoke();
|
||||
}
|
||||
|
||||
private IEnumerator Cooldown()
|
||||
|
||||
@ -0,0 +1,17 @@
|
||||
using UnityEngine;
|
||||
using WordsToolkit.Scripts.Settings;
|
||||
|
||||
namespace WordsToolkit.Scripts.GUI.Labels
|
||||
{
|
||||
public class IAPDisabler : MonoBehaviour
|
||||
{
|
||||
private void OnEnable()
|
||||
{
|
||||
var gameSettings = Resources.Load<GameSettings>("Settings/GameSettings");
|
||||
if (gameSettings != null && !gameSettings.enableInApps)
|
||||
{
|
||||
gameObject.SetActive(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c9c6b14262f434e07ad593f7b28fbfba
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -10,6 +10,7 @@
|
||||
// // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// // THE SOFTWARE.
|
||||
|
||||
using DG.Tweening;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using VContainer;
|
||||
@ -65,11 +66,7 @@ namespace WordsToolkit.Scripts.GUI
|
||||
|
||||
public void ShowLanguageSelector()
|
||||
{
|
||||
menuManager.CloseAllPopups();
|
||||
menuManager.ShowPopup<LanguageSelectionGame>(null, result =>
|
||||
{
|
||||
UpdateText();
|
||||
});
|
||||
menuManager.ShowPopup<LanguageSelectionGame>(null, result => { UpdateText(); });
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -23,12 +23,6 @@ namespace WordsToolkit.Scripts.GUI.Tutorials
|
||||
{
|
||||
public class TutorialWordSubstitution : TutorialPopupBase
|
||||
{
|
||||
[Inject]
|
||||
protected LevelManager levelManager;
|
||||
|
||||
[Inject]
|
||||
protected GameManager gameManager;
|
||||
|
||||
[SerializeField]
|
||||
private GameObject hand;
|
||||
|
||||
|
||||
@ -28,6 +28,7 @@ namespace WordsToolkit.Scripts.Gameplay
|
||||
private WordSelectionManager wordSelectionManager;
|
||||
private bool isSelected = false;
|
||||
private Color color;
|
||||
private string originalLetter; // Store the original letter for validation
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
@ -74,12 +75,13 @@ namespace WordsToolkit.Scripts.Gameplay
|
||||
|
||||
public string GetLetter()
|
||||
{
|
||||
return letterText.text;
|
||||
return originalLetter ?? letterText.text;
|
||||
}
|
||||
|
||||
public void SetText(string toString)
|
||||
{
|
||||
letterText.text = toString.ToUpper();
|
||||
originalLetter = toString; // Store the original letter
|
||||
letterText.text = toString.ToUpper(); // Display in uppercase
|
||||
}
|
||||
|
||||
public void SetColor(Color color)
|
||||
|
||||
@ -523,7 +523,7 @@ namespace WordsToolkit.Scripts.Gameplay.Managers
|
||||
if (string.IsNullOrEmpty(word))
|
||||
return false;
|
||||
|
||||
if (!wordValidator.IsWordKnown(word.ToLower(), gameStateManager.CurrentLanguage))
|
||||
if (!wordValidator.IsWordKnown(word, gameStateManager.CurrentLanguage))
|
||||
return false;
|
||||
|
||||
bool wasOpened = false;
|
||||
|
||||
@ -37,7 +37,6 @@ namespace WordsToolkit.Scripts.Gameplay
|
||||
private Color[] openColors = new Color[3];
|
||||
|
||||
private bool isSelected = false;
|
||||
private int wordNumber = -1;
|
||||
private bool isOpen = false;
|
||||
|
||||
[Header("Special Item")]
|
||||
@ -321,6 +320,8 @@ namespace WordsToolkit.Scripts.Gameplay
|
||||
// Only respond if the tile is selectable and closed
|
||||
if (!isOpen && levelManager != null && levelManager.hammerMode)
|
||||
{
|
||||
// Immediately disable hammer mode to prevent multiple uses
|
||||
levelManager.hammerMode = false;
|
||||
// Instead of opening immediately, play hammer animation first
|
||||
PlayHammerAnimationAndOpen();
|
||||
}
|
||||
|
||||
@ -42,7 +42,6 @@ namespace WordsToolkit.Scripts.Gameplay
|
||||
private float idleTimer = 0f;
|
||||
private Vector2 lastPosition;
|
||||
public Image cursorImage; // Reference to cursor image
|
||||
private bool isCursorVisible = true;
|
||||
private float targetAlpha;
|
||||
private float currentAlpha;
|
||||
|
||||
|
||||
@ -66,7 +66,6 @@ namespace WordsToolkit.Scripts.Gameplay
|
||||
private CanvasGroup panelCanvasGroup;
|
||||
|
||||
[Header("UI References")]
|
||||
[SerializeField] private float characterSpacing = 30f; // Spacing between characters
|
||||
public Image backgroundSelectedWord; // Reference to the background image
|
||||
[SerializeField]
|
||||
private TextMeshProUGUI selectedWordText;
|
||||
@ -463,7 +462,7 @@ namespace WordsToolkit.Scripts.Gameplay
|
||||
if (selectedWordText != null)
|
||||
{
|
||||
selectedWordText.color = new Color(selectedWordText.color.r, selectedWordText.color.g, selectedWordText.color.b, 1f);
|
||||
selectedWordText.text = GetSelectedWord();
|
||||
selectedWordText.text = GetSelectedWord().ToUpper();
|
||||
UpdateHorizontalLayout(layout);
|
||||
}
|
||||
}
|
||||
|
||||
@ -33,7 +33,6 @@ namespace WordsToolkit.Scripts.Gameplay.WordValidator
|
||||
if (string.IsNullOrEmpty(word))
|
||||
return false;
|
||||
|
||||
word = word.ToLower();
|
||||
return (modelController != null && modelController.IsWordKnown(word, currentLanguage)) ||
|
||||
(customWordRepository != null && customWordRepository.ContainsWord(word));
|
||||
}
|
||||
|
||||
@ -721,17 +721,27 @@ namespace WordsToolkit.Scripts.Levels.Editor
|
||||
// Handle selection from LevelHierarchyTreeView
|
||||
if (selectedItem != null && selectedItem.type == LevelHierarchyItem.ItemType.Level && selectedItem.levelAsset != null)
|
||||
{
|
||||
// Try to find any available language data in the level
|
||||
string foundLanguage = FindAvailableLanguage(selectedItem.levelAsset);
|
||||
// Use the same language selection logic as the "Open Grid" button
|
||||
// This preserves the user's currently selected language tab
|
||||
string languageCode = LevelEditorUtility.GetLanguageCodeForLevel(selectedItem.levelAsset);
|
||||
|
||||
if (!string.IsNullOrEmpty(foundLanguage))
|
||||
if (!string.IsNullOrEmpty(languageCode))
|
||||
{
|
||||
SetCurrentLevel(selectedItem.levelAsset, foundLanguage);
|
||||
SetCurrentLevel(selectedItem.levelAsset, languageCode);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Set the level anyway but with a default language
|
||||
SetCurrentLevel(selectedItem.levelAsset, "en");
|
||||
// Fallback: try to find any available language data in the level
|
||||
string foundLanguage = FindAvailableLanguage(selectedItem.levelAsset);
|
||||
if (!string.IsNullOrEmpty(foundLanguage))
|
||||
{
|
||||
SetCurrentLevel(selectedItem.levelAsset, foundLanguage);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Set the level anyway but with a default language
|
||||
SetCurrentLevel(selectedItem.levelAsset, "en");
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (selectedItem == null || selectedItem.type != LevelHierarchyItem.ItemType.Level)
|
||||
@ -767,13 +777,25 @@ namespace WordsToolkit.Scripts.Levels.Editor
|
||||
Level latestLevel = AssetDatabase.LoadAssetAtPath<Level>(path);
|
||||
if (latestLevel != null)
|
||||
{
|
||||
string foundLanguage = FindAvailableLanguage(latestLevel);
|
||||
if (!string.IsNullOrEmpty(foundLanguage))
|
||||
// Use the same language selection logic as the rest of the system
|
||||
string languageCode = LevelEditorUtility.GetLanguageCodeForLevel(latestLevel);
|
||||
if (!string.IsNullOrEmpty(languageCode))
|
||||
{
|
||||
SetCurrentLevel(latestLevel, foundLanguage);
|
||||
Debug.Log($"CrosswordGridWindow: Loaded latest level '{latestLevel.name}' with language '{foundLanguage}' from EditorPrefs");
|
||||
SetCurrentLevel(latestLevel, languageCode);
|
||||
Debug.Log($"CrosswordGridWindow: Loaded latest level '{latestLevel.name}' with language '{languageCode}' from EditorPrefs");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fallback
|
||||
string foundLanguage = FindAvailableLanguage(latestLevel);
|
||||
if (!string.IsNullOrEmpty(foundLanguage))
|
||||
{
|
||||
SetCurrentLevel(latestLevel, foundLanguage);
|
||||
Debug.Log($"CrosswordGridWindow: Loaded latest level '{latestLevel.name}' with fallback language '{foundLanguage}' from EditorPrefs");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -784,17 +806,26 @@ namespace WordsToolkit.Scripts.Levels.Editor
|
||||
Level selectedLevel = Selection.activeObject as Level;
|
||||
if (selectedLevel != null)
|
||||
{
|
||||
// Try to find any available language data in the level
|
||||
string foundLanguage = FindAvailableLanguage(selectedLevel);
|
||||
|
||||
if (!string.IsNullOrEmpty(foundLanguage))
|
||||
// Use the same language selection logic as the rest of the system
|
||||
string languageCode = LevelEditorUtility.GetLanguageCodeForLevel(selectedLevel);
|
||||
if (!string.IsNullOrEmpty(languageCode))
|
||||
{
|
||||
SetCurrentLevel(selectedLevel, foundLanguage);
|
||||
Debug.Log($"CrosswordGridWindow: Loaded level '{selectedLevel.name}' with language '{foundLanguage}' from project selection");
|
||||
SetCurrentLevel(selectedLevel, languageCode);
|
||||
Debug.Log($"CrosswordGridWindow: Loaded level '{selectedLevel.name}' with language '{languageCode}' from project selection");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning($"Level '{selectedLevel.name}' has no language data available.");
|
||||
// Fallback
|
||||
string foundLanguage = FindAvailableLanguage(selectedLevel);
|
||||
if (!string.IsNullOrEmpty(foundLanguage))
|
||||
{
|
||||
SetCurrentLevel(selectedLevel, foundLanguage);
|
||||
Debug.Log($"CrosswordGridWindow: Loaded level '{selectedLevel.name}' with fallback language '{foundLanguage}' from project selection");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning($"Level '{selectedLevel.name}' has no language data available.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -823,23 +854,30 @@ namespace WordsToolkit.Scripts.Levels.Editor
|
||||
|
||||
private string FindAvailableLanguage(Level level)
|
||||
{
|
||||
if (level == null) return null;
|
||||
|
||||
// Try common language codes in order of preference
|
||||
string[] languageCodes = { "en", "eng", "english", "en-US", "en-GB", "es", "fr", "de", "ru", "zh" };
|
||||
|
||||
foreach (string code in languageCodes)
|
||||
if (level == null || level.languages == null || level.languages.Count == 0)
|
||||
return null;
|
||||
|
||||
// First, try to use the currently selected language tab (same as LevelEditorUtility.GetLanguageCodeForLevel)
|
||||
int selectedTabIndex = EditorPrefs.GetInt("WordsToolkit_SelectedLanguageTab", 0);
|
||||
if (selectedTabIndex >= 0 && selectedTabIndex < level.languages.Count)
|
||||
{
|
||||
var languageData = level.GetLanguageData(code);
|
||||
if (languageData != null)
|
||||
var selectedLanguage = level.languages[selectedTabIndex];
|
||||
if (selectedLanguage != null && !string.IsNullOrEmpty(selectedLanguage.language))
|
||||
{
|
||||
return code;
|
||||
return selectedLanguage.language;
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback: return the first available language
|
||||
for (int i = 0; i < level.languages.Count; i++)
|
||||
{
|
||||
var languageData = level.languages[i];
|
||||
if (languageData != null && !string.IsNullOrEmpty(languageData.language))
|
||||
{
|
||||
return languageData.language;
|
||||
}
|
||||
}
|
||||
|
||||
// If no common languages found, this would require reflection or other means
|
||||
// to get all available languages from the Level object
|
||||
// For now, we'll return null and let the user manually specify
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -851,19 +889,28 @@ namespace WordsToolkit.Scripts.Levels.Editor
|
||||
Level selectedLevel = Selection.activeObject as Level;
|
||||
if (selectedLevel != null)
|
||||
{
|
||||
// Try to find any available language data in the level
|
||||
string foundLanguage = FindAvailableLanguage(selectedLevel);
|
||||
|
||||
if (!string.IsNullOrEmpty(foundLanguage))
|
||||
// Use the same language selection logic as the rest of the system
|
||||
string languageCode = LevelEditorUtility.GetLanguageCodeForLevel(selectedLevel);
|
||||
if (!string.IsNullOrEmpty(languageCode))
|
||||
{
|
||||
SetCurrentLevel(selectedLevel, foundLanguage);
|
||||
Debug.Log($"Loaded level: {selectedLevel.name} with language: {foundLanguage}");
|
||||
SetCurrentLevel(selectedLevel, languageCode);
|
||||
Debug.Log($"Loaded level: {selectedLevel.name} with language: {languageCode}");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Set the level anyway but with a default language
|
||||
SetCurrentLevel(selectedLevel, "en");
|
||||
Debug.LogWarning($"Level '{selectedLevel.name}' has no language data. Using default language 'en'.");
|
||||
// Fallback: try to find any available language data in the level
|
||||
string foundLanguage = FindAvailableLanguage(selectedLevel);
|
||||
if (!string.IsNullOrEmpty(foundLanguage))
|
||||
{
|
||||
SetCurrentLevel(selectedLevel, foundLanguage);
|
||||
Debug.Log($"Loaded level: {selectedLevel.name} with fallback language: {foundLanguage}");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Set the level anyway but with a default language
|
||||
SetCurrentLevel(selectedLevel, "en");
|
||||
Debug.LogWarning($"Level '{selectedLevel.name}' has no language data. Using default language 'en'.");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -1023,148 +1070,142 @@ namespace WordsToolkit.Scripts.Levels.Editor
|
||||
if (_currentLevel == null) return;
|
||||
|
||||
var serializedObject = new SerializedObject(_currentLevel);
|
||||
|
||||
|
||||
// Bind letters field (TextField with label)
|
||||
var lettersField = paletteRoot.Q<TextField>("letters-field");
|
||||
if (lettersField != null)
|
||||
var initialValue = languageData.letters ?? "";
|
||||
lettersField.RegisterValueChangedCallback(evt =>
|
||||
{
|
||||
var initialValue = languageData.letters ?? "";
|
||||
lettersField.RegisterValueChangedCallback(evt =>
|
||||
// Don't trigger on initial setup (when previous value is empty and new value matches initial data)
|
||||
if (evt.newValue != evt.previousValue &&
|
||||
!(string.IsNullOrEmpty(evt.previousValue) && evt.newValue == initialValue))
|
||||
{
|
||||
// Don't trigger on initial setup (when previous value is empty and new value matches initial data)
|
||||
if (evt.newValue != evt.previousValue &&
|
||||
!(string.IsNullOrEmpty(evt.previousValue) && evt.newValue == initialValue))
|
||||
// Record undo before changing letters
|
||||
if (_currentLevel != null)
|
||||
{
|
||||
// Record undo before changing letters
|
||||
if (_currentLevel != null)
|
||||
// Ensure grid data is serialized before recording undo
|
||||
var langData = _currentLevel.GetLanguageData(_currentLanguageCode);
|
||||
if (langData?.crosswordData != null)
|
||||
{
|
||||
// Ensure grid data is serialized before recording undo
|
||||
var langData = _currentLevel.GetLanguageData(_currentLanguageCode);
|
||||
if (langData?.crosswordData != null)
|
||||
{
|
||||
langData.crosswordData.SerializeGrid();
|
||||
}
|
||||
|
||||
Undo.RecordObject(_currentLevel, "Change Letters");
|
||||
}
|
||||
|
||||
languageData.letters = evt.newValue;
|
||||
var lettersLength = paletteRoot.Q<IntegerField>("letters-length");
|
||||
if (lettersLength != null)
|
||||
{
|
||||
lettersLength.value = evt.newValue?.Length ?? 0;
|
||||
langData.crosswordData.SerializeGrid();
|
||||
}
|
||||
|
||||
_currentLevel.letters = evt.newValue?.Length ?? 0;
|
||||
EditorUtility.SetDirty(_currentLevel);
|
||||
|
||||
// Generate new words for the updated letters
|
||||
if (!string.IsNullOrEmpty(evt.newValue))
|
||||
{
|
||||
LevelDataEditor.UpdateAvailableWordsForLevel(_currentLevel);
|
||||
RefreshPreviewData();
|
||||
}
|
||||
|
||||
UpdateGridDisplay();
|
||||
Undo.RecordObject(_currentLevel, "Change Letters");
|
||||
}
|
||||
});
|
||||
lettersField.value = initialValue;
|
||||
}
|
||||
|
||||
languageData.letters = evt.newValue;
|
||||
var lettersLength = paletteRoot.Q<IntegerField>("letters-length");
|
||||
if (lettersLength != null)
|
||||
{
|
||||
lettersLength.value = evt.newValue?.Length ?? 0;
|
||||
}
|
||||
|
||||
_currentLevel.letters = evt.newValue?.Length ?? 0;
|
||||
EditorUtility.SetDirty(_currentLevel);
|
||||
|
||||
// Generate new words for the updated letters
|
||||
if (!string.IsNullOrEmpty(evt.newValue))
|
||||
{
|
||||
LevelDataEditor.UpdateAvailableWordsForLevel(_currentLevel);
|
||||
RefreshPreviewData();
|
||||
}
|
||||
|
||||
UpdateGridDisplay();
|
||||
}
|
||||
});
|
||||
lettersField.value = initialValue;
|
||||
|
||||
// Bind letters length field
|
||||
var lettersLength = paletteRoot.Q<TextField>("letters-length");
|
||||
if (lettersLength != null)
|
||||
lettersLength.value = _currentLevel.letters.ToString();
|
||||
lettersLength.RegisterValueChangedCallback(evt =>
|
||||
{
|
||||
lettersLength.value = _currentLevel.letters.ToString();
|
||||
lettersLength.RegisterValueChangedCallback(evt =>
|
||||
if (int.TryParse(evt.newValue, out int value))
|
||||
{
|
||||
if (int.TryParse(evt.newValue, out int value))
|
||||
{
|
||||
_currentLevel.letters = value;
|
||||
EditorUtility.SetDirty(_currentLevel);
|
||||
EditorPrefs.SetInt("WordsToolkit_LettersAmount", value);
|
||||
}
|
||||
});
|
||||
}
|
||||
_currentLevel.letters = value;
|
||||
EditorUtility.SetDirty(_currentLevel);
|
||||
EditorPrefs.SetInt("WordsToolkit_LettersAmount", value);
|
||||
}
|
||||
});
|
||||
|
||||
var generateLettersCheck = paletteRoot.Q<Toggle>("generate-letters-check");
|
||||
generateLettersCheck.value = EditorPrefs.GetBool("WordsToolkit_GenerateLetters", true);
|
||||
generateLettersCheck.RegisterValueChangedCallback(evt => {
|
||||
if (_currentLevel != null)
|
||||
{
|
||||
EditorUtility.SetDirty(_currentLevel);
|
||||
EditorPrefs.SetBool("WordsToolkit_GenerateLetters", evt.newValue);
|
||||
}
|
||||
});
|
||||
// Bind generate button
|
||||
var generateButton = paletteRoot.Q<Button>("generate-button");
|
||||
if (generateButton != null)
|
||||
{
|
||||
generateButton.clicked += () => {
|
||||
if (_currentLevel != null && languageData != null)
|
||||
generateButton.clicked += () => {
|
||||
if (_currentLevel != null && languageData != null)
|
||||
{
|
||||
// Record undo before generating new letters
|
||||
if (_currentLevel != null)
|
||||
{
|
||||
// Record undo before generating new letters
|
||||
if (_currentLevel != null)
|
||||
// Ensure grid data is serialized before recording undo
|
||||
var langData = _currentLevel.GetLanguageData(_currentLanguageCode);
|
||||
if (langData?.crosswordData != null)
|
||||
{
|
||||
// Ensure grid data is serialized before recording undo
|
||||
var langData = _currentLevel.GetLanguageData(_currentLanguageCode);
|
||||
if (langData?.crosswordData != null)
|
||||
{
|
||||
langData.crosswordData.SerializeGrid();
|
||||
}
|
||||
|
||||
Undo.RecordObject(_currentLevel, "Generate Random Letters");
|
||||
langData.crosswordData.SerializeGrid();
|
||||
}
|
||||
|
||||
var modelController = EditorScope.Resolve<IModelController>();
|
||||
string letters = LevelEditorServices.GenerateRandomLetters(languageData, languageData.wordsAmount, _currentLevel.letters);
|
||||
languageData.letters = letters;
|
||||
|
||||
// Update the letters field in the UI
|
||||
if (lettersField != null) lettersField.value = languageData.letters;
|
||||
if (lettersLength != null) lettersLength.value = (languageData.letters?.Length ?? 0).ToString();
|
||||
|
||||
languageData.words = new string[0];
|
||||
EditorUtility.SetDirty(_currentLevel);
|
||||
LevelEditorServices.GenerateAvailableWords(_currentLevel, modelController, languageData);
|
||||
UpdateCrossword(_currentLevel, languageData);
|
||||
LevelDataEditor.NotifyWordsListNeedsUpdate(_currentLevel, languageData.language);
|
||||
|
||||
RefreshPreviewData();
|
||||
UpdateLetterPalette();
|
||||
UpdateGridDisplay();
|
||||
UpdateStatusBar();
|
||||
|
||||
|
||||
Undo.RecordObject(_currentLevel, "Generate Random Letters");
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
var modelController = EditorScope.Resolve<IModelController>();
|
||||
string letters = LevelEditorServices.GenerateRandomLetters(languageData, languageData.wordsAmount, _currentLevel.letters, generateLettersCheck.value );
|
||||
languageData.letters = letters;
|
||||
|
||||
// Update the letters field in the UI
|
||||
if (lettersField != null) lettersField.value = languageData.letters;
|
||||
if (lettersLength != null) lettersLength.value = (languageData.letters?.Length ?? 0).ToString();
|
||||
|
||||
languageData.words = new string[0];
|
||||
EditorUtility.SetDirty(_currentLevel);
|
||||
LevelEditorServices.GenerateAvailableWords(_currentLevel, modelController, languageData);
|
||||
UpdateCrossword(_currentLevel, languageData);
|
||||
LevelDataEditor.NotifyWordsListNeedsUpdate(_currentLevel, languageData.language);
|
||||
|
||||
RefreshPreviewData();
|
||||
UpdateLetterPalette();
|
||||
UpdateGridDisplay();
|
||||
UpdateStatusBar();
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
// Bind grid size controls - columns field
|
||||
var columnsField = paletteRoot.Q<TextField>("columns-field");
|
||||
if (columnsField != null)
|
||||
{
|
||||
columnsField.value = (_previewData?.columns ?? 10).ToString();
|
||||
columnsField.RegisterValueChangedCallback(evt => {
|
||||
if (_previewData != null && int.TryParse(evt.newValue, out int value) && value >= 5 && value <= 50)
|
||||
{
|
||||
_previewData.columns = value;
|
||||
CrosswordPreviewHandler.SavePreviewToLevel(_currentLevel, _currentLanguageCode, _previewData);
|
||||
EditorUtility.SetDirty(_currentLevel);
|
||||
EditorPrefs.SetInt("WordsToolkit_grid_x", value);
|
||||
UpdateGridDisplay();
|
||||
UpdateStatusBar();
|
||||
}
|
||||
});
|
||||
}
|
||||
columnsField.value = (_previewData?.columns ?? 10).ToString();
|
||||
columnsField.RegisterValueChangedCallback(evt => {
|
||||
if (_previewData != null && int.TryParse(evt.newValue, out int value) && value >= 5 && value <= 50)
|
||||
{
|
||||
_previewData.columns = value;
|
||||
CrosswordPreviewHandler.SavePreviewToLevel(_currentLevel, _currentLanguageCode, _previewData);
|
||||
EditorUtility.SetDirty(_currentLevel);
|
||||
EditorPrefs.SetInt("WordsToolkit_grid_x", value);
|
||||
UpdateGridDisplay();
|
||||
UpdateStatusBar();
|
||||
}
|
||||
});
|
||||
|
||||
// Bind grid size controls - rows field
|
||||
var rowsField = paletteRoot.Q<TextField>("rows-field");
|
||||
if (rowsField != null)
|
||||
{
|
||||
rowsField.value = (_previewData?.rows ?? 7).ToString();
|
||||
rowsField.RegisterValueChangedCallback(evt => {
|
||||
if (_previewData != null && int.TryParse(evt.newValue, out int value) && value >= 5 && value <= 50)
|
||||
{
|
||||
_previewData.rows = value;
|
||||
CrosswordPreviewHandler.SavePreviewToLevel(_currentLevel, _currentLanguageCode, _previewData);
|
||||
EditorUtility.SetDirty(_currentLevel);
|
||||
EditorPrefs.SetInt("WordsToolkit_grid_y", value);
|
||||
UpdateGridDisplay();
|
||||
UpdateStatusBar();
|
||||
}
|
||||
});
|
||||
}
|
||||
rowsField.value = (_previewData?.rows ?? 7).ToString();
|
||||
rowsField.RegisterValueChangedCallback(evt => {
|
||||
if (_previewData != null && int.TryParse(evt.newValue, out int value) && value >= 5 && value <= 50)
|
||||
{
|
||||
_previewData.rows = value;
|
||||
CrosswordPreviewHandler.SavePreviewToLevel(_currentLevel, _currentLanguageCode, _previewData);
|
||||
EditorUtility.SetDirty(_currentLevel);
|
||||
EditorPrefs.SetInt("WordsToolkit_grid_y", value);
|
||||
UpdateGridDisplay();
|
||||
UpdateStatusBar();
|
||||
}
|
||||
});
|
||||
|
||||
// Bind Test Level button
|
||||
var testLevelButton = paletteRoot.Q<Button>("test-level-button");
|
||||
@ -1319,8 +1360,11 @@ namespace WordsToolkit.Scripts.Levels.Editor
|
||||
if (_enableEditing && _currentLevel != null)
|
||||
{
|
||||
var buttonsRow = CreateLetterButtonsRow();
|
||||
buttonsRow.style.alignSelf = Align.FlexEnd;
|
||||
letterButtonsContainer.Add(buttonsRow);
|
||||
if (buttonsRow != null)
|
||||
{
|
||||
buttonsRow.style.alignSelf = Align.FlexEnd;
|
||||
letterButtonsContainer.Add(buttonsRow);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -616,12 +616,16 @@ namespace WordsToolkit.Scripts.Levels.Editor
|
||||
|
||||
if (candidate != null && candidate.isValid)
|
||||
{
|
||||
// Check for problematic overlaps (both position overlaps and missing words)
|
||||
bool hasProblematicOverlaps = LevelEditorServices.CheckForOverlappingWords(candidate.placements, wordsToUse);
|
||||
|
||||
// Create a string representation of the grid for uniqueness checking
|
||||
string gridSignature = GridToString(candidate.grid);
|
||||
|
||||
// Check if this grid layout is unique and has a good word count
|
||||
// Check if this grid layout is unique, has a good word count, and no problematic overlaps
|
||||
if (!generatedGrids.Contains(gridSignature) &&
|
||||
candidate.placements.Count > bestWordCount)
|
||||
candidate.placements.Count > bestWordCount &&
|
||||
!hasProblematicOverlaps)
|
||||
{
|
||||
bestVariant = candidate;
|
||||
bestWordCount = candidate.placements.Count;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user