├── ProjectSettings ├── ProjectVersion.txt ├── ClusterInputManager.asset ├── NetworkManager.asset ├── TimeManager.asset ├── EditorBuildSettings.asset ├── VFXManager.asset ├── AudioManager.asset ├── TagManager.asset ├── EditorSettings.asset ├── PresetManager.asset ├── UnityConnectSettings.asset ├── DynamicsManager.asset ├── Physics2DSettings.asset ├── NavMeshAreas.asset ├── GraphicsSettings.asset ├── QualitySettings.asset ├── InputManager.asset └── ProjectSettings.asset ├── Readme ├── p1.jpg ├── p2.jpg └── p3.jpg ├── Assets ├── ExcelTool │ ├── lib │ │ ├── ExcelDataReader.dll │ │ ├── Newtonsoft.Json.dll │ │ ├── ExcelDataReader.DataSet.dll │ │ ├── ExcelDataReader.dll.meta │ │ ├── Newtonsoft.Json.dll.meta │ │ └── ExcelDataReader.DataSet.dll.meta │ ├── Demo │ │ ├── SrcTables │ │ │ ├── Example1.xlsx │ │ │ ├── Example2.xlsx │ │ │ ├── Sub │ │ │ │ ├── Example3.xls │ │ │ │ └── Example3.xls.meta │ │ │ ├── Example1.xlsx.meta │ │ │ ├── Example2.xlsx.meta │ │ │ └── Sub.meta │ │ ├── OutTables │ │ │ ├── TableClass │ │ │ │ ├── TSet_Example1.cs │ │ │ │ ├── TSet_Example2.cs │ │ │ │ ├── TSet_Example1.cs.meta │ │ │ │ ├── TSet_Example2.cs.meta │ │ │ │ ├── Table_Example1.cs.meta │ │ │ │ ├── Table_Example2.cs.meta │ │ │ │ ├── Table_Example2.cs │ │ │ │ └── Table_Example1.cs │ │ │ ├── TableJson │ │ │ │ ├── Example1.json.meta │ │ │ │ ├── Example2.json.meta │ │ │ │ ├── Example2.json │ │ │ │ └── Example1.json │ │ │ ├── TableAssets.meta │ │ │ ├── TableClass.meta │ │ │ ├── TableJson.meta │ │ │ └── TableAssets │ │ │ │ ├── TSet_Example1.asset.meta │ │ │ │ ├── TSet_Example2.asset.meta │ │ │ │ ├── TSet_Example2.asset │ │ │ │ └── TSet_Example1.asset │ │ ├── ExcelToolDemo.unity.meta │ │ ├── OutTables.meta │ │ ├── SrcTables.meta │ │ ├── ExcelToolDemo.cs.meta │ │ ├── ExcelToolDemo.cs │ │ └── ExcelToolDemo.unity │ ├── Demo.meta │ ├── lib.meta │ ├── scripts.meta │ └── scripts │ │ ├── Editor.meta │ │ ├── TableSet.cs.meta │ │ ├── Editor │ │ ├── ExcelWindow.cs.meta │ │ ├── FileExporter.cs.meta │ │ ├── ExcelWindow.cs │ │ └── FileExporter.cs │ │ └── TableSet.cs ├── Plugins.meta ├── ExcelTool.meta └── Plugins │ └── Editor.meta ├── .gitignore ├── Logs └── Packages-Update.log ├── Packages └── manifest.json └── README.MD /ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 2018.3.0f2 2 | -------------------------------------------------------------------------------- /Readme/p1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byfine/UnityExcelTool/HEAD/Readme/p1.jpg -------------------------------------------------------------------------------- /Readme/p2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byfine/UnityExcelTool/HEAD/Readme/p2.jpg -------------------------------------------------------------------------------- /Readme/p3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byfine/UnityExcelTool/HEAD/Readme/p3.jpg -------------------------------------------------------------------------------- /Assets/ExcelTool/lib/ExcelDataReader.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byfine/UnityExcelTool/HEAD/Assets/ExcelTool/lib/ExcelDataReader.dll -------------------------------------------------------------------------------- /Assets/ExcelTool/lib/Newtonsoft.Json.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byfine/UnityExcelTool/HEAD/Assets/ExcelTool/lib/Newtonsoft.Json.dll -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/SrcTables/Example1.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byfine/UnityExcelTool/HEAD/Assets/ExcelTool/Demo/SrcTables/Example1.xlsx -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/SrcTables/Example2.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byfine/UnityExcelTool/HEAD/Assets/ExcelTool/Demo/SrcTables/Example2.xlsx -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/SrcTables/Sub/Example3.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byfine/UnityExcelTool/HEAD/Assets/ExcelTool/Demo/SrcTables/Sub/Example3.xls -------------------------------------------------------------------------------- /Assets/ExcelTool/lib/ExcelDataReader.DataSet.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byfine/UnityExcelTool/HEAD/Assets/ExcelTool/lib/ExcelDataReader.DataSet.dll -------------------------------------------------------------------------------- /ProjectSettings/ClusterInputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!236 &1 4 | ClusterInputManager: 5 | m_ObjectHideFlags: 0 6 | m_Inputs: [] 7 | -------------------------------------------------------------------------------- /Assets/Plugins.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a193d20abbaea7b41ac470bfc455a813 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/ExcelTool.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 34bc1602e7e39b241ae55aff14cd9db3 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/OutTables/TableClass/TSet_Example1.cs: -------------------------------------------------------------------------------- 1 | /// 2 | /// Auto Generated ScriptableObject TableSet. 3 | /// 4 | public class TSet_Example1 : TableSet 5 | { 6 | } 7 | -------------------------------------------------------------------------------- /ProjectSettings/NetworkManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!149 &1 4 | NetworkManager: 5 | m_ObjectHideFlags: 0 6 | m_DebugLevel: 0 7 | m_Sendrate: 15 8 | m_AssetToPrefab: {} 9 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e92c5af0d1d6cd142963fa3adfcd8270 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/ExcelToolDemo.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 73e3d6c8fde716b4a817c8997bd21a72 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/OutTables/TableClass/TSet_Example2.cs: -------------------------------------------------------------------------------- 1 | /// 2 | /// Auto Generated ScriptableObject TableSet. 3 | /// 4 | public class TSet_Example2 : TableSet 5 | { 6 | } 7 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/SrcTables/Example1.xlsx.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b8f73910425c02b49a16d84a7400bf06 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/SrcTables/Example2.xlsx.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 37b265f5dc411284784e01c96fa0c406 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/ExcelTool/lib.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9005baf105ed80c42937669fafa45a6b 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/ExcelTool/scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fac1aada0386610438b0ba3edc6c62d7 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f1012ead400fbe64b8f247a79d8b0d7e 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/SrcTables/Sub/Example3.xls.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c5e2fc631b80d4b488e0b3d588570819 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/OutTables.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 48e24c9dd4b02d04abf2ecdbf85b071b 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/SrcTables.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 60a3114a5884ae2409f2f6614ef7a215 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/ExcelTool/scripts/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d8a7ee8a13ca62248bae23579c4cb8aa 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/OutTables/TableJson/Example1.json.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fbe47ec4ce0569b4b817acdafc63bc6a 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/OutTables/TableJson/Example2.json.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f740d4cf8e5a3964c96ed2d1ced2f28b 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/SrcTables/Sub.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ae68d7974abdefe40a9ad21331289ed0 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/OutTables/TableAssets.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 56a5270c26442114a8d12b185895ce31 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/OutTables/TableClass.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 33a52880929bc7848a89569db0694508 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/OutTables/TableJson.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ae3b419fb011a634cb7916940c0f6813 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!5 &1 4 | TimeManager: 5 | m_ObjectHideFlags: 0 6 | Fixed Timestep: 0.02 7 | Maximum Allowed Timestep: 0.1 8 | m_TimeScale: 1 9 | Maximum Particle Timestep: 0.03 10 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/OutTables/TableAssets/TSet_Example1.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 79773bcd9d255824089e1e72d393d294 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 11400000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/OutTables/TableAssets/TSet_Example2.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ec083cfeabb199946912d31629c30d57 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 11400000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1045 &1 4 | EditorBuildSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Scenes: 8 | - enabled: 0 9 | path: 10 | guid: 00000000000000000000000000000000 11 | m_configObjects: {} 12 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/ExcelToolDemo.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 55a11fe02f44b9d48bd2f239e1f331c2 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/ExcelTool/scripts/TableSet.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2d8a39dcfd08de0468f84ecd5ad1e940 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/ExcelTool/scripts/Editor/ExcelWindow.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1cb2e3712f0be6344986f3eef99a1798 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/ExcelTool/scripts/Editor/FileExporter.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a6593b75251bb5342be30fa359fd9685 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/OutTables/TableClass/TSet_Example1.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 09812a0950d933b429bcd2493578dbd2 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/OutTables/TableClass/TSet_Example2.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b796d750cbc3357408ad40b1fb756c54 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /ProjectSettings/VFXManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!937362698 &1 4 | VFXManager: 5 | m_ObjectHideFlags: 0 6 | m_IndirectShader: {fileID: 0} 7 | m_CopyBufferShader: {fileID: 0} 8 | m_SortShader: {fileID: 0} 9 | m_RenderPipeSettingsPath: 10 | m_FixedTimeStep: 0.016666668 11 | m_MaxDeltaTime: 0.05 12 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/OutTables/TableClass/Table_Example1.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ebdb0940219bcd0499c86a857ee9beeb 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/OutTables/TableClass/Table_Example2.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fc31a0adc37e50246ae4e0664345858f 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/OutTables/TableClass/Table_Example2.cs: -------------------------------------------------------------------------------- 1 | /// 2 | /// Auto Generated Class by ExcelTool. From Table: Example2 3 | /// 4 | public class Table_Example2 : TableBase 5 | { 6 | public Animal ID; // 编号 7 | public string Name; // 名称 8 | public string AssetName; // 资源编号 9 | public int Type; // 食肉/食草 10 | public int Speed; // 速度 11 | } 12 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/OutTables/TableClass/Table_Example1.cs: -------------------------------------------------------------------------------- 1 | /// 2 | /// Auto Generated Class by ExcelTool. From Table: Example1 3 | /// 4 | public class Table_Example1 : TableBase 5 | { 6 | public int ID; // 编号 7 | public string Name; // 名称 8 | public string AssetName; // 资源编号 9 | public int HP; // 血 10 | public int Attack; // 攻击 11 | public int Defence; // 防御 12 | } 13 | -------------------------------------------------------------------------------- /ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!11 &1 4 | AudioManager: 5 | m_ObjectHideFlags: 0 6 | m_Volume: 1 7 | Rolloff Scale: 1 8 | Doppler Factor: 1 9 | Default Speaker Mode: 2 10 | m_SampleRate: 0 11 | m_DSPBufferSize: 1024 12 | m_VirtualVoiceCount: 512 13 | m_RealVoiceCount: 32 14 | m_SpatializerPlugin: 15 | m_AmbisonicDecoderPlugin: 16 | m_DisableAudio: 0 17 | m_VirtualizeEffects: 1 18 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/OutTables/TableJson/Example2.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "ID": "Rabbit", 4 | "Name": "兔子", 5 | "AssetName": "Animal01", 6 | "Type": 1.0, 7 | "Speed": 15.0 8 | }, 9 | { 10 | "ID": "Tiger", 11 | "Name": "老虎", 12 | "AssetName": "Animal02", 13 | "Type": 2.0, 14 | "Speed": 22.0 15 | }, 16 | { 17 | "ID": "Lion", 18 | "Name": "狮子", 19 | "AssetName": "Animal03", 20 | "Type": 2.0, 21 | "Speed": 3.0 22 | } 23 | ] -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/OutTables/TableJson/Example1.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "ID": 1.0, 4 | "Name": "小明", 5 | "AssetName": "Hero01", 6 | "HP": 100.0, 7 | "Attack": 15.0, 8 | "Defence": 0.0 9 | }, 10 | { 11 | "ID": 2.0, 12 | "Name": "小红", 13 | "AssetName": "Hero02", 14 | "HP": 352.0, 15 | "Attack": 22.0, 16 | "Defence": 3.0 17 | }, 18 | { 19 | "ID": 3.0, 20 | "Name": "小刚", 21 | "AssetName": "Hero03", 22 | "HP": 332.0, 23 | "Attack": 3.0, 24 | "Defence": 44.0 25 | } 26 | ] -------------------------------------------------------------------------------- /ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!78 &1 4 | TagManager: 5 | serializedVersion: 2 6 | tags: [] 7 | layers: 8 | - Default 9 | - TransparentFX 10 | - Ignore Raycast 11 | - 12 | - Water 13 | - UI 14 | - 15 | - 16 | - PostProcessing 17 | - 18 | - 19 | - 20 | - 21 | - 22 | - 23 | - 24 | - 25 | - 26 | - 27 | - 28 | - 29 | - 30 | - 31 | - 32 | - 33 | - 34 | - 35 | - 36 | - 37 | - 38 | - 39 | - 40 | m_SortingLayers: 41 | - name: Default 42 | uniqueID: 0 43 | locked: 0 44 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /UnityExcelTool/[Ll]ibrary/ 2 | /UnityExcelTool/[Tt]emp/ 3 | /UnityExcelTool/[Oo]bj/ 4 | [Ll]ibrary/ 5 | [Tt]emp/ 6 | [Oo]bj/ 7 | .vs/ 8 | .idea/ 9 | 10 | # Autogenerated VS/MD solution and project files 11 | *.svd 12 | *.userprefs 13 | /*.csproj 14 | *.pidb 15 | *.suo 16 | /*.sln 17 | *.user 18 | *.unityproj 19 | *.booproj 20 | 21 | .DS_Store 22 | .DS_Store? 23 | ._* 24 | .Spotlight-V100 25 | .Trashes 26 | ehthumbs.db 27 | Thumbs.db 28 | /Assets/Plugins/Editor/JetBrains.meta 29 | /Assets/Plugins/Editor/JetBrains/JetBrains.Rider.Unity.Editor.Plugin.Repacked.dll 30 | /Assets/Plugins/Editor/JetBrains/JetBrains.Rider.Unity.Editor.Plugin.Repacked.dll.meta 31 | -------------------------------------------------------------------------------- /Assets/ExcelTool/lib/ExcelDataReader.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bee5b1ed168e174469dc30e0f26c033d 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | defineConstraints: [] 9 | isPreloaded: 0 10 | isOverridable: 0 11 | isExplicitlyReferenced: 0 12 | platformData: 13 | - first: 14 | Any: 15 | second: 16 | enabled: 1 17 | settings: {} 18 | - first: 19 | Editor: Editor 20 | second: 21 | enabled: 0 22 | settings: 23 | DefaultValueInitialized: true 24 | - first: 25 | Windows Store Apps: WindowsStoreApps 26 | second: 27 | enabled: 0 28 | settings: 29 | CPU: AnyCPU 30 | userData: 31 | assetBundleName: 32 | assetBundleVariant: 33 | -------------------------------------------------------------------------------- /Assets/ExcelTool/lib/Newtonsoft.Json.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: af59bad4292fe77429cb6c1dd2a09993 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | defineConstraints: [] 9 | isPreloaded: 0 10 | isOverridable: 0 11 | isExplicitlyReferenced: 0 12 | platformData: 13 | - first: 14 | Any: 15 | second: 16 | enabled: 1 17 | settings: {} 18 | - first: 19 | Editor: Editor 20 | second: 21 | enabled: 0 22 | settings: 23 | DefaultValueInitialized: true 24 | - first: 25 | Windows Store Apps: WindowsStoreApps 26 | second: 27 | enabled: 0 28 | settings: 29 | CPU: AnyCPU 30 | userData: 31 | assetBundleName: 32 | assetBundleVariant: 33 | -------------------------------------------------------------------------------- /Assets/ExcelTool/lib/ExcelDataReader.DataSet.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f9315afb1504606489086730b3de4f74 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | defineConstraints: [] 9 | isPreloaded: 0 10 | isOverridable: 0 11 | isExplicitlyReferenced: 0 12 | platformData: 13 | - first: 14 | Any: 15 | second: 16 | enabled: 1 17 | settings: {} 18 | - first: 19 | Editor: Editor 20 | second: 21 | enabled: 0 22 | settings: 23 | DefaultValueInitialized: true 24 | - first: 25 | Windows Store Apps: WindowsStoreApps 26 | second: 27 | enabled: 0 28 | settings: 29 | CPU: AnyCPU 30 | userData: 31 | assetBundleName: 32 | assetBundleVariant: 33 | -------------------------------------------------------------------------------- /ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!159 &1 4 | EditorSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 7 7 | m_ExternalVersionControlSupport: Visible Meta Files 8 | m_SerializationMode: 2 9 | m_LineEndingsForNewScripts: 2 10 | m_DefaultBehaviorMode: 0 11 | m_PrefabRegularEnvironment: {fileID: 0} 12 | m_PrefabUIEnvironment: {fileID: 0} 13 | m_SpritePackerMode: 0 14 | m_SpritePackerPaddingPower: 1 15 | m_EtcTextureCompressorBehavior: 1 16 | m_EtcTextureFastCompressor: 1 17 | m_EtcTextureNormalCompressor: 2 18 | m_EtcTextureBestCompressor: 4 19 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef 20 | m_ProjectGenerationRootNamespace: 21 | m_CollabEditorSettings: 22 | inProgressEnabled: 1 23 | m_EnableTextureStreamingInPlayMode: 1 24 | -------------------------------------------------------------------------------- /ProjectSettings/PresetManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1386491679 &1 4 | PresetManager: 5 | m_ObjectHideFlags: 0 6 | m_DefaultList: 7 | - type: 8 | m_NativeTypeID: 108 9 | m_ManagedTypePPtr: {fileID: 0} 10 | m_ManagedTypeFallback: 11 | defaultPresets: 12 | - m_Preset: {fileID: 2655988077585873504, guid: c1cf8506f04ef2c4a88b64b6c4202eea, 13 | type: 2} 14 | - type: 15 | m_NativeTypeID: 1020 16 | m_ManagedTypePPtr: {fileID: 0} 17 | m_ManagedTypeFallback: 18 | defaultPresets: 19 | - m_Preset: {fileID: 2655988077585873504, guid: 0cd792cc87e492d43b4e95b205fc5cc6, 20 | type: 2} 21 | - type: 22 | m_NativeTypeID: 1006 23 | m_ManagedTypePPtr: {fileID: 0} 24 | m_ManagedTypeFallback: 25 | defaultPresets: 26 | - m_Preset: {fileID: 2655988077585873504, guid: 7a99f8aa944efe94cb9bd74562b7d5f9, 27 | type: 2} 28 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/ExcelToolDemo.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | public enum Animal 6 | { 7 | Rabbit, 8 | Tiger, 9 | Lion 10 | } 11 | 12 | public class ExcelToolDemo : MonoBehaviour 13 | { 14 | public TSet_Example1 Table1; 15 | public TSet_Example2 Table2; 16 | 17 | void Start() 18 | { 19 | Debug.Log("Table1 Count: " + Table1.Count); 20 | foreach (var kv in Table1) 21 | { 22 | Debug.Log("Table1 Data: " + kv.Key + " : " + kv.Value); 23 | } 24 | 25 | 26 | Debug.Log("Table1 Data 1: Name:" + Table1[1].Name + ", HP:" + Table1[1].HP + ", Attack:" + Table1[1].Attack); 27 | 28 | Debug.Log("Table2: Name:" + Table2[Animal.Rabbit].Name + ", Asset:" + Table2[Animal.Rabbit].AssetName + ", Type:" + Table2[Animal.Rabbit].Type); 29 | 30 | 31 | } 32 | 33 | void Update() 34 | { 35 | 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /ProjectSettings/UnityConnectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!310 &1 4 | UnityConnectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 1 7 | m_Enabled: 0 8 | m_TestMode: 0 9 | m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events 10 | m_EventUrl: https://cdp.cloud.unity3d.com/v1/events 11 | m_ConfigUrl: https://config.uca.cloud.unity3d.com 12 | m_TestInitMode: 0 13 | CrashReportingSettings: 14 | m_EventUrl: https://perf-events.cloud.unity3d.com 15 | m_Enabled: 0 16 | m_LogBufferSize: 10 17 | m_CaptureEditorExceptions: 1 18 | UnityPurchasingSettings: 19 | m_Enabled: 0 20 | m_TestMode: 0 21 | UnityAnalyticsSettings: 22 | m_Enabled: 0 23 | m_TestMode: 0 24 | m_InitializeOnStartup: 1 25 | UnityAdsSettings: 26 | m_Enabled: 0 27 | m_InitializeOnStartup: 1 28 | m_TestMode: 0 29 | m_IosGameId: 30 | m_AndroidGameId: 31 | m_GameIds: {} 32 | m_GameId: 33 | PerformanceReportingSettings: 34 | m_Enabled: 0 35 | -------------------------------------------------------------------------------- /ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!55 &1 4 | PhysicsManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 8 7 | m_Gravity: {x: 0, y: -9.81, z: 0} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_BounceThreshold: 2 10 | m_SleepThreshold: 0.005 11 | m_DefaultContactOffset: 0.01 12 | m_DefaultSolverIterations: 6 13 | m_DefaultSolverVelocityIterations: 1 14 | m_QueriesHitBackfaces: 0 15 | m_QueriesHitTriggers: 1 16 | m_EnableAdaptiveForce: 0 17 | m_ClothInterCollisionDistance: 0 18 | m_ClothInterCollisionStiffness: 0 19 | m_ContactsGeneration: 1 20 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 21 | m_AutoSimulation: 1 22 | m_AutoSyncTransforms: 0 23 | m_ReuseCollisionCallbacks: 1 24 | m_ClothInterCollisionSettingsToggle: 0 25 | m_ContactPairsMode: 0 26 | m_BroadphaseType: 0 27 | m_WorldBounds: 28 | m_Center: {x: 0, y: 0, z: 0} 29 | m_Extent: {x: 250, y: 250, z: 250} 30 | m_WorldSubdivisions: 8 31 | -------------------------------------------------------------------------------- /Logs/Packages-Update.log: -------------------------------------------------------------------------------- 1 | 2 | === Sun Dec 23 11:34:27 2018 3 | 4 | Packages were changed. 5 | Update Mode: mergeDefaultDependencies 6 | 7 | The following packages were added: 8 | com.unity.analytics@3.2.2 9 | com.unity.purchasing@2.0.3 10 | com.unity.ads@2.3.1 11 | com.unity.textmeshpro@1.3.0 12 | com.unity.package-manager-ui@2.0.3 13 | com.unity.collab-proxy@1.2.15 14 | com.unity.modules.ai@1.0.0 15 | com.unity.modules.animation@1.0.0 16 | com.unity.modules.assetbundle@1.0.0 17 | com.unity.modules.audio@1.0.0 18 | com.unity.modules.cloth@1.0.0 19 | com.unity.modules.director@1.0.0 20 | com.unity.modules.imageconversion@1.0.0 21 | com.unity.modules.imgui@1.0.0 22 | com.unity.modules.jsonserialize@1.0.0 23 | com.unity.modules.particlesystem@1.0.0 24 | com.unity.modules.physics@1.0.0 25 | com.unity.modules.physics2d@1.0.0 26 | com.unity.modules.screencapture@1.0.0 27 | com.unity.modules.terrain@1.0.0 28 | com.unity.modules.terrainphysics@1.0.0 29 | com.unity.modules.tilemap@1.0.0 30 | com.unity.modules.ui@1.0.0 31 | com.unity.modules.uielements@1.0.0 32 | com.unity.modules.umbra@1.0.0 33 | com.unity.modules.unityanalytics@1.0.0 34 | com.unity.modules.unitywebrequest@1.0.0 35 | com.unity.modules.unitywebrequestassetbundle@1.0.0 36 | com.unity.modules.unitywebrequestaudio@1.0.0 37 | com.unity.modules.unitywebrequesttexture@1.0.0 38 | com.unity.modules.unitywebrequestwww@1.0.0 39 | com.unity.modules.vehicles@1.0.0 40 | com.unity.modules.video@1.0.0 41 | com.unity.modules.vr@1.0.0 42 | com.unity.modules.wind@1.0.0 43 | com.unity.modules.xr@1.0.0 44 | -------------------------------------------------------------------------------- /ProjectSettings/Physics2DSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!19 &1 4 | Physics2DSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 4 7 | m_Gravity: {x: 0, y: -9.81} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_VelocityIterations: 8 10 | m_PositionIterations: 3 11 | m_VelocityThreshold: 1 12 | m_MaxLinearCorrection: 0.2 13 | m_MaxAngularCorrection: 8 14 | m_MaxTranslationSpeed: 100 15 | m_MaxRotationSpeed: 360 16 | m_BaumgarteScale: 0.2 17 | m_BaumgarteTimeOfImpactScale: 0.75 18 | m_TimeToSleep: 0.5 19 | m_LinearSleepTolerance: 0.01 20 | m_AngularSleepTolerance: 2 21 | m_DefaultContactOffset: 0.01 22 | m_AutoSimulation: 1 23 | m_QueriesHitTriggers: 1 24 | m_QueriesStartInColliders: 1 25 | m_ChangeStopsCallbacks: 0 26 | m_CallbacksOnDisable: 1 27 | m_ReuseCollisionCallbacks: 1 28 | m_AutoSyncTransforms: 0 29 | m_AlwaysShowColliders: 0 30 | m_ShowColliderSleep: 1 31 | m_ShowColliderContacts: 0 32 | m_ShowColliderAABB: 0 33 | m_ContactArrowScale: 0.2 34 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} 35 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} 36 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} 37 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} 38 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 39 | -------------------------------------------------------------------------------- /Packages/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.unity.ads": "2.3.1", 4 | "com.unity.analytics": "3.2.2", 5 | "com.unity.collab-proxy": "1.2.15", 6 | "com.unity.package-manager-ui": "2.0.3", 7 | "com.unity.purchasing": "2.0.3", 8 | "com.unity.textmeshpro": "1.3.0", 9 | "com.unity.modules.ai": "1.0.0", 10 | "com.unity.modules.animation": "1.0.0", 11 | "com.unity.modules.assetbundle": "1.0.0", 12 | "com.unity.modules.audio": "1.0.0", 13 | "com.unity.modules.cloth": "1.0.0", 14 | "com.unity.modules.director": "1.0.0", 15 | "com.unity.modules.imageconversion": "1.0.0", 16 | "com.unity.modules.imgui": "1.0.0", 17 | "com.unity.modules.jsonserialize": "1.0.0", 18 | "com.unity.modules.particlesystem": "1.0.0", 19 | "com.unity.modules.physics": "1.0.0", 20 | "com.unity.modules.physics2d": "1.0.0", 21 | "com.unity.modules.screencapture": "1.0.0", 22 | "com.unity.modules.terrain": "1.0.0", 23 | "com.unity.modules.terrainphysics": "1.0.0", 24 | "com.unity.modules.tilemap": "1.0.0", 25 | "com.unity.modules.ui": "1.0.0", 26 | "com.unity.modules.uielements": "1.0.0", 27 | "com.unity.modules.umbra": "1.0.0", 28 | "com.unity.modules.unityanalytics": "1.0.0", 29 | "com.unity.modules.unitywebrequest": "1.0.0", 30 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0", 31 | "com.unity.modules.unitywebrequestaudio": "1.0.0", 32 | "com.unity.modules.unitywebrequesttexture": "1.0.0", 33 | "com.unity.modules.unitywebrequestwww": "1.0.0", 34 | "com.unity.modules.vehicles": "1.0.0", 35 | "com.unity.modules.video": "1.0.0", 36 | "com.unity.modules.vr": "1.0.0", 37 | "com.unity.modules.wind": "1.0.0", 38 | "com.unity.modules.xr": "1.0.0" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /ProjectSettings/NavMeshAreas.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!126 &1 4 | NavMeshProjectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | areas: 8 | - name: Walkable 9 | cost: 1 10 | - name: Not Walkable 11 | cost: 1 12 | - name: Jump 13 | cost: 2 14 | - name: 15 | cost: 1 16 | - name: 17 | cost: 1 18 | - name: 19 | cost: 1 20 | - name: 21 | cost: 1 22 | - name: 23 | cost: 1 24 | - name: 25 | cost: 1 26 | - name: 27 | cost: 1 28 | - name: 29 | cost: 1 30 | - name: 31 | cost: 1 32 | - name: 33 | cost: 1 34 | - name: 35 | cost: 1 36 | - name: 37 | cost: 1 38 | - name: 39 | cost: 1 40 | - name: 41 | cost: 1 42 | - name: 43 | cost: 1 44 | - name: 45 | cost: 1 46 | - name: 47 | cost: 1 48 | - name: 49 | cost: 1 50 | - name: 51 | cost: 1 52 | - name: 53 | cost: 1 54 | - name: 55 | cost: 1 56 | - name: 57 | cost: 1 58 | - name: 59 | cost: 1 60 | - name: 61 | cost: 1 62 | - name: 63 | cost: 1 64 | - name: 65 | cost: 1 66 | - name: 67 | cost: 1 68 | - name: 69 | cost: 1 70 | - name: 71 | cost: 1 72 | m_LastAgentTypeID: -887442657 73 | m_Settings: 74 | - serializedVersion: 2 75 | agentTypeID: 0 76 | agentRadius: 0.5 77 | agentHeight: 2 78 | agentSlope: 45 79 | agentClimb: 0.75 80 | ledgeDropHeight: 0 81 | maxJumpAcrossDistance: 0 82 | minRegionArea: 2 83 | manualCellSize: 0 84 | cellSize: 0.16666667 85 | manualTileSize: 0 86 | tileSize: 256 87 | accuratePlacement: 0 88 | debug: 89 | m_Flags: 0 90 | m_SettingNames: 91 | - Humanoid 92 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/OutTables/TableAssets/TSet_Example2.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 11500000, guid: b796d750cbc3357408ad40b1fb756c54, type: 3} 13 | m_Name: TSet_Example2 14 | m_EditorClassIdentifier: 15 | values: 16 | - {fileID: 114014265183241228} 17 | - {fileID: 114648744716444986} 18 | - {fileID: 114313755086102142} 19 | --- !u!114 &114014265183241228 20 | MonoBehaviour: 21 | m_ObjectHideFlags: 0 22 | m_CorrespondingSourceObject: {fileID: 0} 23 | m_PrefabInstance: {fileID: 0} 24 | m_PrefabAsset: {fileID: 0} 25 | m_GameObject: {fileID: 0} 26 | m_Enabled: 1 27 | m_EditorHideFlags: 0 28 | m_Script: {fileID: 11500000, guid: fc31a0adc37e50246ae4e0664345858f, type: 3} 29 | m_Name: Table_Example2_Rabbit 30 | m_EditorClassIdentifier: 31 | tKey: 0 32 | ID: 0 33 | Name: "\u5154\u5B50" 34 | AssetName: Animal01 35 | Type: 1 36 | Speed: 15 37 | --- !u!114 &114313755086102142 38 | MonoBehaviour: 39 | m_ObjectHideFlags: 0 40 | m_CorrespondingSourceObject: {fileID: 0} 41 | m_PrefabInstance: {fileID: 0} 42 | m_PrefabAsset: {fileID: 0} 43 | m_GameObject: {fileID: 0} 44 | m_Enabled: 1 45 | m_EditorHideFlags: 0 46 | m_Script: {fileID: 11500000, guid: fc31a0adc37e50246ae4e0664345858f, type: 3} 47 | m_Name: Table_Example2_Lion 48 | m_EditorClassIdentifier: 49 | tKey: 2 50 | ID: 2 51 | Name: "\u72EE\u5B50" 52 | AssetName: Animal03 53 | Type: 2 54 | Speed: 3 55 | --- !u!114 &114648744716444986 56 | MonoBehaviour: 57 | m_ObjectHideFlags: 0 58 | m_CorrespondingSourceObject: {fileID: 0} 59 | m_PrefabInstance: {fileID: 0} 60 | m_PrefabAsset: {fileID: 0} 61 | m_GameObject: {fileID: 0} 62 | m_Enabled: 1 63 | m_EditorHideFlags: 0 64 | m_Script: {fileID: 11500000, guid: fc31a0adc37e50246ae4e0664345858f, type: 3} 65 | m_Name: Table_Example2_Tiger 66 | m_EditorClassIdentifier: 67 | tKey: 1 68 | ID: 1 69 | Name: "\u8001\u864E" 70 | AssetName: Animal02 71 | Type: 2 72 | Speed: 22 73 | -------------------------------------------------------------------------------- /Assets/ExcelTool/scripts/TableSet.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using UnityEngine; 3 | 4 | 5 | public class TableBase : ScriptableObject 6 | { 7 | public T tKey; 8 | } 9 | 10 | 11 | public class TableSet : ScriptableObject where TValue : TableBase 12 | { 13 | [SerializeField] private List values = new List(); 14 | 15 | private Dictionary dict = new Dictionary(); 16 | 17 | public void UpdateDic() 18 | { 19 | if (dict != null && dict.Count > 0) return; 20 | dict = new Dictionary(); 21 | 22 | if (values == null) 23 | { 24 | values = new List(); 25 | return; 26 | } 27 | 28 | foreach (var v in values) 29 | { 30 | dict[v.tKey] = v; 31 | } 32 | } 33 | 34 | public TValue this[TKey key] 35 | { 36 | get 37 | { 38 | UpdateDic(); 39 | return dict[key]; 40 | } 41 | } 42 | 43 | public ICollection Keys 44 | { 45 | get 46 | { 47 | UpdateDic(); 48 | return dict.Keys; 49 | } 50 | } 51 | 52 | public ICollection Values 53 | { 54 | get 55 | { 56 | UpdateDic(); 57 | return dict.Values; 58 | } 59 | } 60 | 61 | public Dictionary.Enumerator GetEnumerator() 62 | { 63 | UpdateDic(); 64 | return dict.GetEnumerator(); 65 | } 66 | 67 | public void Add(TKey key, TValue value) 68 | { 69 | if (dict == null) 70 | dict = new Dictionary(); 71 | 72 | if (values == null) 73 | values = new List(); 74 | 75 | values.Add(value); 76 | dict.Add(key, value); 77 | } 78 | 79 | public int Count 80 | { 81 | get 82 | { 83 | UpdateDic(); 84 | return dict?.Count ?? 0; 85 | } 86 | } 87 | 88 | public bool ContainsKey(TKey key) 89 | { 90 | UpdateDic(); 91 | return dict.ContainsKey(key); 92 | } 93 | 94 | } 95 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/OutTables/TableAssets/TSet_Example1.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 11500000, guid: 09812a0950d933b429bcd2493578dbd2, type: 3} 13 | m_Name: TSet_Example1 14 | m_EditorClassIdentifier: 15 | values: 16 | - {fileID: 114863161785676634} 17 | - {fileID: 114476506423439652} 18 | - {fileID: 114921003356810632} 19 | --- !u!114 &114476506423439652 20 | MonoBehaviour: 21 | m_ObjectHideFlags: 0 22 | m_CorrespondingSourceObject: {fileID: 0} 23 | m_PrefabInstance: {fileID: 0} 24 | m_PrefabAsset: {fileID: 0} 25 | m_GameObject: {fileID: 0} 26 | m_Enabled: 1 27 | m_EditorHideFlags: 0 28 | m_Script: {fileID: 11500000, guid: ebdb0940219bcd0499c86a857ee9beeb, type: 3} 29 | m_Name: Table_Example1_2 30 | m_EditorClassIdentifier: 31 | tKey: 2 32 | ID: 2 33 | Name: "\u5C0F\u7EA2" 34 | AssetName: Hero02 35 | HP: 352 36 | Attack: 22 37 | Defence: 3 38 | --- !u!114 &114863161785676634 39 | MonoBehaviour: 40 | m_ObjectHideFlags: 0 41 | m_CorrespondingSourceObject: {fileID: 0} 42 | m_PrefabInstance: {fileID: 0} 43 | m_PrefabAsset: {fileID: 0} 44 | m_GameObject: {fileID: 0} 45 | m_Enabled: 1 46 | m_EditorHideFlags: 0 47 | m_Script: {fileID: 11500000, guid: ebdb0940219bcd0499c86a857ee9beeb, type: 3} 48 | m_Name: Table_Example1_1 49 | m_EditorClassIdentifier: 50 | tKey: 1 51 | ID: 1 52 | Name: "\u5C0F\u660E" 53 | AssetName: Hero01 54 | HP: 100 55 | Attack: 15 56 | Defence: 0 57 | --- !u!114 &114921003356810632 58 | MonoBehaviour: 59 | m_ObjectHideFlags: 0 60 | m_CorrespondingSourceObject: {fileID: 0} 61 | m_PrefabInstance: {fileID: 0} 62 | m_PrefabAsset: {fileID: 0} 63 | m_GameObject: {fileID: 0} 64 | m_Enabled: 1 65 | m_EditorHideFlags: 0 66 | m_Script: {fileID: 11500000, guid: ebdb0940219bcd0499c86a857ee9beeb, type: 3} 67 | m_Name: Table_Example1_3 68 | m_EditorClassIdentifier: 69 | tKey: 3 70 | ID: 3 71 | Name: "\u5C0F\u521A" 72 | AssetName: Hero03 73 | HP: 332 74 | Attack: 3 75 | Defence: 44 76 | -------------------------------------------------------------------------------- /README.MD: -------------------------------------------------------------------------------- 1 | # UnityExcelTool 2 | A Unity Excel Tool, which can convert excel files to json, and auto generate table class and ScriptableObjects. 3 | 4 | ![image1](https://github.com/byfine/UnityExcelTool/raw/master/Readme/p1.jpg) 5 | ![image2](https://github.com/byfine/UnityExcelTool/raw/master/Readme/p2.jpg) 6 | ![image3](https://github.com/byfine/UnityExcelTool/raw/master/Readme/p3.jpg) 7 | 8 | ## How to use: 9 | "Window -> Excel Tool Window" to open it. 10 | 11 | 1. Choose source file folder. 12 | 2. Choose output folder. 13 | 3. If you don't see any excel files, click refresh button. 14 | 4. Click Json button to Generate Json Files. 15 | 5. Click Class button to Generate Table Class Files. 16 | 6. Click Asset button to Generate ScriptableObjects Files. 17 | 7. Sheet Count means how many sheet you want to conver in every table. If this number is 1, the auto generated class will be named same as table filename, otherwise, it will be named TableName_SheetName. 18 | 19 | ## Notes: 20 | 1. In every table, the first 3 rows have a special purpose. 21 | 1. First row : name of data. 22 | 2. Second row : type of data, only support base type and Enum(not recommend). 23 | 3. Third row : comment of data, could be empty. 24 | 2. First column data will be the key to find table. 25 | 3. All Excel filenames cannot be duplicated (even though they are not in same folders). 26 | 27 | ## Environment: 28 | Unity 2018.3.0f2, .Net 4.x, if you are using .Net 2.x, maybe you need to replace dlls in lib to proper version. 29 | [ExcelDataReader](https://github.com/ExcelDataReader/ExcelDataReader), [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json) 30 | 31 | ------- 32 | 33 | # UnityExcelTool 34 | 一个Unity Excel工具,可以把excel表格转换为Json文件,并且可以自动生成表格类和ScriptableObject文件。 35 | 36 | ## 使用: 37 | "Window -> Excel Tool Window" 打开窗口. 38 | 39 | 1. 选择源文件夹. 40 | 2. 选择目标文件夹. 41 | 3. 如果没有看到表格列表,点击 Refresh按钮. 42 | 4. 点击 Json按钮 生成 Json文件. 43 | 5. 点击 Class按钮 生成 类文件. 44 | 6. 点击 Asset按钮 生成 ScriptableObject文件. 45 | 7. Sheet Count 指每个表格要读几个sheet. 如果这个数是 1, 生成的文件会自动命名为表格的名字, 否则会命名为 表格名_Sheet名. 46 | 47 | ## 注意: 48 | 1. 对于每个表,前三行都有特殊意义 49 | 1. 表格第一行:数据名称 50 | 2. 表格第二行:数据类型, 仅支持基本类型和Enum(不推荐) 51 | 3. 表格第三行:注释,可以为空 52 | 2. 第一列数据将被用作查找表的Key 53 | 3. 表格名不能重复 (即使文件在不同的目录). 54 | 55 | ## 开发环境: 56 | Unity 2018.3.0f2, .Net 4.x, 如果你是用的是 .Net 2.x, 可能要更换lib文件夹下dlls到对应的版本. 57 | [ExcelDataReader](https://github.com/ExcelDataReader/ExcelDataReader), [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json) 58 | -------------------------------------------------------------------------------- /ProjectSettings/GraphicsSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!30 &1 4 | GraphicsSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 12 7 | m_Deferred: 8 | m_Mode: 1 9 | m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} 10 | m_DeferredReflections: 11 | m_Mode: 1 12 | m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} 13 | m_ScreenSpaceShadows: 14 | m_Mode: 1 15 | m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} 16 | m_LegacyDeferred: 17 | m_Mode: 1 18 | m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} 19 | m_DepthNormals: 20 | m_Mode: 1 21 | m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} 22 | m_MotionVectors: 23 | m_Mode: 1 24 | m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} 25 | m_LightHalo: 26 | m_Mode: 1 27 | m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} 28 | m_LensFlare: 29 | m_Mode: 1 30 | m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} 31 | m_AlwaysIncludedShaders: 32 | - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} 33 | - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} 34 | - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} 35 | - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} 36 | - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} 37 | - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} 38 | - {fileID: 10783, guid: 0000000000000000f000000000000000, type: 0} 39 | m_PreloadedShaders: [] 40 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, 41 | type: 0} 42 | m_CustomRenderPipeline: {fileID: 0} 43 | m_TransparencySortMode: 0 44 | m_TransparencySortAxis: {x: 0, y: 0, z: 1} 45 | m_DefaultRenderingPath: 1 46 | m_DefaultMobileRenderingPath: 1 47 | m_TierSettings: [] 48 | m_LightmapStripping: 0 49 | m_FogStripping: 0 50 | m_InstancingStripping: 0 51 | m_LightmapKeepPlain: 1 52 | m_LightmapKeepDirCombined: 1 53 | m_LightmapKeepDynamicPlain: 1 54 | m_LightmapKeepDynamicDirCombined: 1 55 | m_LightmapKeepShadowMask: 1 56 | m_LightmapKeepSubtractive: 1 57 | m_FogKeepLinear: 1 58 | m_FogKeepExp: 1 59 | m_FogKeepExp2: 1 60 | m_AlbedoSwatchInfos: [] 61 | m_LightsUseLinearIntensity: 0 62 | m_LightsUseColorTemperature: 0 63 | -------------------------------------------------------------------------------- /ProjectSettings/QualitySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!47 &1 4 | QualitySettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 5 7 | m_CurrentQuality: 4 8 | m_QualitySettings: 9 | - serializedVersion: 2 10 | name: Very Low 11 | pixelLightCount: 0 12 | shadows: 0 13 | shadowResolution: 0 14 | shadowProjection: 1 15 | shadowCascades: 1 16 | shadowDistance: 15 17 | shadowNearPlaneOffset: 3 18 | shadowCascade2Split: 0.33333334 19 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 20 | shadowmaskMode: 0 21 | blendWeights: 1 22 | textureQuality: 1 23 | anisotropicTextures: 0 24 | antiAliasing: 0 25 | softParticles: 0 26 | softVegetation: 0 27 | realtimeReflectionProbes: 0 28 | billboardsFaceCameraPosition: 0 29 | vSyncCount: 0 30 | lodBias: 0.3 31 | maximumLODLevel: 0 32 | particleRaycastBudget: 4 33 | asyncUploadTimeSlice: 2 34 | asyncUploadBufferSize: 16 35 | resolutionScalingFixedDPIFactor: 1 36 | excludedTargetPlatforms: [] 37 | - serializedVersion: 2 38 | name: Low 39 | pixelLightCount: 0 40 | shadows: 0 41 | shadowResolution: 0 42 | shadowProjection: 1 43 | shadowCascades: 1 44 | shadowDistance: 20 45 | shadowNearPlaneOffset: 3 46 | shadowCascade2Split: 0.33333334 47 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 48 | shadowmaskMode: 0 49 | blendWeights: 2 50 | textureQuality: 0 51 | anisotropicTextures: 0 52 | antiAliasing: 0 53 | softParticles: 0 54 | softVegetation: 0 55 | realtimeReflectionProbes: 0 56 | billboardsFaceCameraPosition: 0 57 | vSyncCount: 0 58 | lodBias: 0.4 59 | maximumLODLevel: 0 60 | particleRaycastBudget: 16 61 | asyncUploadTimeSlice: 2 62 | asyncUploadBufferSize: 16 63 | resolutionScalingFixedDPIFactor: 1 64 | excludedTargetPlatforms: [] 65 | - serializedVersion: 2 66 | name: Medium 67 | pixelLightCount: 1 68 | shadows: 1 69 | shadowResolution: 0 70 | shadowProjection: 1 71 | shadowCascades: 1 72 | shadowDistance: 20 73 | shadowNearPlaneOffset: 3 74 | shadowCascade2Split: 0.33333334 75 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 76 | shadowmaskMode: 0 77 | blendWeights: 2 78 | textureQuality: 0 79 | anisotropicTextures: 1 80 | antiAliasing: 0 81 | softParticles: 0 82 | softVegetation: 0 83 | realtimeReflectionProbes: 0 84 | billboardsFaceCameraPosition: 0 85 | vSyncCount: 1 86 | lodBias: 0.7 87 | maximumLODLevel: 0 88 | particleRaycastBudget: 64 89 | asyncUploadTimeSlice: 2 90 | asyncUploadBufferSize: 16 91 | resolutionScalingFixedDPIFactor: 1 92 | excludedTargetPlatforms: [] 93 | - serializedVersion: 2 94 | name: High 95 | pixelLightCount: 2 96 | shadows: 2 97 | shadowResolution: 1 98 | shadowProjection: 1 99 | shadowCascades: 2 100 | shadowDistance: 40 101 | shadowNearPlaneOffset: 3 102 | shadowCascade2Split: 0.33333334 103 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 104 | shadowmaskMode: 1 105 | blendWeights: 2 106 | textureQuality: 0 107 | anisotropicTextures: 1 108 | antiAliasing: 2 109 | softParticles: 0 110 | softVegetation: 1 111 | realtimeReflectionProbes: 1 112 | billboardsFaceCameraPosition: 1 113 | vSyncCount: 1 114 | lodBias: 1 115 | maximumLODLevel: 0 116 | particleRaycastBudget: 256 117 | asyncUploadTimeSlice: 2 118 | asyncUploadBufferSize: 16 119 | resolutionScalingFixedDPIFactor: 1 120 | excludedTargetPlatforms: [] 121 | - serializedVersion: 2 122 | name: Very High 123 | pixelLightCount: 3 124 | shadows: 2 125 | shadowResolution: 2 126 | shadowProjection: 1 127 | shadowCascades: 2 128 | shadowDistance: 40 129 | shadowNearPlaneOffset: 3 130 | shadowCascade2Split: 0.33333334 131 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 132 | shadowmaskMode: 1 133 | blendWeights: 4 134 | textureQuality: 0 135 | anisotropicTextures: 1 136 | antiAliasing: 4 137 | softParticles: 1 138 | softVegetation: 1 139 | realtimeReflectionProbes: 1 140 | billboardsFaceCameraPosition: 1 141 | vSyncCount: 1 142 | lodBias: 1.5 143 | maximumLODLevel: 0 144 | particleRaycastBudget: 1024 145 | asyncUploadTimeSlice: 2 146 | asyncUploadBufferSize: 16 147 | resolutionScalingFixedDPIFactor: 1 148 | excludedTargetPlatforms: [] 149 | - serializedVersion: 2 150 | name: Ultra 151 | pixelLightCount: 4 152 | shadows: 2 153 | shadowResolution: 2 154 | shadowProjection: 1 155 | shadowCascades: 4 156 | shadowDistance: 150 157 | shadowNearPlaneOffset: 3 158 | shadowCascade2Split: 0.33333334 159 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 160 | shadowmaskMode: 1 161 | blendWeights: 4 162 | textureQuality: 0 163 | anisotropicTextures: 1 164 | antiAliasing: 4 165 | softParticles: 1 166 | softVegetation: 1 167 | realtimeReflectionProbes: 1 168 | billboardsFaceCameraPosition: 1 169 | vSyncCount: 1 170 | lodBias: 2 171 | maximumLODLevel: 0 172 | particleRaycastBudget: 4096 173 | asyncUploadTimeSlice: 2 174 | asyncUploadBufferSize: 16 175 | resolutionScalingFixedDPIFactor: 1 176 | excludedTargetPlatforms: [] 177 | m_PerPlatformDefaultQuality: 178 | Android: 2 179 | Nintendo 3DS: 5 180 | Nintendo Switch: 5 181 | PS4: 5 182 | PSP2: 2 183 | Standalone: 5 184 | Tizen: 2 185 | WebGL: 3 186 | WiiU: 5 187 | Windows Store Apps: 5 188 | XboxOne: 5 189 | iPhone: 2 190 | tvOS: 2 191 | -------------------------------------------------------------------------------- /ProjectSettings/InputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!13 &1 4 | InputManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Axes: 8 | - serializedVersion: 3 9 | m_Name: Horizontal 10 | descriptiveName: 11 | descriptiveNegativeName: 12 | negativeButton: left 13 | positiveButton: right 14 | altNegativeButton: a 15 | altPositiveButton: d 16 | gravity: 3 17 | dead: 0.001 18 | sensitivity: 3 19 | snap: 1 20 | invert: 0 21 | type: 0 22 | axis: 0 23 | joyNum: 0 24 | - serializedVersion: 3 25 | m_Name: Vertical 26 | descriptiveName: 27 | descriptiveNegativeName: 28 | negativeButton: down 29 | positiveButton: up 30 | altNegativeButton: s 31 | altPositiveButton: w 32 | gravity: 3 33 | dead: 0.001 34 | sensitivity: 3 35 | snap: 1 36 | invert: 0 37 | type: 0 38 | axis: 0 39 | joyNum: 0 40 | - serializedVersion: 3 41 | m_Name: Fire1 42 | descriptiveName: 43 | descriptiveNegativeName: 44 | negativeButton: 45 | positiveButton: left ctrl 46 | altNegativeButton: 47 | altPositiveButton: mouse 0 48 | gravity: 1000 49 | dead: 0.001 50 | sensitivity: 1000 51 | snap: 0 52 | invert: 0 53 | type: 0 54 | axis: 0 55 | joyNum: 0 56 | - serializedVersion: 3 57 | m_Name: Fire2 58 | descriptiveName: 59 | descriptiveNegativeName: 60 | negativeButton: 61 | positiveButton: left alt 62 | altNegativeButton: 63 | altPositiveButton: mouse 1 64 | gravity: 1000 65 | dead: 0.001 66 | sensitivity: 1000 67 | snap: 0 68 | invert: 0 69 | type: 0 70 | axis: 0 71 | joyNum: 0 72 | - serializedVersion: 3 73 | m_Name: Fire3 74 | descriptiveName: 75 | descriptiveNegativeName: 76 | negativeButton: 77 | positiveButton: left shift 78 | altNegativeButton: 79 | altPositiveButton: mouse 2 80 | gravity: 1000 81 | dead: 0.001 82 | sensitivity: 1000 83 | snap: 0 84 | invert: 0 85 | type: 0 86 | axis: 0 87 | joyNum: 0 88 | - serializedVersion: 3 89 | m_Name: Jump 90 | descriptiveName: 91 | descriptiveNegativeName: 92 | negativeButton: 93 | positiveButton: space 94 | altNegativeButton: 95 | altPositiveButton: 96 | gravity: 1000 97 | dead: 0.001 98 | sensitivity: 1000 99 | snap: 0 100 | invert: 0 101 | type: 0 102 | axis: 0 103 | joyNum: 0 104 | - serializedVersion: 3 105 | m_Name: Mouse X 106 | descriptiveName: 107 | descriptiveNegativeName: 108 | negativeButton: 109 | positiveButton: 110 | altNegativeButton: 111 | altPositiveButton: 112 | gravity: 0 113 | dead: 0 114 | sensitivity: 0.1 115 | snap: 0 116 | invert: 0 117 | type: 1 118 | axis: 0 119 | joyNum: 0 120 | - serializedVersion: 3 121 | m_Name: Mouse Y 122 | descriptiveName: 123 | descriptiveNegativeName: 124 | negativeButton: 125 | positiveButton: 126 | altNegativeButton: 127 | altPositiveButton: 128 | gravity: 0 129 | dead: 0 130 | sensitivity: 0.1 131 | snap: 0 132 | invert: 0 133 | type: 1 134 | axis: 1 135 | joyNum: 0 136 | - serializedVersion: 3 137 | m_Name: Mouse ScrollWheel 138 | descriptiveName: 139 | descriptiveNegativeName: 140 | negativeButton: 141 | positiveButton: 142 | altNegativeButton: 143 | altPositiveButton: 144 | gravity: 0 145 | dead: 0 146 | sensitivity: 0.1 147 | snap: 0 148 | invert: 0 149 | type: 1 150 | axis: 2 151 | joyNum: 0 152 | - serializedVersion: 3 153 | m_Name: Horizontal 154 | descriptiveName: 155 | descriptiveNegativeName: 156 | negativeButton: 157 | positiveButton: 158 | altNegativeButton: 159 | altPositiveButton: 160 | gravity: 0 161 | dead: 0.19 162 | sensitivity: 1 163 | snap: 0 164 | invert: 0 165 | type: 2 166 | axis: 0 167 | joyNum: 0 168 | - serializedVersion: 3 169 | m_Name: Vertical 170 | descriptiveName: 171 | descriptiveNegativeName: 172 | negativeButton: 173 | positiveButton: 174 | altNegativeButton: 175 | altPositiveButton: 176 | gravity: 0 177 | dead: 0.19 178 | sensitivity: 1 179 | snap: 0 180 | invert: 1 181 | type: 2 182 | axis: 1 183 | joyNum: 0 184 | - serializedVersion: 3 185 | m_Name: Fire1 186 | descriptiveName: 187 | descriptiveNegativeName: 188 | negativeButton: 189 | positiveButton: joystick button 0 190 | altNegativeButton: 191 | altPositiveButton: 192 | gravity: 1000 193 | dead: 0.001 194 | sensitivity: 1000 195 | snap: 0 196 | invert: 0 197 | type: 0 198 | axis: 0 199 | joyNum: 0 200 | - serializedVersion: 3 201 | m_Name: Fire2 202 | descriptiveName: 203 | descriptiveNegativeName: 204 | negativeButton: 205 | positiveButton: joystick button 1 206 | altNegativeButton: 207 | altPositiveButton: 208 | gravity: 1000 209 | dead: 0.001 210 | sensitivity: 1000 211 | snap: 0 212 | invert: 0 213 | type: 0 214 | axis: 0 215 | joyNum: 0 216 | - serializedVersion: 3 217 | m_Name: Fire3 218 | descriptiveName: 219 | descriptiveNegativeName: 220 | negativeButton: 221 | positiveButton: joystick button 2 222 | altNegativeButton: 223 | altPositiveButton: 224 | gravity: 1000 225 | dead: 0.001 226 | sensitivity: 1000 227 | snap: 0 228 | invert: 0 229 | type: 0 230 | axis: 0 231 | joyNum: 0 232 | - serializedVersion: 3 233 | m_Name: Jump 234 | descriptiveName: 235 | descriptiveNegativeName: 236 | negativeButton: 237 | positiveButton: joystick button 3 238 | altNegativeButton: 239 | altPositiveButton: 240 | gravity: 1000 241 | dead: 0.001 242 | sensitivity: 1000 243 | snap: 0 244 | invert: 0 245 | type: 0 246 | axis: 0 247 | joyNum: 0 248 | - serializedVersion: 3 249 | m_Name: Submit 250 | descriptiveName: 251 | descriptiveNegativeName: 252 | negativeButton: 253 | positiveButton: return 254 | altNegativeButton: 255 | altPositiveButton: joystick button 0 256 | gravity: 1000 257 | dead: 0.001 258 | sensitivity: 1000 259 | snap: 0 260 | invert: 0 261 | type: 0 262 | axis: 0 263 | joyNum: 0 264 | - serializedVersion: 3 265 | m_Name: Submit 266 | descriptiveName: 267 | descriptiveNegativeName: 268 | negativeButton: 269 | positiveButton: enter 270 | altNegativeButton: 271 | altPositiveButton: space 272 | gravity: 1000 273 | dead: 0.001 274 | sensitivity: 1000 275 | snap: 0 276 | invert: 0 277 | type: 0 278 | axis: 0 279 | joyNum: 0 280 | - serializedVersion: 3 281 | m_Name: Cancel 282 | descriptiveName: 283 | descriptiveNegativeName: 284 | negativeButton: 285 | positiveButton: escape 286 | altNegativeButton: 287 | altPositiveButton: joystick button 1 288 | gravity: 1000 289 | dead: 0.001 290 | sensitivity: 1000 291 | snap: 0 292 | invert: 0 293 | type: 0 294 | axis: 0 295 | joyNum: 0 296 | -------------------------------------------------------------------------------- /Assets/ExcelTool/Demo/ExcelToolDemo.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | OcclusionCullingSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_OcclusionBakeSettings: 8 | smallestOccluder: 5 9 | smallestHole: 0.25 10 | backfaceThreshold: 100 11 | m_SceneGUID: 00000000000000000000000000000000 12 | m_OcclusionCullingData: {fileID: 0} 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_ObjectHideFlags: 0 16 | serializedVersion: 9 17 | m_Fog: 0 18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} 19 | m_FogMode: 3 20 | m_FogDensity: 0.01 21 | m_LinearFogStart: 0 22 | m_LinearFogEnd: 300 23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} 24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} 25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} 26 | m_AmbientIntensity: 1 27 | m_AmbientMode: 0 28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} 29 | m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} 30 | m_HaloStrength: 0.5 31 | m_FlareStrength: 1 32 | m_FlareFadeSpeed: 3 33 | m_HaloTexture: {fileID: 0} 34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} 35 | m_DefaultReflectionMode: 0 36 | m_DefaultReflectionResolution: 128 37 | m_ReflectionBounces: 1 38 | m_ReflectionIntensity: 1 39 | m_CustomReflection: {fileID: 0} 40 | m_Sun: {fileID: 0} 41 | m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} 42 | m_UseRadianceAmbientProbe: 0 43 | --- !u!157 &3 44 | LightmapSettings: 45 | m_ObjectHideFlags: 0 46 | serializedVersion: 11 47 | m_GIWorkflowMode: 0 48 | m_GISettings: 49 | serializedVersion: 2 50 | m_BounceScale: 1 51 | m_IndirectOutputScale: 1 52 | m_AlbedoBoost: 1 53 | m_EnvironmentLightingMode: 0 54 | m_EnableBakedLightmaps: 1 55 | m_EnableRealtimeLightmaps: 1 56 | m_LightmapEditorSettings: 57 | serializedVersion: 10 58 | m_Resolution: 2 59 | m_BakeResolution: 40 60 | m_AtlasSize: 1024 61 | m_AO: 0 62 | m_AOMaxDistance: 1 63 | m_CompAOExponent: 1 64 | m_CompAOExponentDirect: 0 65 | m_Padding: 2 66 | m_LightmapParameters: {fileID: 0} 67 | m_LightmapsBakeMode: 1 68 | m_TextureCompression: 1 69 | m_FinalGather: 0 70 | m_FinalGatherFiltering: 1 71 | m_FinalGatherRayCount: 256 72 | m_ReflectionCompression: 2 73 | m_MixedBakeMode: 2 74 | m_BakeBackend: 1 75 | m_PVRSampling: 1 76 | m_PVRDirectSampleCount: 32 77 | m_PVRSampleCount: 500 78 | m_PVRBounces: 2 79 | m_PVRFilterTypeDirect: 0 80 | m_PVRFilterTypeIndirect: 0 81 | m_PVRFilterTypeAO: 0 82 | m_PVRFilteringMode: 1 83 | m_PVRCulling: 1 84 | m_PVRFilteringGaussRadiusDirect: 1 85 | m_PVRFilteringGaussRadiusIndirect: 5 86 | m_PVRFilteringGaussRadiusAO: 2 87 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5 88 | m_PVRFilteringAtrousPositionSigmaIndirect: 2 89 | m_PVRFilteringAtrousPositionSigmaAO: 1 90 | m_ShowResolutionOverlay: 1 91 | m_LightingDataAsset: {fileID: 0} 92 | m_UseShadowmask: 1 93 | --- !u!196 &4 94 | NavMeshSettings: 95 | serializedVersion: 2 96 | m_ObjectHideFlags: 0 97 | m_BuildSettings: 98 | serializedVersion: 2 99 | agentTypeID: 0 100 | agentRadius: 0.5 101 | agentHeight: 2 102 | agentSlope: 45 103 | agentClimb: 0.4 104 | ledgeDropHeight: 0 105 | maxJumpAcrossDistance: 0 106 | minRegionArea: 2 107 | manualCellSize: 0 108 | cellSize: 0.16666667 109 | manualTileSize: 0 110 | tileSize: 256 111 | accuratePlacement: 0 112 | debug: 113 | m_Flags: 0 114 | m_NavMeshData: {fileID: 0} 115 | --- !u!1 &833537790 116 | GameObject: 117 | m_ObjectHideFlags: 0 118 | m_CorrespondingSourceObject: {fileID: 0} 119 | m_PrefabInstance: {fileID: 0} 120 | m_PrefabAsset: {fileID: 0} 121 | serializedVersion: 6 122 | m_Component: 123 | - component: {fileID: 833537791} 124 | - component: {fileID: 833537792} 125 | m_Layer: 0 126 | m_Name: ExcelDemo 127 | m_TagString: Untagged 128 | m_Icon: {fileID: 0} 129 | m_NavMeshLayer: 0 130 | m_StaticEditorFlags: 0 131 | m_IsActive: 1 132 | --- !u!4 &833537791 133 | Transform: 134 | m_ObjectHideFlags: 0 135 | m_CorrespondingSourceObject: {fileID: 0} 136 | m_PrefabInstance: {fileID: 0} 137 | m_PrefabAsset: {fileID: 0} 138 | m_GameObject: {fileID: 833537790} 139 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 140 | m_LocalPosition: {x: 0, y: 0, z: 0} 141 | m_LocalScale: {x: 1, y: 1, z: 1} 142 | m_Children: [] 143 | m_Father: {fileID: 0} 144 | m_RootOrder: 2 145 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 146 | --- !u!114 &833537792 147 | MonoBehaviour: 148 | m_ObjectHideFlags: 0 149 | m_CorrespondingSourceObject: {fileID: 0} 150 | m_PrefabInstance: {fileID: 0} 151 | m_PrefabAsset: {fileID: 0} 152 | m_GameObject: {fileID: 833537790} 153 | m_Enabled: 1 154 | m_EditorHideFlags: 0 155 | m_Script: {fileID: 11500000, guid: 55a11fe02f44b9d48bd2f239e1f331c2, type: 3} 156 | m_Name: 157 | m_EditorClassIdentifier: 158 | Table1: {fileID: 11400000, guid: 79773bcd9d255824089e1e72d393d294, type: 2} 159 | Table2: {fileID: 11400000, guid: ec083cfeabb199946912d31629c30d57, type: 2} 160 | --- !u!1 &2052876394 161 | GameObject: 162 | m_ObjectHideFlags: 0 163 | m_CorrespondingSourceObject: {fileID: 0} 164 | m_PrefabInstance: {fileID: 0} 165 | m_PrefabAsset: {fileID: 0} 166 | serializedVersion: 6 167 | m_Component: 168 | - component: {fileID: 2052876398} 169 | - component: {fileID: 2052876397} 170 | - component: {fileID: 2052876396} 171 | m_Layer: 0 172 | m_Name: Main Camera 173 | m_TagString: MainCamera 174 | m_Icon: {fileID: 0} 175 | m_NavMeshLayer: 0 176 | m_StaticEditorFlags: 0 177 | m_IsActive: 1 178 | --- !u!81 &2052876396 179 | AudioListener: 180 | m_ObjectHideFlags: 0 181 | m_CorrespondingSourceObject: {fileID: 0} 182 | m_PrefabInstance: {fileID: 0} 183 | m_PrefabAsset: {fileID: 0} 184 | m_GameObject: {fileID: 2052876394} 185 | m_Enabled: 1 186 | --- !u!20 &2052876397 187 | Camera: 188 | m_ObjectHideFlags: 0 189 | m_CorrespondingSourceObject: {fileID: 0} 190 | m_PrefabInstance: {fileID: 0} 191 | m_PrefabAsset: {fileID: 0} 192 | m_GameObject: {fileID: 2052876394} 193 | m_Enabled: 1 194 | serializedVersion: 2 195 | m_ClearFlags: 1 196 | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} 197 | m_projectionMatrixMode: 1 198 | m_SensorSize: {x: 36, y: 24} 199 | m_LensShift: {x: 0, y: 0} 200 | m_GateFitMode: 2 201 | m_FocalLength: 50 202 | m_NormalizedViewPortRect: 203 | serializedVersion: 2 204 | x: 0 205 | y: 0 206 | width: 1 207 | height: 1 208 | near clip plane: 0.3 209 | far clip plane: 1000 210 | field of view: 60 211 | orthographic: 0 212 | orthographic size: 5 213 | m_Depth: -1 214 | m_CullingMask: 215 | serializedVersion: 2 216 | m_Bits: 4294967295 217 | m_RenderingPath: -1 218 | m_TargetTexture: {fileID: 0} 219 | m_TargetDisplay: 0 220 | m_TargetEye: 3 221 | m_HDR: 1 222 | m_AllowMSAA: 1 223 | m_AllowDynamicResolution: 0 224 | m_ForceIntoRT: 0 225 | m_OcclusionCulling: 1 226 | m_StereoConvergence: 10 227 | m_StereoSeparation: 0.022 228 | --- !u!4 &2052876398 229 | Transform: 230 | m_ObjectHideFlags: 0 231 | m_CorrespondingSourceObject: {fileID: 0} 232 | m_PrefabInstance: {fileID: 0} 233 | m_PrefabAsset: {fileID: 0} 234 | m_GameObject: {fileID: 2052876394} 235 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 236 | m_LocalPosition: {x: 0, y: 1, z: -10} 237 | m_LocalScale: {x: 1, y: 1, z: 1} 238 | m_Children: [] 239 | m_Father: {fileID: 0} 240 | m_RootOrder: 0 241 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 242 | --- !u!1 &2125043472 243 | GameObject: 244 | m_ObjectHideFlags: 0 245 | m_CorrespondingSourceObject: {fileID: 0} 246 | m_PrefabInstance: {fileID: 0} 247 | m_PrefabAsset: {fileID: 0} 248 | serializedVersion: 6 249 | m_Component: 250 | - component: {fileID: 2125043474} 251 | - component: {fileID: 2125043473} 252 | m_Layer: 0 253 | m_Name: Directional Light 254 | m_TagString: Untagged 255 | m_Icon: {fileID: 0} 256 | m_NavMeshLayer: 0 257 | m_StaticEditorFlags: 0 258 | m_IsActive: 1 259 | --- !u!108 &2125043473 260 | Light: 261 | m_ObjectHideFlags: 0 262 | m_CorrespondingSourceObject: {fileID: 0} 263 | m_PrefabInstance: {fileID: 0} 264 | m_PrefabAsset: {fileID: 0} 265 | m_GameObject: {fileID: 2125043472} 266 | m_Enabled: 1 267 | serializedVersion: 8 268 | m_Type: 1 269 | m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} 270 | m_Intensity: 1 271 | m_Range: 10 272 | m_SpotAngle: 30 273 | m_CookieSize: 10 274 | m_Shadows: 275 | m_Type: 2 276 | m_Resolution: -1 277 | m_CustomResolution: -1 278 | m_Strength: 1 279 | m_Bias: 0.05 280 | m_NormalBias: 0.4 281 | m_NearPlane: 0.2 282 | m_Cookie: {fileID: 0} 283 | m_DrawHalo: 0 284 | m_Flare: {fileID: 0} 285 | m_RenderMode: 0 286 | m_CullingMask: 287 | serializedVersion: 2 288 | m_Bits: 4294967295 289 | m_Lightmapping: 4 290 | m_LightShadowCasterMode: 0 291 | m_AreaSize: {x: 1, y: 1} 292 | m_BounceIntensity: 1 293 | m_ColorTemperature: 6570 294 | m_UseColorTemperature: 0 295 | m_ShadowRadius: 0 296 | m_ShadowAngle: 0 297 | --- !u!4 &2125043474 298 | Transform: 299 | m_ObjectHideFlags: 0 300 | m_CorrespondingSourceObject: {fileID: 0} 301 | m_PrefabInstance: {fileID: 0} 302 | m_PrefabAsset: {fileID: 0} 303 | m_GameObject: {fileID: 2125043472} 304 | m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} 305 | m_LocalPosition: {x: 0, y: 3, z: 0} 306 | m_LocalScale: {x: 1, y: 1, z: 1} 307 | m_Children: [] 308 | m_Father: {fileID: 0} 309 | m_RootOrder: 1 310 | m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} 311 | -------------------------------------------------------------------------------- /Assets/ExcelTool/scripts/Editor/ExcelWindow.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using UnityEditor; 6 | using UnityEngine; 7 | 8 | [Serializable] 9 | public class ExcelWindow : EditorWindow 10 | { 11 | private const string KeyFilePath = "Excel_FilePath"; 12 | private const string KeyOutPath = "Excel_OutPath"; 13 | private const string KeySheetCount = "Excel_SheetCount"; 14 | private const string KeyIncSub = "Excel_IncSub"; 15 | 16 | private string filePath; // source excel file path 17 | private string outPath; // output path 18 | private bool isIncSub; // whether include subdirectories 19 | private int sheetCount = 1; // load sheet count. 0 means all. 20 | 21 | private int excelFileCount; 22 | private List excelFiles; 23 | private List isUseFiles; 24 | 25 | private const int H1 = 140; 26 | private const int H2 = 160; 27 | private const int H3 = 90; 28 | 29 | private int genResult; 30 | 31 | enum LogState 32 | { 33 | None, 34 | NoSrcFolder, 35 | NoOutFolder, 36 | NoExcelFiles, 37 | WaitngOperate, 38 | GenSuccess, 39 | GenFailed, 40 | NameDuplicated 41 | } 42 | private static LogState curLogState; 43 | 44 | 45 | [MenuItem("Window/Excel Tool Window")] 46 | public static void ShowWindow() 47 | { 48 | //GetWindowWithRect(typeof(ExcelWindow), new Rect(50, 100, 600, 600)); 49 | GetWindow(typeof(ExcelWindow), false, "Excel Tool"); 50 | } 51 | 52 | private void OnEnable() 53 | { 54 | filePath = EditorPrefs.GetString(KeyFilePath, Application.dataPath); 55 | outPath = EditorPrefs.GetString(KeyOutPath, Application.dataPath + "/Tables"); 56 | sheetCount = EditorPrefs.GetInt(KeySheetCount, 1); 57 | isIncSub = EditorPrefs.GetBool(KeyIncSub, false); 58 | 59 | LoadExcelFiles(); 60 | } 61 | 62 | 63 | void OnGUI() 64 | { 65 | DrawPath(); 66 | 67 | DrawFileInfos(); 68 | 69 | DrawExcelFiles(); 70 | 71 | DrawInfo(); 72 | 73 | DrawLogArea(); 74 | } 75 | 76 | /// 77 | /// browse excel file path and output file path 78 | /// 79 | void DrawPath() 80 | { 81 | EditorGUILayout.LabelField("Settings", EditorStyles.boldLabel); 82 | 83 | GUIStyle tfstyle = new GUIStyle(GUI.skin.textField){alignment = TextAnchor.MiddleLeft, fixedHeight = 19}; 84 | 85 | // choose excel path 86 | GUILayout.Space(5); 87 | EditorGUILayout.BeginHorizontal(); 88 | EditorGUIUtility.labelWidth = 80; 89 | filePath = EditorGUILayout.TextField ("Excel Path:", filePath, tfstyle); 90 | 91 | if (GUILayout.Button("Browse", GUILayout.Width(80))) 92 | { 93 | string tmpPath = EditorUtility.OpenFolderPanel("Choose Excel Files Forlder", "", ""); 94 | if (!string.IsNullOrEmpty(tmpPath) && tmpPath != filePath) 95 | { 96 | filePath = tmpPath; 97 | LoadExcelFiles(); 98 | } 99 | } 100 | EditorGUILayout.EndHorizontal(); 101 | 102 | // choose output path 103 | GUILayout.Space(5); 104 | EditorGUILayout.BeginHorizontal(); 105 | EditorGUIUtility.labelWidth = 80; 106 | outPath = EditorGUILayout.TextField ("Output Path:", outPath, tfstyle); 107 | 108 | if (GUILayout.Button("Browse", GUILayout.Width(80))) 109 | { 110 | outPath = EditorUtility.OpenFolderPanel("Choose Excel Files Forlder", "", ""); 111 | EditorPrefs.SetString(KeyOutPath, outPath); 112 | } 113 | EditorGUILayout.EndHorizontal(); 114 | } 115 | 116 | 117 | /// 118 | /// file count, checkbox of whether scan subdir, and refresh button 119 | /// 120 | void DrawFileInfos() 121 | { 122 | GUILayout.Space(20); 123 | EditorGUILayout.LabelField("Excel Files", EditorStyles.boldLabel, GUILayout.Width(100)); 124 | 125 | GUILayout.Space(5); 126 | EditorGUILayout.BeginHorizontal(); 127 | EditorGUILayout.LabelField("File count: " + excelFileCount, GUILayout.Width(85)); 128 | bool _isIncSub = GUILayout.Toggle(isIncSub, "Include subdirectories"); 129 | 130 | if (_isIncSub != isIncSub) 131 | { 132 | isIncSub = _isIncSub; 133 | EditorPrefs.SetBool(KeyIncSub, isIncSub); 134 | LoadExcelFiles(); 135 | } 136 | 137 | GUILayout.Space(20); 138 | if (GUILayout.Button("Refresh", GUILayout.Width(80))) 139 | { 140 | LoadExcelFiles(); 141 | } 142 | GUILayout.FlexibleSpace(); 143 | EditorGUILayout.EndHorizontal(); 144 | } 145 | 146 | /// 147 | /// list of excle tables 148 | /// 149 | void DrawExcelFiles() 150 | { 151 | Rect rect = new Rect(5, H1, position.width - 10, position.height - H1 - H2 - H3 - 30); 152 | EditorGUI.DrawRect(rect, new Color(0.8f, 0.8f, 0.8f)); 153 | GUILayout.BeginArea(new Rect(rect.x + 5, rect.y + 5, rect.width - 10, rect.height - 10)); 154 | 155 | if (string.IsNullOrEmpty(filePath)) 156 | { 157 | curLogState = LogState.NoSrcFolder; 158 | } 159 | else if(excelFiles == null || excelFiles.Count < 1) 160 | { 161 | curLogState = LogState.NoExcelFiles; 162 | } 163 | else 164 | { 165 | for (int i = 0; i < excelFileCount; i++) 166 | { 167 | isUseFiles[i] = GUILayout.Toggle(isUseFiles[i], excelFiles[i].FullName); 168 | } 169 | 170 | if (string.IsNullOrEmpty(outPath)) 171 | { 172 | curLogState = LogState.NoOutFolder; 173 | } 174 | else if (curLogState != LogState.GenSuccess && curLogState != LogState.GenFailed && curLogState != LogState.NameDuplicated) 175 | { 176 | curLogState = LogState.WaitngOperate; 177 | } 178 | } 179 | 180 | GUILayout.EndArea(); 181 | } 182 | 183 | void DrawInfo() 184 | { 185 | Rect rect = new Rect(5, position.height - H2 - H3 - 20, position.width - 10, H2); 186 | EditorGUI.DrawRect(rect, new Color(0.7f, 0.7f, 0.7f)); 187 | GUILayout.BeginArea(rect); 188 | 189 | EditorGUILayout.LabelField("Notes:", EditorStyles.boldLabel); 190 | EditorGUILayout.LabelField("1. First row of table: name of data (表格第一行:数据名称)", new GUIStyle {fontSize = 12}); 191 | EditorGUILayout.LabelField("2. Second row of table: type of data, only support base type and Enum \n(表格第二行:数据类型, 仅支持基本类型和Enum)", new GUIStyle {fontSize = 12}, GUILayout.Height(30)); 192 | EditorGUILayout.LabelField("3. Third row of table: comment of data, could be empty (表格第三行:注释,可以为空)", new GUIStyle {fontSize = 12}); 193 | EditorGUILayout.LabelField("4. First column data will be the key to find table (第一列数据将被用作查找表的Key)", new GUIStyle {fontSize = 12}); 194 | EditorGUILayout.LabelField("5. All Excel filenames cannot be duplicated (表格名不能重复)", new GUIStyle {fontSize = 12}); 195 | 196 | EditorGUILayout.LabelField("6. If you want to generate Asset, you must have auot generated class first! \n(如果要生成SO资源文件,必须先有自动生成的类文件)", new GUIStyle {richText = true, fontSize = 12}, GUILayout.Height(40)); 197 | 198 | GUILayout.EndArea(); 199 | } 200 | 201 | 202 | void DrawLogArea() 203 | { 204 | //EditorGUI.DrawRect(new Rect(5, position.height - H3 - 10, position.width - 10, H3), Color.green); 205 | GUILayout.BeginArea(new Rect(5, position.height - H3 - 10, position.width - 10, H3)); 206 | 207 | GUILayout.Space(5); 208 | 209 | GUILayout.BeginHorizontal(); 210 | EditorGUILayout.LabelField("Sheet Count (0 means all): ", GUILayout.Width(170)); 211 | string sheetNum = EditorGUILayout.TextField("", sheetCount.ToString(), GUILayout.Width(40)); 212 | int.TryParse(sheetNum, out sheetCount); 213 | EditorPrefs.SetInt(KeySheetCount, sheetCount); 214 | GUILayout.FlexibleSpace(); 215 | GUILayout.EndHorizontal(); 216 | 217 | GUILayout.Space(5); 218 | 219 | EditorGUILayout.BeginHorizontal(); 220 | GUI.backgroundColor = new Color(0.85f, 1f, 1f); 221 | 222 | if (GUILayout.Button("Json", GUILayout.Width(80), GUILayout.Height(30))) 223 | { 224 | GenerateJson(); 225 | } 226 | GUILayout.Space(10); 227 | 228 | GUI.backgroundColor = new Color(0.7f, 1f, 0.7f); 229 | if (GUILayout.Button("Class", GUILayout.Width(80), GUILayout.Height(30))) 230 | { 231 | GenerateClass(); 232 | } 233 | GUILayout.Space(10); 234 | 235 | if (GUILayout.Button("Asset", GUILayout.Width(80), GUILayout.Height(30))) 236 | { 237 | GenerateAsset(); 238 | } 239 | 240 | EditorGUILayout.EndHorizontal(); 241 | 242 | GUILayout.Space(10); 243 | 244 | string logInfo = ""; 245 | switch (curLogState) 246 | { 247 | case LogState.None: 248 | break; 249 | case LogState.NoSrcFolder: 250 | logInfo = "Please select a Folder of excel files!"; 251 | break; 252 | case LogState.NoOutFolder: 253 | logInfo = "Please select an output Folder!"; 254 | break; 255 | case LogState.NoExcelFiles: 256 | logInfo = "No Excel Files! Click refresh button to load files."; 257 | break; 258 | case LogState.WaitngOperate: 259 | logInfo = "Click Button to Start"; 260 | break; 261 | case LogState.GenSuccess: 262 | logInfo = $"Sucdcess! Generated {genResult} Files."; 263 | break; 264 | case LogState.GenFailed: 265 | logInfo = "Generate Failed!"; 266 | break; 267 | case LogState.NameDuplicated: 268 | logInfo = "Error: Name Duplicated!"; 269 | break; 270 | } 271 | 272 | EditorGUILayout.LabelField(logInfo, new GUIStyle(){richText = true}); 273 | GUILayout.EndArea(); 274 | } 275 | 276 | void LoadExcelFiles() 277 | { 278 | if(string.IsNullOrEmpty(filePath)) return; 279 | 280 | EditorPrefs.SetString(KeyFilePath, filePath); 281 | 282 | excelFiles = new List(); 283 | GetFolderFiles(excelFiles, filePath, isIncSub); 284 | excelFileCount = excelFiles.Count; 285 | 286 | isUseFiles = new List(Enumerable.Repeat(true, excelFileCount)); 287 | curLogState = HaveDuplicatedName() ? LogState.NameDuplicated : LogState.None; 288 | genResult = 0; 289 | } 290 | 291 | void GetFolderFiles(List files, string path, bool incSub = false) 292 | { 293 | DirectoryInfo folder = new DirectoryInfo(path); 294 | if (!folder.Exists) return; 295 | 296 | files.AddRange(GetFilesByExtensions(folder, ".xlsx", ".xls")); 297 | 298 | if (incSub) 299 | { 300 | foreach (var info in folder.GetDirectories()) 301 | { 302 | GetFolderFiles(files, info.FullName, true); 303 | } 304 | } 305 | } 306 | 307 | 308 | IEnumerable GetFilesByExtensions(DirectoryInfo dir, params string[] extensions) 309 | { 310 | if (extensions == null) return null; 311 | 312 | IEnumerable files = dir.EnumerateFiles(); 313 | return files.Where(f => extensions.Contains(f.Extension.ToLower())); 314 | } 315 | 316 | 317 | bool HaveDuplicatedName() 318 | { 319 | if (excelFiles == null || excelFiles.Count <= 0) return false; 320 | 321 | List names = new List(); 322 | foreach (var file in excelFiles) 323 | { 324 | string fileName = Path.GetFileNameWithoutExtension(file.FullName); 325 | if (names.Contains(fileName)) 326 | { 327 | return true; 328 | } 329 | names.Add(fileName); 330 | } 331 | return false; 332 | } 333 | 334 | bool CanGenerate() 335 | { 336 | if (curLogState == LogState.NameDuplicated || curLogState == LogState.NoExcelFiles || 337 | curLogState == LogState.NoOutFolder || curLogState == LogState.NoSrcFolder) return false; 338 | if (excelFiles == null || excelFiles.Count <= 0) 339 | { 340 | Debug.LogError("Error! No Excel Files!"); 341 | return false; 342 | } 343 | 344 | if (string.IsNullOrEmpty(outPath)) 345 | { 346 | Debug.LogError("Error! No Output Folder!"); 347 | return false; 348 | } 349 | 350 | return true; 351 | } 352 | 353 | void GenerateJson() 354 | { 355 | if(!CanGenerate()) return; 356 | 357 | FileExporter exporter = new FileExporter(excelFiles, isUseFiles, outPath, sheetCount, 3); 358 | genResult = exporter.SaveJsonFiles(); 359 | curLogState = genResult > 0 ? LogState.GenSuccess : LogState.GenFailed; 360 | AssetDatabase.Refresh(); 361 | } 362 | 363 | void GenerateClass() 364 | { 365 | if(!CanGenerate()) return; 366 | 367 | FileExporter exporter = new FileExporter(excelFiles, isUseFiles, outPath, sheetCount, 3); 368 | genResult = exporter.SaveCsFiles(); 369 | curLogState = genResult > 0 ? LogState.GenSuccess : LogState.GenFailed; 370 | AssetDatabase.Refresh(); 371 | } 372 | 373 | void GenerateAsset() 374 | { 375 | if(!CanGenerate()) return; 376 | 377 | FileExporter exporter = new FileExporter(excelFiles, isUseFiles, outPath, sheetCount, 3); 378 | genResult = exporter.SaveSOFiles(); 379 | curLogState = genResult > 0 ? LogState.GenSuccess : LogState.GenFailed; 380 | AssetDatabase.Refresh(); 381 | } 382 | 383 | 384 | void ClearDir(string path) 385 | { 386 | if (!Directory.Exists(path)) 387 | { 388 | Directory.CreateDirectory(path); 389 | } 390 | 391 | DirectoryInfo dir = new DirectoryInfo(path); 392 | FileInfo[] files = dir.GetFiles(); 393 | 394 | foreach (var item in files) 395 | { 396 | File.Delete(item.FullName); 397 | } 398 | if (dir.GetDirectories().Length != 0) 399 | { 400 | foreach (var item in dir.GetDirectories()) 401 | { 402 | if (!item.ToString().Contains("$") && (!item.ToString().Contains("Boot"))) 403 | { 404 | ClearDir(Path.Combine(dir.ToString(), item.ToString())); 405 | } 406 | } 407 | } 408 | } 409 | 410 | 411 | } 412 | -------------------------------------------------------------------------------- /Assets/ExcelTool/scripts/Editor/FileExporter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Data; 4 | using System.IO; 5 | using System.Linq; 6 | using System.Reflection; 7 | using System.Text; 8 | using UnityEngine; 9 | using ExcelDataReader; 10 | using Newtonsoft.Json; 11 | using UnityEditor; 12 | 13 | public class FileExporter 14 | { 15 | private readonly List srcFiles; 16 | private readonly List isUseFiles; 17 | private readonly string savePath; 18 | private readonly int sheetCount; 19 | private readonly int headerRows; 20 | 21 | public FileExporter(List _srcFiles, List _isUseFiles, string _savePath, int _sheetCount, 22 | int _headerRows) 23 | { 24 | srcFiles = _srcFiles; 25 | isUseFiles = _isUseFiles; 26 | savePath = _savePath; 27 | sheetCount = _sheetCount; 28 | headerRows = _headerRows; 29 | } 30 | 31 | public int SaveJsonFiles() 32 | { 33 | return ReadAllTables(SaveSheetJson); 34 | } 35 | 36 | public int SaveCsFiles() 37 | { 38 | return ReadAllTables(SaveSheetCs); 39 | } 40 | 41 | public int SaveSOFiles() 42 | { 43 | return ReadAllTables(SaveTableAsset); 44 | } 45 | 46 | 47 | #region Read Table 48 | 49 | int ReadAllTables(Func exportFunc) 50 | { 51 | if (srcFiles == null || srcFiles.Count <= 0) 52 | { 53 | Debug.LogError("Error! No Excel Files!"); 54 | return -1; 55 | } 56 | 57 | int result = 0; 58 | for (var i = 0; i < srcFiles.Count; i++) 59 | { 60 | if (isUseFiles[i]) 61 | { 62 | var file = srcFiles[i]; 63 | result += ReadTable(file.FullName, FileNameNoExt(file.Name), exportFunc); 64 | } 65 | } 66 | 67 | return result; 68 | } 69 | 70 | int ReadTable(string path, string fileName, Func exportFunc) 71 | { 72 | int result = 0; 73 | using (var stream = File.Open(path, FileMode.Open, FileAccess.Read)) 74 | { 75 | using (var reader = ExcelReaderFactory.CreateReader(stream)) 76 | { 77 | int tableSheetNum = reader.ResultsCount; 78 | if (tableSheetNum < 1) 79 | { 80 | Debug.LogError("Excel file is empty: " + path); 81 | return -1; 82 | } 83 | 84 | var dataSet = reader.AsDataSet(); 85 | 86 | int checkCount = sheetCount <= 0 ? tableSheetNum : sheetCount; 87 | for (int i = 0; i < checkCount; i++) 88 | { 89 | if (i < tableSheetNum) 90 | { 91 | string name = checkCount == 1 ? 92 | fileName : 93 | fileName + "_" + dataSet.Tables[i].TableName; 94 | //result += SaveJson(dataSet.Tables[i], name); 95 | result += exportFunc(dataSet.Tables[i], name); 96 | } 97 | } 98 | } 99 | } 100 | return result; 101 | } 102 | 103 | #endregion 104 | 105 | 106 | #region Save Json Files 107 | 108 | int SaveSheetJson(DataTable sheet, string fileName) 109 | { 110 | if (sheet.Rows.Count <= 0) 111 | { 112 | Debug.LogError("Excel Sheet is empty: " + sheet.TableName); 113 | return -1; 114 | } 115 | 116 | int columns = sheet.Columns.Count; 117 | int rows = sheet.Rows.Count; 118 | 119 | List> tData = new List>(); 120 | 121 | for (int i = headerRows; i < rows; i++) 122 | { 123 | Dictionary rowData = new Dictionary(); 124 | for (int j = 0; j < columns; j++) 125 | { 126 | string key = sheet.Rows[0][j].ToString(); 127 | rowData[key] = sheet.Rows[i][j]; 128 | } 129 | 130 | tData.Add(rowData); 131 | } 132 | 133 | string json = JsonConvert.SerializeObject(tData, Formatting.Indented); 134 | 135 | // save to file 136 | string dstFolder = savePath + "/TableJson/"; 137 | if (!Directory.Exists(dstFolder)) 138 | { 139 | Directory.CreateDirectory(dstFolder); 140 | } 141 | 142 | string path = dstFolder + fileName + ".json"; 143 | using (FileStream fileStream = new FileStream(path, FileMode.Create, FileAccess.Write)) 144 | { 145 | using (TextWriter textWriter = new StreamWriter(fileStream, Encoding.UTF8)) 146 | { 147 | textWriter.Write(json); 148 | Debug.Log("File saved: " + path); 149 | return 1; 150 | } 151 | } 152 | } 153 | 154 | #endregion 155 | 156 | 157 | 158 | #region Save Class File 159 | 160 | int SaveSheetCs(DataTable sheet, string fileName) 161 | { 162 | if (sheet.Rows.Count < 2) 163 | { 164 | Debug.LogError("Excel Sheet is empty: " + sheet.TableName); 165 | return -1; 166 | } 167 | 168 | // write table data class 169 | int r1 = SaveTableClass(sheet, fileName); 170 | 171 | // write scriptable object TableSet class 172 | if (r1 > 0) 173 | { 174 | int r2 = SaveTableSet(sheet, fileName); 175 | return r2; 176 | } 177 | 178 | return -1; 179 | } 180 | 181 | int SaveTableClass(DataTable sheet, string fileName) 182 | { 183 | StringBuilder sb = new StringBuilder(); 184 | sb.AppendLine("/// "); 185 | sb.AppendLine($"/// Auto Generated Class by ExcelTool. From Table: {fileName}"); 186 | sb.AppendLine("/// "); 187 | 188 | string keyType = sheet.Rows[1][0].ToString(); 189 | fileName = "Table_" + fileName; 190 | 191 | sb.AppendFormat("public class {0} : TableBase<{1}>\r\n{{", fileName, keyType); 192 | sb.AppendLine(); 193 | 194 | foreach (DataColumn column in sheet.Columns) 195 | { 196 | string name = sheet.Rows[0][column].ToString(); 197 | string type = sheet.Rows[1][column].ToString(); 198 | string comment = sheet.Rows[2][column].ToString(); 199 | 200 | if (string.IsNullOrEmpty(name)) continue; 201 | if (string.IsNullOrEmpty(type)) type = "string"; 202 | if (!string.IsNullOrEmpty(comment)) 203 | { 204 | comment = comment.Replace("\n", ",").Replace("\r", ","); 205 | } 206 | 207 | sb.AppendFormat("\tpublic {0} {1}; // {2}", type, name, comment); 208 | sb.AppendLine(); 209 | } 210 | 211 | sb.Append('}'); 212 | sb.AppendLine(); 213 | 214 | // save to file 215 | string dstFolder = savePath + "/TableClass/"; 216 | if (!Directory.Exists(dstFolder)) 217 | { 218 | Directory.CreateDirectory(dstFolder); 219 | } 220 | 221 | string path = dstFolder + fileName + ".cs"; 222 | using (FileStream fileStream = new FileStream(path, FileMode.Create, FileAccess.Write)) 223 | { 224 | using (TextWriter textWriter = new StreamWriter(fileStream, Encoding.UTF8)) 225 | { 226 | textWriter.Write(sb.ToString()); 227 | Debug.Log("Table saved: " + path); 228 | return 1; 229 | } 230 | } 231 | } 232 | 233 | 234 | int SaveTableSet(DataTable sheet, string fileName) 235 | { 236 | StringBuilder sb = new StringBuilder(); 237 | sb.AppendLine("/// "); 238 | sb.AppendLine($"/// Auto Generated ScriptableObject TableSet."); 239 | sb.AppendLine("/// "); 240 | 241 | string keyType = sheet.Rows[1][0].ToString(); 242 | string tSetName = "TSet_" + fileName; 243 | string tClassName = "Table_" + fileName; 244 | 245 | sb.AppendFormat("public class {0} : TableSet<{1}, {2}>\r\n{{", tSetName, keyType, tClassName); 246 | sb.AppendLine(); 247 | sb.Append('}'); 248 | sb.AppendLine(); 249 | 250 | // save to file 251 | string dstFolder = savePath + "/TableClass/"; 252 | if (!Directory.Exists(dstFolder)) 253 | { 254 | Directory.CreateDirectory(dstFolder); 255 | } 256 | 257 | string path = dstFolder + tSetName + ".cs"; 258 | using (FileStream fileStream = new FileStream(path, FileMode.Create, FileAccess.Write)) 259 | { 260 | using (TextWriter textWriter = new StreamWriter(fileStream, Encoding.UTF8)) 261 | { 262 | textWriter.Write(sb.ToString()); 263 | Debug.Log("Table Set saved: " + path); 264 | return 1; 265 | } 266 | } 267 | } 268 | 269 | #endregion 270 | 271 | 272 | #region Save ScriptableObject 273 | 274 | int SaveTableAsset(DataTable sheet, string fileName) 275 | { 276 | if (sheet.Rows.Count < 2) 277 | { 278 | Debug.LogError("Excel Sheet is empty: " + sheet.TableName); 279 | return -1; 280 | } 281 | 282 | string tClassName = "Table_" + fileName; 283 | string tSetName = "TSet_" + fileName; 284 | 285 | // create Main Asset of table Set type by reflection 286 | var methods = typeof(ScriptableObject).GetMethods().Where(m => m.Name == "CreateInstance"); 287 | var methodInfo = methods.First(m => m.IsGenericMethod); 288 | 289 | Assembly assembly = Assembly.Load("Assembly-CSharp"); 290 | var tSetType = assembly.GetType(tSetName); 291 | if (tSetType == null) return -1; 292 | MethodInfo createMethod = methodInfo.MakeGenericMethod(tSetType); 293 | 294 | UnityEngine.Object assetObj = (UnityEngine.Object) Activator.CreateInstance(tSetType); 295 | createMethod.Invoke(assetObj, null); 296 | 297 | // save to file 298 | string dstFolder = savePath + "/TableAssets/"; 299 | if (!Directory.Exists(dstFolder)) 300 | { 301 | Directory.CreateDirectory(dstFolder); 302 | } 303 | 304 | int idx = dstFolder.IndexOf("Assets/", StringComparison.Ordinal); 305 | string path = dstFolder.Substring(idx) + tSetName + ".asset"; 306 | AssetDatabase.CreateAsset(assetObj, path); 307 | Debug.Log("Main Asset saved: " + path); 308 | 309 | // create asset of every row data, and add them to main asset 310 | for (int i = headerRows; i < sheet.Rows.Count; i++) 311 | { 312 | var tableType = assembly.GetType(tClassName); 313 | 314 | UnityEngine.Object dataObj = (UnityEngine.Object) Activator.CreateInstance(tableType); 315 | createMethod.Invoke(dataObj, null); 316 | 317 | // set every field data 318 | object keyVal = null; 319 | for (var j = 0; j < sheet.Columns.Count; j++) 320 | { 321 | string name = sheet.Rows[0][j].ToString(); 322 | string type = sheet.Rows[1][j].ToString(); 323 | string val = sheet.Rows[i][j].ToString(); 324 | 325 | if (string.IsNullOrEmpty(name)) continue; 326 | if (string.IsNullOrEmpty(type)) type = "string"; 327 | 328 | object o = SetObjectFiled(dataObj, tableType.GetField(name), type, val); 329 | if (j == 0) 330 | { 331 | keyVal = o; 332 | } 333 | } 334 | 335 | // set key data with first column value 336 | tableType.GetField("tKey").SetValue(dataObj, keyVal); 337 | 338 | // add data asset to main asset 339 | var methodAdd = tSetType.GetMethod("Add"); 340 | methodAdd.Invoke(assetObj, new[] {keyVal, dataObj}); 341 | 342 | dataObj.name = tClassName + "_" + keyVal; 343 | AssetDatabase.AddObjectToAsset(dataObj, path); 344 | } 345 | 346 | EditorUtility.SetDirty(assetObj); 347 | AssetDatabase.SaveAssets(); 348 | AssetDatabase.Refresh(); 349 | 350 | return 1; 351 | } 352 | 353 | 354 | object SetObjectFiled(object obj, FieldInfo field, string type, string param) 355 | { 356 | object pObj = param; 357 | switch (type.ToLower()) 358 | { 359 | case "string": 360 | field.SetValue(obj, param); 361 | break; 362 | case "bool": 363 | pObj = bool.Parse(param); 364 | field.SetValue(obj, bool.Parse(param)); 365 | break; 366 | case "byte": 367 | pObj = byte.Parse(param); 368 | field.SetValue(obj, byte.Parse(param)); 369 | break; 370 | case "int": 371 | pObj = int.Parse(param); 372 | field.SetValue(obj, int.Parse(param)); 373 | break; 374 | case "short": 375 | pObj = short.Parse(param); 376 | field.SetValue(obj, short.Parse(param)); 377 | break; 378 | case "long": 379 | pObj = long.Parse(param); 380 | field.SetValue(obj, long.Parse(param)); 381 | break; 382 | case "float": 383 | pObj = float.Parse(param); 384 | field.SetValue(obj, float.Parse(param)); 385 | break; 386 | case "double": 387 | pObj = double.Parse(param); 388 | field.SetValue(obj, double.Parse(param)); 389 | break; 390 | case "decimal": 391 | pObj = decimal.Parse(param); 392 | field.SetValue(obj, decimal.Parse(param)); 393 | break; 394 | default: 395 | Assembly assembly = Assembly.Load("Assembly-CSharp"); 396 | var t = assembly.GetType(type); 397 | if (t != null) 398 | { 399 | if (t.IsEnum) 400 | { 401 | pObj = Enum.Parse(t, param); 402 | field.SetValue(obj, Enum.Parse(t, param)); 403 | } 404 | } 405 | else 406 | { 407 | field.SetValue(obj, param); 408 | } 409 | break; 410 | } 411 | 412 | return pObj; 413 | } 414 | 415 | #endregion 416 | 417 | 418 | 419 | 420 | 421 | string FileNameNoExt(string filename) 422 | { 423 | int length; 424 | if ((length = filename.LastIndexOf('.')) == -1) 425 | return filename; 426 | return filename.Substring(0, length); 427 | } 428 | 429 | } 430 | -------------------------------------------------------------------------------- /ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!129 &1 4 | PlayerSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 15 7 | productGUID: 18e8547e055c6c944b36d56cc73eb092 8 | AndroidProfiler: 0 9 | AndroidFilterTouchesWhenObscured: 0 10 | AndroidEnableSustainedPerformanceMode: 0 11 | defaultScreenOrientation: 4 12 | targetDevice: 2 13 | useOnDemandResources: 0 14 | accelerometerFrequency: 60 15 | companyName: DefaultCompany 16 | productName: UnityExcelTool 17 | defaultCursor: {fileID: 0} 18 | cursorHotspot: {x: 0, y: 0} 19 | m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} 20 | m_ShowUnitySplashScreen: 1 21 | m_ShowUnitySplashLogo: 1 22 | m_SplashScreenOverlayOpacity: 1 23 | m_SplashScreenAnimation: 1 24 | m_SplashScreenLogoStyle: 1 25 | m_SplashScreenDrawMode: 0 26 | m_SplashScreenBackgroundAnimationZoom: 1 27 | m_SplashScreenLogoAnimationZoom: 1 28 | m_SplashScreenBackgroundLandscapeAspect: 1 29 | m_SplashScreenBackgroundPortraitAspect: 1 30 | m_SplashScreenBackgroundLandscapeUvs: 31 | serializedVersion: 2 32 | x: 0 33 | y: 0 34 | width: 1 35 | height: 1 36 | m_SplashScreenBackgroundPortraitUvs: 37 | serializedVersion: 2 38 | x: 0 39 | y: 0 40 | width: 1 41 | height: 1 42 | m_SplashScreenLogos: [] 43 | m_VirtualRealitySplashScreen: {fileID: 0} 44 | m_HolographicTrackingLossScreen: {fileID: 0} 45 | defaultScreenWidth: 1024 46 | defaultScreenHeight: 768 47 | defaultScreenWidthWeb: 960 48 | defaultScreenHeightWeb: 600 49 | m_StereoRenderingPath: 0 50 | m_ActiveColorSpace: 0 51 | m_MTRendering: 1 52 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000 53 | iosShowActivityIndicatorOnLoading: -1 54 | androidShowActivityIndicatorOnLoading: -1 55 | iosAppInBackgroundBehavior: 0 56 | displayResolutionDialog: 1 57 | iosAllowHTTPDownload: 1 58 | allowedAutorotateToPortrait: 1 59 | allowedAutorotateToPortraitUpsideDown: 1 60 | allowedAutorotateToLandscapeRight: 1 61 | allowedAutorotateToLandscapeLeft: 1 62 | useOSAutorotation: 1 63 | use32BitDisplayBuffer: 1 64 | preserveFramebufferAlpha: 0 65 | disableDepthAndStencilBuffers: 0 66 | androidStartInFullscreen: 1 67 | androidRenderOutsideSafeArea: 0 68 | androidBlitType: 0 69 | defaultIsNativeResolution: 1 70 | macRetinaSupport: 1 71 | runInBackground: 1 72 | captureSingleScreen: 0 73 | muteOtherAudioSources: 0 74 | Prepare IOS For Recording: 0 75 | Force IOS Speakers When Recording: 0 76 | deferSystemGesturesMode: 0 77 | hideHomeButton: 0 78 | submitAnalytics: 1 79 | usePlayerLog: 1 80 | bakeCollisionMeshes: 0 81 | forceSingleInstance: 0 82 | resizableWindow: 0 83 | useMacAppStoreValidation: 0 84 | macAppStoreCategory: public.app-category.games 85 | gpuSkinning: 1 86 | graphicsJobs: 0 87 | xboxPIXTextureCapture: 0 88 | xboxEnableAvatar: 0 89 | xboxEnableKinect: 0 90 | xboxEnableKinectAutoTracking: 0 91 | xboxEnableFitness: 0 92 | visibleInBackground: 1 93 | allowFullscreenSwitch: 1 94 | graphicsJobMode: 0 95 | fullscreenMode: 1 96 | xboxSpeechDB: 0 97 | xboxEnableHeadOrientation: 0 98 | xboxEnableGuest: 0 99 | xboxEnablePIXSampling: 0 100 | metalFramebufferOnly: 0 101 | xboxOneResolution: 0 102 | xboxOneSResolution: 0 103 | xboxOneXResolution: 3 104 | xboxOneMonoLoggingLevel: 0 105 | xboxOneLoggingLevel: 1 106 | xboxOneDisableEsram: 0 107 | xboxOnePresentImmediateThreshold: 0 108 | switchQueueCommandMemory: 0 109 | vulkanEnableSetSRGBWrite: 0 110 | m_SupportedAspectRatios: 111 | 4:3: 1 112 | 5:4: 1 113 | 16:10: 1 114 | 16:9: 1 115 | Others: 1 116 | bundleVersion: 0.1 117 | preloadedAssets: [] 118 | metroInputSource: 0 119 | wsaTransparentSwapchain: 0 120 | m_HolographicPauseOnTrackingLoss: 1 121 | xboxOneDisableKinectGpuReservation: 0 122 | xboxOneEnable7thCore: 0 123 | isWsaHolographicRemotingEnabled: 0 124 | vrSettings: 125 | cardboard: 126 | depthFormat: 0 127 | enableTransitionView: 0 128 | daydream: 129 | depthFormat: 0 130 | useSustainedPerformanceMode: 0 131 | enableVideoLayer: 0 132 | useProtectedVideoMemory: 0 133 | minimumSupportedHeadTracking: 0 134 | maximumSupportedHeadTracking: 1 135 | hololens: 136 | depthFormat: 1 137 | depthBufferSharingEnabled: 0 138 | oculus: 139 | sharedDepthBuffer: 1 140 | dashSupport: 1 141 | enable360StereoCapture: 0 142 | protectGraphicsMemory: 0 143 | enableFrameTimingStats: 0 144 | useHDRDisplay: 0 145 | m_ColorGamuts: 00000000 146 | targetPixelDensity: 30 147 | resolutionScalingMode: 0 148 | androidSupportedAspectRatio: 1 149 | androidMaxAspectRatio: 2.1 150 | applicationIdentifier: {} 151 | buildNumber: {} 152 | AndroidBundleVersionCode: 1 153 | AndroidMinSdkVersion: 16 154 | AndroidTargetSdkVersion: 0 155 | AndroidPreferredInstallLocation: 1 156 | aotOptions: 157 | stripEngineCode: 1 158 | iPhoneStrippingLevel: 0 159 | iPhoneScriptCallOptimization: 0 160 | ForceInternetPermission: 0 161 | ForceSDCardPermission: 0 162 | CreateWallpaper: 0 163 | APKExpansionFiles: 0 164 | keepLoadedShadersAlive: 0 165 | StripUnusedMeshComponents: 1 166 | VertexChannelCompressionMask: 4054 167 | iPhoneSdkVersion: 988 168 | iOSTargetOSVersionString: 9.0 169 | tvOSSdkVersion: 0 170 | tvOSRequireExtendedGameController: 0 171 | tvOSTargetOSVersionString: 9.0 172 | uIPrerenderedIcon: 0 173 | uIRequiresPersistentWiFi: 0 174 | uIRequiresFullScreen: 1 175 | uIStatusBarHidden: 1 176 | uIExitOnSuspend: 0 177 | uIStatusBarStyle: 0 178 | iPhoneSplashScreen: {fileID: 0} 179 | iPhoneHighResSplashScreen: {fileID: 0} 180 | iPhoneTallHighResSplashScreen: {fileID: 0} 181 | iPhone47inSplashScreen: {fileID: 0} 182 | iPhone55inPortraitSplashScreen: {fileID: 0} 183 | iPhone55inLandscapeSplashScreen: {fileID: 0} 184 | iPhone58inPortraitSplashScreen: {fileID: 0} 185 | iPhone58inLandscapeSplashScreen: {fileID: 0} 186 | iPadPortraitSplashScreen: {fileID: 0} 187 | iPadHighResPortraitSplashScreen: {fileID: 0} 188 | iPadLandscapeSplashScreen: {fileID: 0} 189 | iPadHighResLandscapeSplashScreen: {fileID: 0} 190 | appleTVSplashScreen: {fileID: 0} 191 | appleTVSplashScreen2x: {fileID: 0} 192 | tvOSSmallIconLayers: [] 193 | tvOSSmallIconLayers2x: [] 194 | tvOSLargeIconLayers: [] 195 | tvOSLargeIconLayers2x: [] 196 | tvOSTopShelfImageLayers: [] 197 | tvOSTopShelfImageLayers2x: [] 198 | tvOSTopShelfImageWideLayers: [] 199 | tvOSTopShelfImageWideLayers2x: [] 200 | iOSLaunchScreenType: 0 201 | iOSLaunchScreenPortrait: {fileID: 0} 202 | iOSLaunchScreenLandscape: {fileID: 0} 203 | iOSLaunchScreenBackgroundColor: 204 | serializedVersion: 2 205 | rgba: 0 206 | iOSLaunchScreenFillPct: 100 207 | iOSLaunchScreenSize: 100 208 | iOSLaunchScreenCustomXibPath: 209 | iOSLaunchScreeniPadType: 0 210 | iOSLaunchScreeniPadImage: {fileID: 0} 211 | iOSLaunchScreeniPadBackgroundColor: 212 | serializedVersion: 2 213 | rgba: 0 214 | iOSLaunchScreeniPadFillPct: 100 215 | iOSLaunchScreeniPadSize: 100 216 | iOSLaunchScreeniPadCustomXibPath: 217 | iOSUseLaunchScreenStoryboard: 0 218 | iOSLaunchScreenCustomStoryboardPath: 219 | iOSDeviceRequirements: [] 220 | iOSURLSchemes: [] 221 | iOSBackgroundModes: 0 222 | iOSMetalForceHardShadows: 0 223 | metalEditorSupport: 1 224 | metalAPIValidation: 1 225 | iOSRenderExtraFrameOnPause: 0 226 | appleDeveloperTeamID: 227 | iOSManualSigningProvisioningProfileID: 228 | tvOSManualSigningProvisioningProfileID: 229 | iOSManualSigningProvisioningProfileType: 0 230 | tvOSManualSigningProvisioningProfileType: 0 231 | appleEnableAutomaticSigning: 0 232 | iOSRequireARKit: 0 233 | appleEnableProMotion: 0 234 | clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea 235 | templatePackageId: com.unity.template.3d@1.0.4 236 | templateDefaultScene: Assets/Scenes/SampleScene.unity 237 | AndroidTargetArchitectures: 5 238 | AndroidSplashScreenScale: 0 239 | androidSplashScreen: {fileID: 0} 240 | AndroidKeystoreName: 241 | AndroidKeyaliasName: 242 | AndroidBuildApkPerCpuArchitecture: 0 243 | AndroidTVCompatibility: 1 244 | AndroidIsGame: 1 245 | AndroidEnableTango: 0 246 | androidEnableBanner: 1 247 | androidUseLowAccuracyLocation: 0 248 | m_AndroidBanners: 249 | - width: 320 250 | height: 180 251 | banner: {fileID: 0} 252 | androidGamepadSupportLevel: 0 253 | resolutionDialogBanner: {fileID: 0} 254 | m_BuildTargetIcons: [] 255 | m_BuildTargetPlatformIcons: [] 256 | m_BuildTargetBatching: 257 | - m_BuildTarget: Standalone 258 | m_StaticBatching: 1 259 | m_DynamicBatching: 0 260 | - m_BuildTarget: tvOS 261 | m_StaticBatching: 1 262 | m_DynamicBatching: 0 263 | - m_BuildTarget: Android 264 | m_StaticBatching: 1 265 | m_DynamicBatching: 0 266 | - m_BuildTarget: iPhone 267 | m_StaticBatching: 1 268 | m_DynamicBatching: 0 269 | - m_BuildTarget: WebGL 270 | m_StaticBatching: 0 271 | m_DynamicBatching: 0 272 | m_BuildTargetGraphicsAPIs: 273 | - m_BuildTarget: AndroidPlayer 274 | m_APIs: 0b00000008000000 275 | m_Automatic: 1 276 | - m_BuildTarget: iOSSupport 277 | m_APIs: 10000000 278 | m_Automatic: 1 279 | - m_BuildTarget: AppleTVSupport 280 | m_APIs: 10000000 281 | m_Automatic: 0 282 | - m_BuildTarget: WebGLSupport 283 | m_APIs: 0b000000 284 | m_Automatic: 1 285 | m_BuildTargetVRSettings: 286 | - m_BuildTarget: Standalone 287 | m_Enabled: 0 288 | m_Devices: 289 | - Oculus 290 | - OpenVR 291 | m_BuildTargetEnableVuforiaSettings: [] 292 | openGLRequireES31: 0 293 | openGLRequireES31AEP: 0 294 | m_TemplateCustomTags: {} 295 | mobileMTRendering: 296 | Android: 1 297 | iPhone: 1 298 | tvOS: 1 299 | m_BuildTargetGroupLightmapEncodingQuality: [] 300 | m_BuildTargetGroupLightmapSettings: [] 301 | playModeTestRunnerEnabled: 0 302 | runPlayModeTestAsEditModeTest: 0 303 | actionOnDotNetUnhandledException: 1 304 | enableInternalProfiler: 0 305 | logObjCUncaughtExceptions: 1 306 | enableCrashReportAPI: 0 307 | cameraUsageDescription: 308 | locationUsageDescription: 309 | microphoneUsageDescription: 310 | switchNetLibKey: 311 | switchSocketMemoryPoolSize: 6144 312 | switchSocketAllocatorPoolSize: 128 313 | switchSocketConcurrencyLimit: 14 314 | switchScreenResolutionBehavior: 2 315 | switchUseCPUProfiler: 0 316 | switchApplicationID: 0x01004b9000490000 317 | switchNSODependencies: 318 | switchTitleNames_0: 319 | switchTitleNames_1: 320 | switchTitleNames_2: 321 | switchTitleNames_3: 322 | switchTitleNames_4: 323 | switchTitleNames_5: 324 | switchTitleNames_6: 325 | switchTitleNames_7: 326 | switchTitleNames_8: 327 | switchTitleNames_9: 328 | switchTitleNames_10: 329 | switchTitleNames_11: 330 | switchTitleNames_12: 331 | switchTitleNames_13: 332 | switchTitleNames_14: 333 | switchPublisherNames_0: 334 | switchPublisherNames_1: 335 | switchPublisherNames_2: 336 | switchPublisherNames_3: 337 | switchPublisherNames_4: 338 | switchPublisherNames_5: 339 | switchPublisherNames_6: 340 | switchPublisherNames_7: 341 | switchPublisherNames_8: 342 | switchPublisherNames_9: 343 | switchPublisherNames_10: 344 | switchPublisherNames_11: 345 | switchPublisherNames_12: 346 | switchPublisherNames_13: 347 | switchPublisherNames_14: 348 | switchIcons_0: {fileID: 0} 349 | switchIcons_1: {fileID: 0} 350 | switchIcons_2: {fileID: 0} 351 | switchIcons_3: {fileID: 0} 352 | switchIcons_4: {fileID: 0} 353 | switchIcons_5: {fileID: 0} 354 | switchIcons_6: {fileID: 0} 355 | switchIcons_7: {fileID: 0} 356 | switchIcons_8: {fileID: 0} 357 | switchIcons_9: {fileID: 0} 358 | switchIcons_10: {fileID: 0} 359 | switchIcons_11: {fileID: 0} 360 | switchIcons_12: {fileID: 0} 361 | switchIcons_13: {fileID: 0} 362 | switchIcons_14: {fileID: 0} 363 | switchSmallIcons_0: {fileID: 0} 364 | switchSmallIcons_1: {fileID: 0} 365 | switchSmallIcons_2: {fileID: 0} 366 | switchSmallIcons_3: {fileID: 0} 367 | switchSmallIcons_4: {fileID: 0} 368 | switchSmallIcons_5: {fileID: 0} 369 | switchSmallIcons_6: {fileID: 0} 370 | switchSmallIcons_7: {fileID: 0} 371 | switchSmallIcons_8: {fileID: 0} 372 | switchSmallIcons_9: {fileID: 0} 373 | switchSmallIcons_10: {fileID: 0} 374 | switchSmallIcons_11: {fileID: 0} 375 | switchSmallIcons_12: {fileID: 0} 376 | switchSmallIcons_13: {fileID: 0} 377 | switchSmallIcons_14: {fileID: 0} 378 | switchManualHTML: 379 | switchAccessibleURLs: 380 | switchLegalInformation: 381 | switchMainThreadStackSize: 1048576 382 | switchPresenceGroupId: 383 | switchLogoHandling: 0 384 | switchReleaseVersion: 0 385 | switchDisplayVersion: 1.0.0 386 | switchStartupUserAccount: 0 387 | switchTouchScreenUsage: 0 388 | switchSupportedLanguagesMask: 0 389 | switchLogoType: 0 390 | switchApplicationErrorCodeCategory: 391 | switchUserAccountSaveDataSize: 0 392 | switchUserAccountSaveDataJournalSize: 0 393 | switchApplicationAttribute: 0 394 | switchCardSpecSize: -1 395 | switchCardSpecClock: -1 396 | switchRatingsMask: 0 397 | switchRatingsInt_0: 0 398 | switchRatingsInt_1: 0 399 | switchRatingsInt_2: 0 400 | switchRatingsInt_3: 0 401 | switchRatingsInt_4: 0 402 | switchRatingsInt_5: 0 403 | switchRatingsInt_6: 0 404 | switchRatingsInt_7: 0 405 | switchRatingsInt_8: 0 406 | switchRatingsInt_9: 0 407 | switchRatingsInt_10: 0 408 | switchRatingsInt_11: 0 409 | switchLocalCommunicationIds_0: 410 | switchLocalCommunicationIds_1: 411 | switchLocalCommunicationIds_2: 412 | switchLocalCommunicationIds_3: 413 | switchLocalCommunicationIds_4: 414 | switchLocalCommunicationIds_5: 415 | switchLocalCommunicationIds_6: 416 | switchLocalCommunicationIds_7: 417 | switchParentalControl: 0 418 | switchAllowsScreenshot: 1 419 | switchAllowsVideoCapturing: 1 420 | switchAllowsRuntimeAddOnContentInstall: 0 421 | switchDataLossConfirmation: 0 422 | switchUserAccountLockEnabled: 0 423 | switchSupportedNpadStyles: 3 424 | switchNativeFsCacheSize: 32 425 | switchIsHoldTypeHorizontal: 0 426 | switchSupportedNpadCount: 8 427 | switchSocketConfigEnabled: 0 428 | switchTcpInitialSendBufferSize: 32 429 | switchTcpInitialReceiveBufferSize: 64 430 | switchTcpAutoSendBufferSizeMax: 256 431 | switchTcpAutoReceiveBufferSizeMax: 256 432 | switchUdpSendBufferSize: 9 433 | switchUdpReceiveBufferSize: 42 434 | switchSocketBufferEfficiency: 4 435 | switchSocketInitializeEnabled: 1 436 | switchNetworkInterfaceManagerInitializeEnabled: 1 437 | switchPlayerConnectionEnabled: 1 438 | ps4NPAgeRating: 12 439 | ps4NPTitleSecret: 440 | ps4NPTrophyPackPath: 441 | ps4ParentalLevel: 11 442 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000 443 | ps4Category: 0 444 | ps4MasterVersion: 01.00 445 | ps4AppVersion: 01.00 446 | ps4AppType: 0 447 | ps4ParamSfxPath: 448 | ps4VideoOutPixelFormat: 0 449 | ps4VideoOutInitialWidth: 1920 450 | ps4VideoOutBaseModeInitialWidth: 1920 451 | ps4VideoOutReprojectionRate: 60 452 | ps4PronunciationXMLPath: 453 | ps4PronunciationSIGPath: 454 | ps4BackgroundImagePath: 455 | ps4StartupImagePath: 456 | ps4StartupImagesFolder: 457 | ps4IconImagesFolder: 458 | ps4SaveDataImagePath: 459 | ps4SdkOverride: 460 | ps4BGMPath: 461 | ps4ShareFilePath: 462 | ps4ShareOverlayImagePath: 463 | ps4PrivacyGuardImagePath: 464 | ps4NPtitleDatPath: 465 | ps4RemotePlayKeyAssignment: -1 466 | ps4RemotePlayKeyMappingDir: 467 | ps4PlayTogetherPlayerCount: 0 468 | ps4EnterButtonAssignment: 1 469 | ps4ApplicationParam1: 0 470 | ps4ApplicationParam2: 0 471 | ps4ApplicationParam3: 0 472 | ps4ApplicationParam4: 0 473 | ps4DownloadDataSize: 0 474 | ps4GarlicHeapSize: 2048 475 | ps4ProGarlicHeapSize: 2560 476 | ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ 477 | ps4pnSessions: 1 478 | ps4pnPresence: 1 479 | ps4pnFriends: 1 480 | ps4pnGameCustomData: 1 481 | playerPrefsSupport: 0 482 | enableApplicationExit: 0 483 | resetTempFolder: 1 484 | restrictedAudioUsageRights: 0 485 | ps4UseResolutionFallback: 0 486 | ps4ReprojectionSupport: 0 487 | ps4UseAudio3dBackend: 0 488 | ps4SocialScreenEnabled: 0 489 | ps4ScriptOptimizationLevel: 0 490 | ps4Audio3dVirtualSpeakerCount: 14 491 | ps4attribCpuUsage: 0 492 | ps4PatchPkgPath: 493 | ps4PatchLatestPkgPath: 494 | ps4PatchChangeinfoPath: 495 | ps4PatchDayOne: 0 496 | ps4attribUserManagement: 0 497 | ps4attribMoveSupport: 0 498 | ps4attrib3DSupport: 0 499 | ps4attribShareSupport: 0 500 | ps4attribExclusiveVR: 0 501 | ps4disableAutoHideSplash: 0 502 | ps4videoRecordingFeaturesUsed: 0 503 | ps4contentSearchFeaturesUsed: 0 504 | ps4attribEyeToEyeDistanceSettingVR: 0 505 | ps4IncludedModules: [] 506 | monoEnv: 507 | splashScreenBackgroundSourceLandscape: {fileID: 0} 508 | splashScreenBackgroundSourcePortrait: {fileID: 0} 509 | spritePackerPolicy: 510 | webGLMemorySize: 256 511 | webGLExceptionSupport: 1 512 | webGLNameFilesAsHashes: 0 513 | webGLDataCaching: 1 514 | webGLDebugSymbols: 0 515 | webGLEmscriptenArgs: 516 | webGLModulesDirectory: 517 | webGLTemplate: APPLICATION:Default 518 | webGLAnalyzeBuildSize: 0 519 | webGLUseEmbeddedResources: 0 520 | webGLCompressionFormat: 1 521 | webGLLinkerTarget: 1 522 | webGLThreadsSupport: 0 523 | scriptingDefineSymbols: 524 | 1: RHSD 525 | platformArchitecture: {} 526 | scriptingBackend: {} 527 | il2cppCompilerConfiguration: {} 528 | managedStrippingLevel: {} 529 | incrementalIl2cppBuild: {} 530 | allowUnsafeCode: 0 531 | additionalIl2CppArgs: 532 | scriptingRuntimeVersion: 1 533 | apiCompatibilityLevelPerPlatform: {} 534 | m_RenderingPath: 1 535 | m_MobileRenderingPath: 1 536 | metroPackageName: Template_3D 537 | metroPackageVersion: 538 | metroCertificatePath: 539 | metroCertificatePassword: 540 | metroCertificateSubject: 541 | metroCertificateIssuer: 542 | metroCertificateNotAfter: 0000000000000000 543 | metroApplicationDescription: Template_3D 544 | wsaImages: {} 545 | metroTileShortName: 546 | metroTileShowName: 0 547 | metroMediumTileShowName: 0 548 | metroLargeTileShowName: 0 549 | metroWideTileShowName: 0 550 | metroSupportStreamingInstall: 0 551 | metroLastRequiredScene: 0 552 | metroDefaultTileSize: 1 553 | metroTileForegroundText: 2 554 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} 555 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, 556 | a: 1} 557 | metroSplashScreenUseBackgroundColor: 0 558 | platformCapabilities: {} 559 | metroTargetDeviceFamilies: {} 560 | metroFTAName: 561 | metroFTAFileTypes: [] 562 | metroProtocolName: 563 | metroCompilationOverrides: 1 564 | XboxOneProductId: 565 | XboxOneUpdateKey: 566 | XboxOneSandboxId: 567 | XboxOneContentId: 568 | XboxOneTitleId: 569 | XboxOneSCId: 570 | XboxOneGameOsOverridePath: 571 | XboxOnePackagingOverridePath: 572 | XboxOneAppManifestOverridePath: 573 | XboxOneVersion: 1.0.0.0 574 | XboxOnePackageEncryption: 0 575 | XboxOnePackageUpdateGranularity: 2 576 | XboxOneDescription: 577 | XboxOneLanguage: 578 | - enus 579 | XboxOneCapability: [] 580 | XboxOneGameRating: {} 581 | XboxOneIsContentPackage: 0 582 | XboxOneEnableGPUVariability: 0 583 | XboxOneSockets: {} 584 | XboxOneSplashScreen: {fileID: 0} 585 | XboxOneAllowedProductIds: [] 586 | XboxOnePersistentLocalStorageSize: 0 587 | XboxOneXTitleMemory: 8 588 | xboxOneScriptCompiler: 0 589 | XboxOneOverrideIdentityName: 590 | vrEditorSettings: 591 | daydream: 592 | daydreamIconForeground: {fileID: 0} 593 | daydreamIconBackground: {fileID: 0} 594 | cloudServicesEnabled: 595 | UNet: 1 596 | luminIcon: 597 | m_Name: 598 | m_ModelFolderPath: 599 | m_PortalFolderPath: 600 | luminCert: 601 | m_CertPath: 602 | m_PrivateKeyPath: 603 | luminIsChannelApp: 0 604 | luminVersion: 605 | m_VersionCode: 1 606 | m_VersionName: 607 | facebookSdkVersion: 7.9.4 608 | facebookAppId: 609 | facebookCookies: 1 610 | facebookLogging: 1 611 | facebookStatus: 1 612 | facebookXfbml: 0 613 | facebookFrictionlessRequests: 1 614 | apiCompatibilityLevel: 6 615 | cloudProjectId: 616 | framebufferDepthMemorylessMode: 0 617 | projectName: 618 | organizationId: 619 | cloudEnabled: 0 620 | enableNativePlatformBackendsForNewInputSystem: 0 621 | disableOldInputManagerSupport: 0 622 | legacyClampBlendShapeWeights: 0 623 | --------------------------------------------------------------------------------