From 24e2244178b8861c5c474e911cf5b8e80205c078 Mon Sep 17 00:00:00 2001 From: NTG_Lenovo Date: Tue, 13 May 2025 15:03:30 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B5=AC=EA=B8=80=20=EC=8B=9C=ED=8A=B8=20?= =?UTF-8?q?=EC=97=B0=EB=8F=99=20=EA=B8=B0=EB=8A=A5=20=ED=99=95=EC=9E=A54?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AddressableAssetGroupSortSettings.asset | 1 + .../AddressableAssetSettings.asset | 4 +- .../AssetGroups/GoogleSheetSprite_Group.asset | 29 +++ .../GoogleSheetSprite_Group.asset.meta | 8 + ...Sprite_Group_BundledAssetGroupSchema.asset | 47 ++++ ...e_Group_BundledAssetGroupSchema.asset.meta | 8 + ...prite_Group_ContentUpdateGroupSchema.asset | 16 ++ ..._Group_ContentUpdateGroupSchema.asset.meta | 8 + Assets/_Datas/01.Scenes/SampleScene.unity | 6 +- .../_Datas/02.Scripts/AddressableManager.cs | 26 +++ .../02.Scripts/AddressableManager.cs.meta | 2 + .../2025-05-13 03-29-27 by 남태건.json | 76 ------- .../2025-05-13 03-29-57 by 고성진.json | 76 ------- .../2025-05-13 15-02-17 by 남태건.json | 81 +++++++ ...a => 2025-05-13 15-02-17 by 남태건.json.meta} | 2 +- .../GenerateGoogleSheet/AutoCreated/Food.cs | 4 + .../AutoCreated/GoogleSheetJson.json | 55 ++--- .../Logs/GoogleSheetChangeLog.asset | 69 +++--- .../AutoCreated/So/FoodSo.asset | 4 + .../Core/GoogldSheetManager.cs | 200 ++++++++++++------ ...9-57 by 고성진.json.meta => 03.Image.meta} | 5 +- Assets/_Datas/03.Image/Gold.png | Bin 0 -> 7586 bytes Assets/_Datas/03.Image/Gold.png.meta | 143 +++++++++++++ 23 files changed, 573 insertions(+), 297 deletions(-) create mode 100644 Assets/AddressableAssetsData/AssetGroups/GoogleSheetSprite_Group.asset create mode 100644 Assets/AddressableAssetsData/AssetGroups/GoogleSheetSprite_Group.asset.meta create mode 100644 Assets/AddressableAssetsData/AssetGroups/Schemas/GoogleSheetSprite_Group_BundledAssetGroupSchema.asset create mode 100644 Assets/AddressableAssetsData/AssetGroups/Schemas/GoogleSheetSprite_Group_BundledAssetGroupSchema.asset.meta create mode 100644 Assets/AddressableAssetsData/AssetGroups/Schemas/GoogleSheetSprite_Group_ContentUpdateGroupSchema.asset create mode 100644 Assets/AddressableAssetsData/AssetGroups/Schemas/GoogleSheetSprite_Group_ContentUpdateGroupSchema.asset.meta create mode 100644 Assets/_Datas/02.Scripts/AddressableManager.cs create mode 100644 Assets/_Datas/02.Scripts/AddressableManager.cs.meta delete mode 100644 Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-05-13 03-29-27 by 남태건.json delete mode 100644 Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-05-13 03-29-57 by 고성진.json create mode 100644 Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-05-13 15-02-17 by 남태건.json rename Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/BackUps/{2025-05-13 03-29-27 by 남태건.json.meta => 2025-05-13 15-02-17 by 남태건.json.meta} (75%) rename Assets/_Datas/{02.Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-05-13 03-29-57 by 고성진.json.meta => 03.Image.meta} (57%) create mode 100644 Assets/_Datas/03.Image/Gold.png create mode 100644 Assets/_Datas/03.Image/Gold.png.meta diff --git a/Assets/AddressableAssetsData/AddressableAssetGroupSortSettings.asset b/Assets/AddressableAssetsData/AddressableAssetGroupSortSettings.asset index ae24e4481..62a17acf3 100644 --- a/Assets/AddressableAssetsData/AddressableAssetGroupSortSettings.asset +++ b/Assets/AddressableAssetsData/AddressableAssetGroupSortSettings.asset @@ -13,4 +13,5 @@ MonoBehaviour: m_Name: AddressableAssetGroupSortSettings m_EditorClassIdentifier: sortOrder: + - 30e7f67fe9aaa7849a34c9b6e2bc53ae - 7fe0c33d351391a45a0ea3c93ecef42e diff --git a/Assets/AddressableAssetsData/AddressableAssetSettings.asset b/Assets/AddressableAssetsData/AddressableAssetSettings.asset index 03c56f814..9b9c9a17f 100644 --- a/Assets/AddressableAssetsData/AddressableAssetSettings.asset +++ b/Assets/AddressableAssetsData/AddressableAssetSettings.asset @@ -12,7 +12,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 468a46d0ae32c3544b7d98094e6448a9, type: 3} m_Name: AddressableAssetSettings m_EditorClassIdentifier: - m_DefaultGroup: 929eb052721483043b12b85e5d4bdc84 + m_DefaultGroup: 30e7f67fe9aaa7849a34c9b6e2bc53ae m_currentHash: serializedVersion: 2 Hash: 00000000000000000000000000000000 @@ -59,6 +59,7 @@ MonoBehaviour: m_BuildAddressablesWithPlayerBuild: 0 m_overridePlayerVersion: '[UnityEditor.PlayerSettings.bundleVersion]' m_GroupAssets: + - {fileID: 11400000, guid: 5329bd0c1faf253408343429c6a99b39, type: 2} - {fileID: 11400000, guid: 5b7b9bd594e863849bf5e512f59ba0fc, type: 2} m_BuildSettings: m_LogResourceManagerExceptions: 1 @@ -100,6 +101,7 @@ MonoBehaviour: m_LabelNames: - default - GoogleSheetSo + - GoogleSheetSprite m_SchemaTemplates: [] m_GroupTemplateObjects: - {fileID: 11400000, guid: f804fe78e7005554f9ba60273aade35b, type: 2} diff --git a/Assets/AddressableAssetsData/AssetGroups/GoogleSheetSprite_Group.asset b/Assets/AddressableAssetsData/AssetGroups/GoogleSheetSprite_Group.asset new file mode 100644 index 000000000..bc7bf61bd --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/GoogleSheetSprite_Group.asset @@ -0,0 +1,29 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bbb281ee3bf0b054c82ac2347e9e782c, type: 3} + m_Name: GoogleSheetSprite_Group + m_EditorClassIdentifier: + m_GroupName: GoogleSheetSprite_Group + m_GUID: 30e7f67fe9aaa7849a34c9b6e2bc53ae + m_SerializeEntries: + - m_GUID: e15933f76da90e742866563b5cd9e45f + m_Address: Gold + m_ReadOnly: 0 + m_SerializedLabels: + - GoogleSheetSprite + FlaggedDuringContentUpdateRestriction: 0 + m_ReadOnly: 0 + m_Settings: {fileID: 11400000, guid: d12ffbb6f886d48418efb0b6d15ccb88, type: 2} + m_SchemaSet: + m_Schemas: + - {fileID: 11400000, guid: 7e7c84ad73aefe14a8fe3acef1a1ef70, type: 2} + - {fileID: 11400000, guid: 446e71e39fbb9cc41bd76f6e78ea5347, type: 2} diff --git a/Assets/AddressableAssetsData/AssetGroups/GoogleSheetSprite_Group.asset.meta b/Assets/AddressableAssetsData/AssetGroups/GoogleSheetSprite_Group.asset.meta new file mode 100644 index 000000000..b83fc9181 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/GoogleSheetSprite_Group.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5329bd0c1faf253408343429c6a99b39 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/GoogleSheetSprite_Group_BundledAssetGroupSchema.asset b/Assets/AddressableAssetsData/AssetGroups/Schemas/GoogleSheetSprite_Group_BundledAssetGroupSchema.asset new file mode 100644 index 000000000..375bbb07d --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/GoogleSheetSprite_Group_BundledAssetGroupSchema.asset @@ -0,0 +1,47 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e5d17a21594effb4e9591490b009e7aa, type: 3} + m_Name: GoogleSheetSprite_Group_BundledAssetGroupSchema + m_EditorClassIdentifier: + m_Group: {fileID: 11400000, guid: 5329bd0c1faf253408343429c6a99b39, type: 2} + m_InternalBundleIdMode: 1 + m_Compression: 1 + m_IncludeAddressInCatalog: 1 + m_IncludeGUIDInCatalog: 1 + m_IncludeLabelsInCatalog: 1 + m_InternalIdNamingMode: 0 + m_CacheClearBehavior: 0 + m_IncludeInBuild: 1 + m_BundledAssetProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.BundledAssetProvider + m_ForceUniqueProvider: 0 + m_UseAssetBundleCache: 1 + m_UseAssetBundleCrc: 1 + m_UseAssetBundleCrcForCachedBundles: 1 + m_UseUWRForLocalBundles: 0 + m_Timeout: 0 + m_ChunkedTransfer: 0 + m_RedirectLimit: -1 + m_RetryCount: 0 + m_BuildPath: + m_Id: 30b8e03fd76b09f46850a05b2650884d + m_LoadPath: + m_Id: 7852182deca226a488adf0342a6f6c9a + m_BundleMode: 0 + m_AssetBundleProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider + m_UseDefaultSchemaSettings: 0 + m_SelectedPathPairIndex: 0 + m_BundleNaming: 0 + m_AssetLoadMode: 0 diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/GoogleSheetSprite_Group_BundledAssetGroupSchema.asset.meta b/Assets/AddressableAssetsData/AssetGroups/Schemas/GoogleSheetSprite_Group_BundledAssetGroupSchema.asset.meta new file mode 100644 index 000000000..b274f9fbf --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/GoogleSheetSprite_Group_BundledAssetGroupSchema.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7e7c84ad73aefe14a8fe3acef1a1ef70 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/GoogleSheetSprite_Group_ContentUpdateGroupSchema.asset b/Assets/AddressableAssetsData/AssetGroups/Schemas/GoogleSheetSprite_Group_ContentUpdateGroupSchema.asset new file mode 100644 index 000000000..aaba67855 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/GoogleSheetSprite_Group_ContentUpdateGroupSchema.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5834b5087d578d24c926ce20cd31e6d6, type: 3} + m_Name: GoogleSheetSprite_Group_ContentUpdateGroupSchema + m_EditorClassIdentifier: + m_Group: {fileID: 11400000, guid: 5329bd0c1faf253408343429c6a99b39, type: 2} + m_StaticContent: 0 diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/GoogleSheetSprite_Group_ContentUpdateGroupSchema.asset.meta b/Assets/AddressableAssetsData/AssetGroups/Schemas/GoogleSheetSprite_Group_ContentUpdateGroupSchema.asset.meta new file mode 100644 index 000000000..b69f8679f --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/GoogleSheetSprite_Group_ContentUpdateGroupSchema.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 446e71e39fbb9cc41bd76f6e78ea5347 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Datas/01.Scenes/SampleScene.unity b/Assets/_Datas/01.Scenes/SampleScene.unity index 603370d7a..3553ac1be 100644 --- a/Assets/_Datas/01.Scenes/SampleScene.unity +++ b/Assets/_Datas/01.Scenes/SampleScene.unity @@ -285,12 +285,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 2631101f894592945a1c50aed7048e66, type: 3} m_Name: m_EditorClassIdentifier: - _persistent: 1 + _persistent: 0 _isAccessGoogleSheet: 1 _googleSheetUrl: https://script.google.com/macros/s/AKfycbw8TRSl_OuY2S-RX0yvOJi1SqNqoflG0R3pWxk9GC9u_wvGQeuABZc0VH7YJ5lMrAl4/exec _availSheets: Food/Monster _generateFolderPath: /_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated - _lastUpdated: "1 - 2025-05-13 03:29:57 by \uACE0\uC131\uC9C4" + _currentVersion: "0 - 2025-05-13 15:02:17 by \uB0A8\uD0DC\uAC74" _restoreIndex: 0 _editorName: _refreshTrigger: 1 @@ -302,7 +302,7 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 383092896} serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 diff --git a/Assets/_Datas/02.Scripts/AddressableManager.cs b/Assets/_Datas/02.Scripts/AddressableManager.cs new file mode 100644 index 000000000..61d93f3fb --- /dev/null +++ b/Assets/_Datas/02.Scripts/AddressableManager.cs @@ -0,0 +1,26 @@ + +using System.Linq; +#if UNITY_EDITOR +using UnityEditor.AddressableAssets; +#endif + +public class AddressableManager : Singleton +{ + public static bool HasLabel(string addressKey, string label) + { +#if UNITY_EDITOR + var settings = AddressableAssetSettingsDefaultObject.Settings; + if (settings == null) return false; + + var entry = settings.groups + .SelectMany(g => g.entries) + .FirstOrDefault(e => e.address == addressKey); + + if (entry == null) return false; + + return entry.labels.Contains(label); +#else + return true; +#endif + } +} \ No newline at end of file diff --git a/Assets/_Datas/02.Scripts/AddressableManager.cs.meta b/Assets/_Datas/02.Scripts/AddressableManager.cs.meta new file mode 100644 index 000000000..91300753d --- /dev/null +++ b/Assets/_Datas/02.Scripts/AddressableManager.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 85a4615ed6971ef4aa78a1b01d8a8be3 \ No newline at end of file diff --git a/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-05-13 03-29-27 by 남태건.json b/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-05-13 03-29-27 by 남태건.json deleted file mode 100644 index 3e9878953..000000000 --- a/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-05-13 03-29-27 by 남태건.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "$개요": [ - { - "": "시트 생성" - } - ], - "Food": [ - { - "Id": "식별ID", - "Name": "이름", - "Ingredient1": "재료1", - "Ingredient2": "재료2", - "Taste1:Taste_Enum": "맛1", - "Taste2:Taste_Enum": "맛2" - }, - { - "Id": "Food001", - "Name": "햇빛수프", - "Ingredient1": "극락쌀", - "Ingredient2": "햇빛당근", - "Taste1:Taste_Enum": "Bitter", - "Taste2:Taste_Enum": "Sweet" - }, - { - "Id": "Food002", - "Name": "B", - "Ingredient1": 1, - "Ingredient2": 11, - "Taste1:Taste_Enum": "Spicy", - "Taste2:Taste_Enum": "Bitter" - }, - { - "Id": "Food003", - "Name": "C", - "Ingredient1": 2, - "Ingredient2": 22, - "Taste1:Taste_Enum": "Fresh", - "Taste2:Taste_Enum": "None" - }, - { - "Id": "Food004", - "Name": "D", - "Ingredient1": 3, - "Ingredient2": 33, - "Taste1:Taste_Enum": "Sour", - "Taste2:Taste_Enum": "Salty" - } - ], - "Monster": [ - { - "Id": "식별번호", - "Name": "이름", - "T1": "테스트1" - }, - { - "Id": "Test001", - "Name": "A", - "T1": 1 - }, - { - "Id": "Test002", - "Name": "B", - "T1": 2 - }, - { - "Id": "Test003", - "Name": "C", - "T1": 3 - }, - { - "Id": "Test004", - "Name": "D", - "T1": 4 - } - ] -} \ No newline at end of file diff --git a/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-05-13 03-29-57 by 고성진.json b/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-05-13 03-29-57 by 고성진.json deleted file mode 100644 index a0111f09a..000000000 --- a/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-05-13 03-29-57 by 고성진.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "$개요": [ - { - "": "시트 생성" - } - ], - "Food": [ - { - "Id": "식별ID", - "Name": "이름", - "Ingredient1": "재료1", - "Ingredient2": "재료2", - "Taste1:Taste_Enum": "맛1", - "Taste2:Taste_Enum": "맛2" - }, - { - "Id": "Food001", - "Name": "햇빛수프", - "Ingredient1": "극락쌀", - "Ingredient2": "햇빛당근", - "Taste1:Taste_Enum": "Bitter", - "Taste2:Taste_Enum": "Sweet" - }, - { - "Id": "Food002", - "Name": "B", - "Ingredient1": 1, - "Ingredient2": 4, - "Taste1:Taste_Enum": "Spicy", - "Taste2:Taste_Enum": "Bitter" - }, - { - "Id": "Food003", - "Name": "C", - "Ingredient1": 2, - "Ingredient2": 5, - "Taste1:Taste_Enum": "Fresh", - "Taste2:Taste_Enum": "None" - }, - { - "Id": "Food004", - "Name": "D", - "Ingredient1": 3, - "Ingredient2": 6, - "Taste1:Taste_Enum": "Sour", - "Taste2:Taste_Enum": "Salty" - } - ], - "Monster": [ - { - "Id": "식별번호", - "Name": "이름", - "T1": "테스트1" - }, - { - "Id": "Test001", - "Name": "A", - "T1": 1 - }, - { - "Id": "Test002", - "Name": "B", - "T1": 2 - }, - { - "Id": "Test003", - "Name": "C", - "T1": 3 - }, - { - "Id": "Test004", - "Name": "D", - "T1": 4 - } - ] -} \ No newline at end of file diff --git a/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-05-13 15-02-17 by 남태건.json b/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-05-13 15-02-17 by 남태건.json new file mode 100644 index 000000000..82a68e291 --- /dev/null +++ b/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-05-13 15-02-17 by 남태건.json @@ -0,0 +1,81 @@ +{ + "$개요": [ + { + "": "시트 생성" + } + ], + "Food": [ + { + "Id:string": "식별ID", + "Name:string": "이름", + "Ingredient1:string": "재료1", + "Ingredient2:string": "재료2", + "Taste1:Taste_Enum": "맛1", + "Taste2:Taste_Enum": "맛2", + "Sprite:Sprite": "Addressable 이미지 이름" + }, + { + "Id:string": "Food001", + "Name:string": "햇빛수프", + "Ingredient1:string": "극락쌀", + "Ingredient2:string": "햇빛당근", + "Taste1:Taste_Enum": "Bitter", + "Taste2:Taste_Enum": "Sweet", + "Sprite:Sprite": "Gold" + }, + { + "Id:string": "Food002", + "Name:string": "B", + "Ingredient1:string": 1, + "Ingredient2:string": 4, + "Taste1:Taste_Enum": "Spicy", + "Taste2:Taste_Enum": "Bitter", + "Sprite:Sprite": "" + }, + { + "Id:string": "Food003", + "Name:string": "C", + "Ingredient1:string": 2, + "Ingredient2:string": 5, + "Taste1:Taste_Enum": "Fresh", + "Taste2:Taste_Enum": "None", + "Sprite:Sprite": "" + }, + { + "Id:string": "Food004", + "Name:string": "D", + "Ingredient1:string": 3, + "Ingredient2:string": 6, + "Taste1:Taste_Enum": "Sour", + "Taste2:Taste_Enum": "Salty", + "Sprite:Sprite": "" + } + ], + "Monster": [ + { + "Id": "식별번호", + "Name": "이름", + "T1": "테스트1" + }, + { + "Id": "Test001", + "Name": "A", + "T1": 1 + }, + { + "Id": "Test002", + "Name": "B", + "T1": 2 + }, + { + "Id": "Test003", + "Name": "C", + "T1": 3 + }, + { + "Id": "Test004", + "Name": "D", + "T1": 4 + } + ] +} \ No newline at end of file diff --git a/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-05-13 03-29-27 by 남태건.json.meta b/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-05-13 15-02-17 by 남태건.json.meta similarity index 75% rename from Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-05-13 03-29-27 by 남태건.json.meta rename to Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-05-13 15-02-17 by 남태건.json.meta index 96d6805d3..0c4cf74d9 100644 --- a/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-05-13 03-29-27 by 남태건.json.meta +++ b/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-05-13 15-02-17 by 남태건.json.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 59c0671301dbb8f4b8929bc354d0d52c +guid: 1cf6b1e28051e1f418882d448a258c13 TextScriptImporter: externalObjects: {} userData: diff --git a/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/Food.cs b/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/Food.cs index 6dce9fbef..072dd9c85 100644 --- a/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/Food.cs +++ b/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/Food.cs @@ -28,4 +28,8 @@ public class Food [Tooltip("맛2")] public Taste Taste2; + /// Addressable 이미지 이름 + [Tooltip("Addressable 이미지 이름")] + public Sprite Sprite; + } diff --git a/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/GoogleSheetJson.json b/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/GoogleSheetJson.json index a0111f09a..82a68e291 100644 --- a/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/GoogleSheetJson.json +++ b/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/GoogleSheetJson.json @@ -6,44 +6,49 @@ ], "Food": [ { - "Id": "식별ID", - "Name": "이름", - "Ingredient1": "재료1", - "Ingredient2": "재료2", + "Id:string": "식별ID", + "Name:string": "이름", + "Ingredient1:string": "재료1", + "Ingredient2:string": "재료2", "Taste1:Taste_Enum": "맛1", - "Taste2:Taste_Enum": "맛2" + "Taste2:Taste_Enum": "맛2", + "Sprite:Sprite": "Addressable 이미지 이름" }, { - "Id": "Food001", - "Name": "햇빛수프", - "Ingredient1": "극락쌀", - "Ingredient2": "햇빛당근", + "Id:string": "Food001", + "Name:string": "햇빛수프", + "Ingredient1:string": "극락쌀", + "Ingredient2:string": "햇빛당근", "Taste1:Taste_Enum": "Bitter", - "Taste2:Taste_Enum": "Sweet" + "Taste2:Taste_Enum": "Sweet", + "Sprite:Sprite": "Gold" }, { - "Id": "Food002", - "Name": "B", - "Ingredient1": 1, - "Ingredient2": 4, + "Id:string": "Food002", + "Name:string": "B", + "Ingredient1:string": 1, + "Ingredient2:string": 4, "Taste1:Taste_Enum": "Spicy", - "Taste2:Taste_Enum": "Bitter" + "Taste2:Taste_Enum": "Bitter", + "Sprite:Sprite": "" }, { - "Id": "Food003", - "Name": "C", - "Ingredient1": 2, - "Ingredient2": 5, + "Id:string": "Food003", + "Name:string": "C", + "Ingredient1:string": 2, + "Ingredient2:string": 5, "Taste1:Taste_Enum": "Fresh", - "Taste2:Taste_Enum": "None" + "Taste2:Taste_Enum": "None", + "Sprite:Sprite": "" }, { - "Id": "Food004", - "Name": "D", - "Ingredient1": 3, - "Ingredient2": 6, + "Id:string": "Food004", + "Name:string": "D", + "Ingredient1:string": 3, + "Ingredient2:string": 6, "Taste1:Taste_Enum": "Sour", - "Taste2:Taste_Enum": "Salty" + "Taste2:Taste_Enum": "Salty", + "Sprite:Sprite": "" } ], "Monster": [ diff --git a/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/Logs/GoogleSheetChangeLog.asset b/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/Logs/GoogleSheetChangeLog.asset index 82c79f5dd..b528360a8 100644 --- a/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/Logs/GoogleSheetChangeLog.asset +++ b/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/Logs/GoogleSheetChangeLog.asset @@ -14,49 +14,30 @@ MonoBehaviour: m_EditorClassIdentifier: _logs: - Editor: "\uB0A8\uD0DC\uAC74" - Timestamp: 2025-05-13 03:29:27 + Timestamp: 2025-05-13 15:02:17 JsonSnapshot: "{\n \"$\uAC1C\uC694\": [\n {\n \"\": \"\uC2DC\uD2B8 \uC0DD\uC131\"\n - }\n ],\n \"Food\": [\n {\n \"Id\": \"\uC2DD\uBCC4ID\",\n \"Name\": - \"\uC774\uB984\",\n \"Ingredient1\": \"\uC7AC\uB8CC1\",\n \"Ingredient2\": - \"\uC7AC\uB8CC2\",\n \"Taste1:Taste_Enum\": \"\uB9DB1\",\n \"Taste2:Taste_Enum\": - \"\uB9DB2\"\n },\n {\n \"Id\": \"Food001\",\n \"Name\": \"\uD587\uBE5B\uC218\uD504\",\n - \"Ingredient1\": \"\uADF9\uB77D\uC300\",\n \"Ingredient2\": \"\uD587\uBE5B\uB2F9\uADFC\",\n - \"Taste1:Taste_Enum\": \"Bitter\",\n \"Taste2:Taste_Enum\": \"Sweet\"\n - },\n {\n \"Id\": \"Food002\",\n \"Name\": \"B\",\n \"Ingredient1\": - 1,\n \"Ingredient2\": 11,\n \"Taste1:Taste_Enum\": \"Spicy\",\n - \"Taste2:Taste_Enum\": \"Bitter\"\n },\n {\n \"Id\": \"Food003\",\n - \"Name\": \"C\",\n \"Ingredient1\": 2,\n \"Ingredient2\": 22,\n - \"Taste1:Taste_Enum\": \"Fresh\",\n \"Taste2:Taste_Enum\": \"None\"\n - },\n {\n \"Id\": \"Food004\",\n \"Name\": \"D\",\n \"Ingredient1\": - 3,\n \"Ingredient2\": 33,\n \"Taste1:Taste_Enum\": \"Sour\",\n - \"Taste2:Taste_Enum\": \"Salty\"\n }\n ],\n \"Monster\": [\n {\n - \"Id\": \"\uC2DD\uBCC4\uBC88\uD638\",\n \"Name\": \"\uC774\uB984\",\n - \"T1\": \"\uD14C\uC2A4\uD2B81\"\n },\n {\n \"Id\": \"Test001\",\n - \"Name\": \"A\",\n \"T1\": 1\n },\n {\n \"Id\": \"Test002\",\n - \"Name\": \"B\",\n \"T1\": 2\n },\n {\n \"Id\": \"Test003\",\n - \"Name\": \"C\",\n \"T1\": 3\n },\n {\n \"Id\": \"Test004\",\n - \"Name\": \"D\",\n \"T1\": 4\n }\n ]\n}" - - Editor: "\uACE0\uC131\uC9C4" - Timestamp: 2025-05-13 03:29:57 - JsonSnapshot: "{\n \"$\uAC1C\uC694\": [\n {\n \"\": \"\uC2DC\uD2B8 \uC0DD\uC131\"\n - }\n ],\n \"Food\": [\n {\n \"Id\": \"\uC2DD\uBCC4ID\",\n \"Name\": - \"\uC774\uB984\",\n \"Ingredient1\": \"\uC7AC\uB8CC1\",\n \"Ingredient2\": - \"\uC7AC\uB8CC2\",\n \"Taste1:Taste_Enum\": \"\uB9DB1\",\n \"Taste2:Taste_Enum\": - \"\uB9DB2\"\n },\n {\n \"Id\": \"Food001\",\n \"Name\": \"\uD587\uBE5B\uC218\uD504\",\n - \"Ingredient1\": \"\uADF9\uB77D\uC300\",\n \"Ingredient2\": \"\uD587\uBE5B\uB2F9\uADFC\",\n - \"Taste1:Taste_Enum\": \"Bitter\",\n \"Taste2:Taste_Enum\": \"Sweet\"\n - },\n {\n \"Id\": \"Food002\",\n \"Name\": \"B\",\n \"Ingredient1\": - 1,\n \"Ingredient2\": 4,\n \"Taste1:Taste_Enum\": \"Spicy\",\n - \"Taste2:Taste_Enum\": \"Bitter\"\n },\n {\n \"Id\": \"Food003\",\n - \"Name\": \"C\",\n \"Ingredient1\": 2,\n \"Ingredient2\": 5,\n - \"Taste1:Taste_Enum\": \"Fresh\",\n \"Taste2:Taste_Enum\": \"None\"\n - },\n {\n \"Id\": \"Food004\",\n \"Name\": \"D\",\n \"Ingredient1\": - 3,\n \"Ingredient2\": 6,\n \"Taste1:Taste_Enum\": \"Sour\",\n - \"Taste2:Taste_Enum\": \"Salty\"\n }\n ],\n \"Monster\": [\n {\n - \"Id\": \"\uC2DD\uBCC4\uBC88\uD638\",\n \"Name\": \"\uC774\uB984\",\n - \"T1\": \"\uD14C\uC2A4\uD2B81\"\n },\n {\n \"Id\": \"Test001\",\n - \"Name\": \"A\",\n \"T1\": 1\n },\n {\n \"Id\": \"Test002\",\n - \"Name\": \"B\",\n \"T1\": 2\n },\n {\n \"Id\": \"Test003\",\n - \"Name\": \"C\",\n \"T1\": 3\n },\n {\n \"Id\": \"Test004\",\n - \"Name\": \"D\",\n \"T1\": 4\n }\n ]\n}" + }\n ],\n \"Food\": [\n {\n \"Id:string\": \"\uC2DD\uBCC4ID\",\n + \"Name:string\": \"\uC774\uB984\",\n \"Ingredient1:string\": \"\uC7AC\uB8CC1\",\n + \"Ingredient2:string\": \"\uC7AC\uB8CC2\",\n \"Taste1:Taste_Enum\": \"\uB9DB1\",\n + \"Taste2:Taste_Enum\": \"\uB9DB2\",\n \"Sprite:Sprite\": \"Addressable + \uC774\uBBF8\uC9C0 \uC774\uB984\"\n },\n {\n \"Id:string\": \"Food001\",\n + \"Name:string\": \"\uD587\uBE5B\uC218\uD504\",\n \"Ingredient1:string\": + \"\uADF9\uB77D\uC300\",\n \"Ingredient2:string\": \"\uD587\uBE5B\uB2F9\uADFC\",\n + \"Taste1:Taste_Enum\": \"Bitter\",\n \"Taste2:Taste_Enum\": \"Sweet\",\n + \"Sprite:Sprite\": \"Gold\"\n },\n {\n \"Id:string\": \"Food002\",\n + \"Name:string\": \"B\",\n \"Ingredient1:string\": 1,\n \"Ingredient2:string\": + 4,\n \"Taste1:Taste_Enum\": \"Spicy\",\n \"Taste2:Taste_Enum\": \"Bitter\",\n + \"Sprite:Sprite\": \"\"\n },\n {\n \"Id:string\": \"Food003\",\n + \"Name:string\": \"C\",\n \"Ingredient1:string\": 2,\n \"Ingredient2:string\": + 5,\n \"Taste1:Taste_Enum\": \"Fresh\",\n \"Taste2:Taste_Enum\": \"None\",\n + \"Sprite:Sprite\": \"\"\n },\n {\n \"Id:string\": \"Food004\",\n + \"Name:string\": \"D\",\n \"Ingredient1:string\": 3,\n \"Ingredient2:string\": + 6,\n \"Taste1:Taste_Enum\": \"Sour\",\n \"Taste2:Taste_Enum\": \"Salty\",\n + \"Sprite:Sprite\": \"\"\n }\n ],\n \"Monster\": [\n {\n \"Id\": + \"\uC2DD\uBCC4\uBC88\uD638\",\n \"Name\": \"\uC774\uB984\",\n \"T1\": + \"\uD14C\uC2A4\uD2B81\"\n },\n {\n \"Id\": \"Test001\",\n \"Name\": + \"A\",\n \"T1\": 1\n },\n {\n \"Id\": \"Test002\",\n \"Name\": + \"B\",\n \"T1\": 2\n },\n {\n \"Id\": \"Test003\",\n \"Name\": + \"C\",\n \"T1\": 3\n },\n {\n \"Id\": \"Test004\",\n \"Name\": + \"D\",\n \"T1\": 4\n }\n ]\n}" MaxLogs: 100 diff --git a/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/So/FoodSo.asset b/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/So/FoodSo.asset index a6b247c6c..8f41dc457 100644 --- a/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/So/FoodSo.asset +++ b/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/So/FoodSo.asset @@ -19,21 +19,25 @@ MonoBehaviour: Ingredient2: "\uD587\uBE5B\uB2F9\uADFC" Taste1: 1 Taste2: 2 + Sprite: {fileID: 21300000, guid: e15933f76da90e742866563b5cd9e45f, type: 3} - Id: Food002 Name: B Ingredient1: 1 Ingredient2: 4 Taste1: 3 Taste2: 1 + Sprite: {fileID: 0} - Id: Food003 Name: C Ingredient1: 2 Ingredient2: 5 Taste1: 4 Taste2: 0 + Sprite: {fileID: 0} - Id: Food004 Name: D Ingredient1: 3 Ingredient2: 6 Taste1: 5 Taste2: 6 + Sprite: {fileID: 0} diff --git a/Assets/_Datas/02.Scripts/GenerateGoogleSheet/Core/GoogldSheetManager.cs b/Assets/_Datas/02.Scripts/GenerateGoogleSheet/Core/GoogldSheetManager.cs index 56ddbf4de..08935706d 100644 --- a/Assets/_Datas/02.Scripts/GenerateGoogleSheet/Core/GoogldSheetManager.cs +++ b/Assets/_Datas/02.Scripts/GenerateGoogleSheet/Core/GoogldSheetManager.cs @@ -33,8 +33,8 @@ public class GoogleSheetManager : Singleton private string _generateFolderPath = "/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated"; [Title("버전 복구"), BoxGroup("버전 복구")] - [SerializeField, Tooltip("마지막 업데이트 시간"), ReadOnly] - private string _lastUpdated; + [SerializeField, Tooltip("현재 사용중인 버전"), ReadOnly] + private string _currentVersion; #if UNITY_EDITOR [BoxGroup("버전 복구")] @@ -46,18 +46,19 @@ public class GoogleSheetManager : Singleton [SerializeField, Required("반드시 수정자 이름을 입력해야 합니다\n이력을 남길 때 표시될 사용자 이름입니다.")] private string _editorName; - private string _baseFullPath => $"{Application.dataPath}{_generateFolderPath}"; - private string _baseAssetPath => $"Assets{_generateFolderPath}"; + private string BaseFullPath => $"{Application.dataPath}{_generateFolderPath}"; + private string BaseAssetPath => $"Assets{_generateFolderPath}"; - private string _jsonFullPath => $"{_baseFullPath}/GoogleSheetJson.json"; - private string _changeLogAssetPath => $"{_baseAssetPath}/Logs/GoogleSheetChangeLog.asset"; - private string _backupFullPath => $"{_baseFullPath}/BackUps"; + private string JsonFullPath => $"{BaseFullPath}/GoogleSheetJson.json"; + private string ChangeLogAssetPath => $"{BaseAssetPath}/Logs/GoogleSheetChangeLog.asset"; + private string BackupFullPath => $"{BaseFullPath}/BackUps"; private string[] _availSheetArray; private string _json; - + [SerializeField, ReadOnly] private bool _refreshTrigger; + private bool _alreadyCreatedSo; public static async Task LoadSo() where T : ScriptableObject @@ -82,7 +83,7 @@ private async void FetchGoogleSheet() { _availSheetArray = _availSheets.Split('/'); - var prevLog = AssetDatabase.LoadAssetAtPath(_changeLogAssetPath); + var prevLog = AssetDatabase.LoadAssetAtPath(ChangeLogAssetPath); string previousJson = prevLog?.Logs.LastOrDefault()?.JsonSnapshot ?? ""; if (_isAccessGoogleSheet) @@ -112,11 +113,9 @@ private async void FetchGoogleSheet() if (diffs.Count > 0) GoogleSheetDiffViewer.ShowWindow(diffs); - bool isJsonSaved = SaveFileOrSkip(_jsonFullPath, _json); + bool isJsonSaved = SaveFileOrSkip(JsonFullPath, _json); GenerateClassFilesPerSheet(_json); - _lastUpdated = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); - if (isJsonSaved) { _refreshTrigger = true; @@ -136,18 +135,18 @@ private bool CanFetchData() /// private void SaveChangeLog(string json) { - string logsDirectory = Path.GetDirectoryName(_changeLogAssetPath); + string logsDirectory = Path.GetDirectoryName(ChangeLogAssetPath); if (!Directory.Exists(logsDirectory)) { Directory.CreateDirectory(logsDirectory); AssetDatabase.ImportAsset(logsDirectory); } - - var log = AssetDatabase.LoadAssetAtPath(_changeLogAssetPath); + + var log = AssetDatabase.LoadAssetAtPath(ChangeLogAssetPath); if (log == null) { log = ScriptableObject.CreateInstance(); - AssetDatabase.CreateAsset(log, _changeLogAssetPath); + AssetDatabase.CreateAsset(log, ChangeLogAssetPath); } string previousJson = log.Logs.Count > 0 ? log.Logs[^1].JsonSnapshot : null; @@ -162,7 +161,7 @@ private void SaveChangeLog(string json) string saveTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); string versionLabel = $"{log.Logs.Count} - {saveTime} by {_editorName}"; - _lastUpdated = versionLabel; + _currentVersion = versionLabel; log.Logs.Add(new GoogleSheetChangeLog.LogEntry { Editor = _editorName, @@ -183,11 +182,11 @@ private void SaveJsonBackup(string json, string saveTime) { string safeSaveTime = saveTime.Replace(":", "-"); // 윈도우 파일 이름 안전 처리 - if (!Directory.Exists(_backupFullPath)) - Directory.CreateDirectory(_backupFullPath); + if (!Directory.Exists(BackupFullPath)) + Directory.CreateDirectory(BackupFullPath); string fileName = $"{safeSaveTime} by {_editorName}.json"; - string filePath = Path.Combine(_backupFullPath, fileName); + string filePath = Path.Combine(BackupFullPath, fileName); File.WriteAllText(filePath, json); } @@ -196,7 +195,7 @@ private void SaveJsonBackup(string json, string saveTime) [Button("선택한 버전과 현재 비교")] private void CompareWithSelectedVersion() { - var log = AssetDatabase.LoadAssetAtPath(_changeLogAssetPath); + var log = AssetDatabase.LoadAssetAtPath(ChangeLogAssetPath); if (log == null || _restoreIndex < 0 || _restoreIndex >= log.Logs.Count) { Debug.LogWarning("비교할 수 있는 로그가 없습니다."); @@ -204,7 +203,7 @@ private void CompareWithSelectedVersion() } string restoreJson = log.Logs[_restoreIndex].JsonSnapshot; - string currentJson = File.Exists(_jsonFullPath) ? File.ReadAllText(_jsonFullPath) : ""; + string currentJson = File.Exists(JsonFullPath) ? File.ReadAllText(JsonFullPath) : ""; List diffs = GoogleSheetFetchHelper.CompareJsonDiff(currentJson, restoreJson); @@ -223,7 +222,7 @@ private void CompareWithSelectedVersion() [Button("선택한 버전으로 복구")] private void RestoreSelectedVersion() { - var log = AssetDatabase.LoadAssetAtPath(_changeLogAssetPath); + var log = AssetDatabase.LoadAssetAtPath(ChangeLogAssetPath); if (log == null || _restoreIndex < 0 || _restoreIndex >= log.Logs.Count) { Debug.LogWarning("복원할 수 있는 로그가 없습니다."); @@ -231,7 +230,7 @@ private void RestoreSelectedVersion() } string restoreJson = log.Logs[_restoreIndex].JsonSnapshot; - string currentJson = File.Exists(_jsonFullPath) ? File.ReadAllText(_jsonFullPath) : ""; + string currentJson = File.Exists(JsonFullPath) ? File.ReadAllText(JsonFullPath) : ""; List diffs = GoogleSheetFetchHelper.CompareJsonDiff(currentJson, restoreJson); @@ -241,9 +240,9 @@ private void RestoreSelectedVersion() // 복원 처리 _json = restoreJson; - SaveFileOrSkip(_jsonFullPath, _json); + SaveFileOrSkip(JsonFullPath, _json); CreateGoogleSheetSo(); - _lastUpdated = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + _currentVersion = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); Debug.Log($"[{log.Logs[_restoreIndex].Editor}]의 버전으로 복원 완료"); } @@ -253,7 +252,7 @@ private void RestoreSelectedVersion() /// private IEnumerable> GetVersionOptions() { - var log = AssetDatabase.LoadAssetAtPath(_changeLogAssetPath); + var log = AssetDatabase.LoadAssetAtPath(ChangeLogAssetPath); if (log == null) yield break; @@ -288,12 +287,12 @@ private async Task LoadDataGoogleSheet(string url) /// private string LoadDataLocalJson() { - if (File.Exists(_jsonFullPath)) + if (File.Exists(JsonFullPath)) { - return File.ReadAllText(_jsonFullPath); + return File.ReadAllText(JsonFullPath); } - Debug.Log($"Json 파일이 존재하지 않습니다\n{_jsonFullPath}"); + Debug.Log($"Json 파일이 존재하지 않습니다\n{JsonFullPath}"); return null; } @@ -335,12 +334,13 @@ private void GenerateClassFilesPerSheet(string jsonInput) JObject jsonObject = JObject.Parse(jsonInput); string basePath = $"Assets{_generateFolderPath}"; - // enum 후보 수집 Dictionary> enumCandidates = new(); + foreach (var jObject in jsonObject) { string className = jObject.Key; if (!IsExistAvailSheets(className)) continue; + var items = (JArray)jObject.Value; if (items.Count < 2) continue; @@ -349,17 +349,30 @@ private void GenerateClassFilesPerSheet(string jsonInput) foreach (var property in ((JObject)items[i]).Properties()) { string rawName = property.Name; - if (!rawName.Contains("_Enum")) continue; - string[] parts = rawName.Split(':'); - string enumTypeName = - parts.Length > 1 ? parts[1].Replace("_Enum", "") : rawName.Replace("_Enum", ""); - string enumValue = NormalizeEnumKey(property.Value.ToString()); + // ✅ Enum 타입 여부 판단 + string enumType = null; + if (rawName.EndsWith("_Enum")) + { + if (rawName.Contains(":")) + { + enumType = rawName.Split(':')[1].Replace("_Enum", ""); + } + else + { + enumType = rawName.Replace("_Enum", ""); + } + } - if (!enumCandidates.ContainsKey(enumTypeName)) - enumCandidates[enumTypeName] = new(); + if (!string.IsNullOrEmpty(enumType)) + { + string enumValue = NormalizeEnumKey(property.Value.ToString()); - enumCandidates[enumTypeName].Add(enumValue); + if (!enumCandidates.ContainsKey(enumType)) + enumCandidates[enumType] = new(); + + enumCandidates[enumType].Add(enumValue); + } } } } @@ -386,11 +399,12 @@ private void GenerateClassFilesPerSheet(string jsonInput) File.WriteAllText($"{basePath}/EnumTypes.cs", enumCode.ToString()); AssetDatabase.ImportAsset($"{basePath}/EnumTypes.cs"); - // 시트별 클래스 파일 생성 + // 시트별 클래스 생성 foreach (var jObject in jsonObject) { string className = jObject.Key; if (!IsExistAvailSheets(className)) continue; + var items = (JArray)jObject.Value; if (items.Count < 2) continue; @@ -443,31 +457,25 @@ private string GenerateDataClassCode(string className, JArray items) foreach (var prop in ((JObject)item).Properties()) { string rawName = prop.Name; - string propType = GetCSharpType(prop.Value.Type); - string fieldName, enumName; + string fieldName = rawName; + string explicitType = null; - if (rawName.Contains(":") && rawName.EndsWith("_Enum")) + if (rawName.Contains(":")) { - string[] parts = rawName.Split(':'); + var parts = rawName.Split(':'); fieldName = parts[0]; - enumName = parts[1].Replace("_Enum", ""); - types[i] = enumName; - names[i] = fieldName; + explicitType = parts[1].Replace("_Enum", ""); } else if (rawName.EndsWith("_Enum")) { fieldName = rawName.Replace("_Enum", ""); - enumName = fieldName; - types[i] = enumName; - names[i] = fieldName; - } - else - { - types[i] ??= propType; - names[i] ??= rawName; + explicitType = fieldName; } + types[i] = explicitType ?? GetCSharpType(prop.Value.Type); + names[i] = fieldName; tooltips[i] ??= commentRow.TryGetValue(rawName, out var tip) ? tip.ToString() : ""; + i++; } } @@ -513,7 +521,6 @@ private bool CreateGoogleSheetSo() if (!IsExistAvailSheets(sheetName)) continue; - // 1. 데이터 클래스 및 SO 클래스 타입 찾기 Type dataType = FindTypeByName(sheetName); Type soType = FindTypeByName($"{sheetName}So"); @@ -524,7 +531,6 @@ private bool CreateGoogleSheetSo() continue; } - // 2. SO 경로 설정 및 불러오기 / 생성 string soDirectory = $"Assets{_generateFolderPath}/So"; if (!Directory.Exists(soDirectory)) { @@ -533,20 +539,19 @@ private bool CreateGoogleSheetSo() } string soPath = $"{soDirectory}/{sheetName}So.asset"; - ScriptableObject soInstance = AssetDatabase.LoadAssetAtPath(soPath); if (soInstance == null) { soInstance = ScriptableObject.CreateInstance(soType); AssetDatabase.CreateAsset(soInstance, soPath); } + GoogleSheetAddressableAutoSetup.AutoRegisterSo(soPath); - // 3. 데이터 파싱 IList list = (IList)Activator.CreateInstance(typeof(List<>).MakeGenericType(dataType)); var dataArray = (JArray)sheetPair.Value; - for (int i = 1; i < dataArray.Count; i++) // 0번은 주석이므로 제외 + for (int i = 1; i < dataArray.Count; i++) { JObject item = (JObject)dataArray[i]; object dataInstance = Activator.CreateInstance(dataType); @@ -554,7 +559,20 @@ private bool CreateGoogleSheetSo() foreach (var prop in item.Properties()) { string rawName = prop.Name; - string fieldName = rawName.Contains(":") ? rawName.Split(':')[0] : rawName; + string fieldName = rawName; + string explicitType = null; + + if (rawName.Contains(":")) + { + var split = rawName.Split(':'); + fieldName = split[0]; + explicitType = split[1].Replace("_Enum", ""); + } + else if (rawName.EndsWith("_Enum")) + { + fieldName = rawName.Replace("_Enum", ""); + explicitType = fieldName; + } FieldInfo field = dataType.GetField(fieldName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); @@ -568,14 +586,59 @@ private bool CreateGoogleSheetSo() try { object value; + + // ✅ Sprite 처리 + if (explicitType == "Sprite" && field.FieldType == typeof(Sprite)) + { + string key = prop.Value.ToString().Trim(); + if (string.IsNullOrEmpty(key)) + { + Debug.Log($"[GoogleSheetManager] Sprite 키가 비어 있어 {fieldName} 건너뜀"); + continue; + } + +#if UNITY_EDITOR + if (!AddressableManager.HasLabel(key, "GoogleSheetSprite")) + { + Debug.LogWarning($"[GoogleSheetManager] '{key}'는 GoogleSheetSprite 라벨 없음"); + continue; + } + + var handle = Addressables.LoadAssetAsync(key); + var sprite = handle.WaitForCompletion(); + + Debug.Log($"[GoogleSheetManager] '{key}' 로딩 결과: {sprite} / 상태: {handle.Status}"); + + if (handle.Status == AsyncOperationStatus.Succeeded && sprite != null) + { + field.SetValue(dataInstance, sprite); + Debug.Log($"[GoogleSheetManager] {fieldName} <- {sprite.name} 반영됨"); + } + else + { + Debug.LogWarning($"[GoogleSheetManager] Sprite 로드 실패 또는 null: {key}"); + } +#endif + continue; + } + + // ✅ Enum 처리 if (field.FieldType.IsEnum) { - string enumRaw = prop.Value.ToString(); - string formatted = NormalizeEnumKey(enumRaw); + string formatted = NormalizeEnumKey(prop.Value.ToString()); value = Enum.TryParse(field.FieldType, formatted, out var parsed) ? parsed : Activator.CreateInstance(field.FieldType); } + // ✅ Color 처리 + else if (field.FieldType == typeof(Color)) + { + if (ColorUtility.TryParseHtmlString(prop.Value.ToString(), out var color)) + value = color; + else + value = Color.white; + } + // ✅ 기본 타입 처리 else { value = Convert.ChangeType(prop.Value.ToString(), field.FieldType); @@ -593,7 +656,6 @@ private bool CreateGoogleSheetSo() list.Add(dataInstance); } - // 4. SO의 필드에 리스트 할당 FieldInfo listField = soType.GetField($"{sheetName}List", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); @@ -607,12 +669,12 @@ private bool CreateGoogleSheetSo() Debug.LogError($"[GoogleSheetManager] {soType.Name}에 {sheetName}List 필드가 없습니다."); allSuccess = false; } + + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); } - AssetDatabase.SaveAssets(); - AssetDatabase.Refresh(); Debug.Log("✅ 시트별 ScriptableObject 생성 및 데이터 반영 완료"); - return allSuccess; } @@ -640,7 +702,7 @@ private void OnValidate() Debug.LogWarning("[GoogleSheetManager] _json이 null이므로 SO 생성을 건너뜁니다."); return; } - + _refreshTrigger = false; _alreadyCreatedSo = true; DelayedSoCreation(); @@ -687,7 +749,7 @@ private IEnumerator ReloadRoutine() Debug.Log("런타임 데이터 재적용 완료"); } } - + public void CreateSoAfterScriptReload() { if (_json != null) diff --git a/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-05-13 03-29-57 by 고성진.json.meta b/Assets/_Datas/03.Image.meta similarity index 57% rename from Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-05-13 03-29-57 by 고성진.json.meta rename to Assets/_Datas/03.Image.meta index 90c5d90bb..767a5870a 100644 --- a/Assets/_Datas/02.Scripts/GenerateGoogleSheet/AutoCreated/BackUps/2025-05-13 03-29-57 by 고성진.json.meta +++ b/Assets/_Datas/03.Image.meta @@ -1,6 +1,7 @@ fileFormatVersion: 2 -guid: 0b8a0f41319f9ca4296c486723e89735 -TextScriptImporter: +guid: 216d49d821b41f24788e428fbf995b8c +folderAsset: yes +DefaultImporter: externalObjects: {} userData: assetBundleName: diff --git a/Assets/_Datas/03.Image/Gold.png b/Assets/_Datas/03.Image/Gold.png new file mode 100644 index 0000000000000000000000000000000000000000..9e468f91037c767e137e0ee640c7bfe67355138a GIT binary patch literal 7586 zcmaKQcQ{;K*ZxsP5ItH5CL_|c8Qna338IZIL>Y`W#weqV9zu#9y%Q28B6^D!5hYqk zkmzEVh~7ItdEfVWf8QU^_nqrH=j^iXd)<5OwXSQQ^9-S*MoY~>4FCYGhPsOW#arRe zO-XU_EOBz51^{YhCuL=XhO#o)%>!%iP8)*Bh>0yPk-j#u6Iy;{?she=%Lga&tzdu zpx^rH>haid6ETx`GJqeX4`F1w8Nc|_8IaZwmw|uhiPcr_=xGiiWl^6c2Qw`8wmX16 z0l)?s-ZuzWE`LJu4hxV1ZX-fBn7Zc9!x|AcO#pB_FbiQKUM7jt2fBp}yP1J*cA(s# z%8nXH1OOL&fD!~Kp#@fUG~__Q_u_;}HsJfqYsHj6GzpM)TkQs^!h68l=#jnvX=(k z>(xnsw%(-v6wP5#=K7>B96nncvp=u@YO5e@(jI!g~(msoH=WXA|(eHbOzVQtriwW$=td~%Dr0A#pb}c zG2l3JXdya5m1{=*#qTf@FLk28ot=m1mf^Zaefjb#pG{sfbUsqBkUz$(3NP`$XQeuJGW~m^(v1#VQ^Ousq*1eO8ZvXm{Zo z^y5{o_ayyfS_&4~0}4Ugf>9io;{gT- zF%kSe03@^?#wzfW0R1Ti^8nEFi~V6yBAZqxB><@8KDt}3c!}l%b7>o0<_E5(Ha1cu zg^B{rjW!tuB?>~wHR?R}WW}q7ZSe2pHRWU+xs2&^4AmcCQnbWbriYJ~-PkCs*|Xc( zn+BbN^h=R z=f0lJXL*b6idBO84Z5Be1Rd(@d~qTgmo?Dp6Y7Em1_g4%3{II^H<#luJ<|lr%8*iU zN_<@$eVp!#f0ZMml$Kkf*I%6djk4q^JjYA} zlk1HTHh5BeMa(OmuRnuTxwk+tf8iLGYb)8qEud{ZFpf*jFMm>zlmIctM+BW8uhbvm%pkq#NVSgJ61vWc*$wF*nfC{-56}+y3z7-S3s#IezqNlG^j31*Z@gvPX4PYr zb#-}s-ODXYAxj`@7mk7Ndr>t?H0m{mH%@pB{+9b{yNq9=+Wovsw=^}Rwu{-x-(~x~ zKDs`{BMB9wl!&|P0+X`c=!>)cg-&&&Rn^Li9)FfI4Y2zd^QP5HFiO_PVKM|d7-#AqL71!6-EihU7y|iZ~MtUR@osDey z(KK-q9sWu+^V9uEiO8b*LbW{WAx#&z%pjk#09}=l0lOJ z&*-f!dYkdK!#e{r!~Byu_RjE~T?5x~*viQY^-B5*#j5lka*uBhvp2}qca4c_^e^0B z0UkK7K5rMdrsaY;v5&sDpn%pQeex+gl!XPbNdt>JRAsH1@;GPzDU(j32>CoQjAATzQpyg{QuX+f7x zvXB2d>OGA;Xr04vv2N;stVuqQERZxm;&@a=h9=`7Pa}VINgNandQTxtBgdjdLq+?5 z$0GsT#sTpHo&>#_60^u2@j4PnqxL&i=!I;nsBc5@OCJ5cF}jSUCF2q zsV}L2N7&e_YT=-^PZ$cmvqrgLb_ox&bDk}@?`_t;?h8GwvWsM z@dt4MQsJpgDV6dIVPGYMFuU$Tp{q96m957a;kv3VFQZ@TRn*nrmwB<6Wt_ApHT74Z z@{wbN?me$gQ7T=1eti7Z7Y)4I+QurQ)1`wy+Du%2 zC(sh`i4p>doqA-$ZBZ&wd~B zUJhjqXpSpK)R$L%ulIehISXl3eb34pX~5 zPj1ENhYi1arOY2{B9>H~*wgD;wqw>{%Ysa@Gg@~}88J5wzRQ+mRq9q+RCZ8)uYU2T ziH_Asz%Cv$K0bZF?(^!h`f|atYw7-j)_3=tofSvEL~PK$<=l*3;IzWrpT_0+Iq$~w zSNDJJClg1CubTJOmQHNtN#yVOWd&RG8lS#>Q`hq2=J;sql#l;5T^JY3U(@S}D@`^0 zz9#5q)xcfX;kD4ISPmP`#@5B4sd_aZ-A~!E{;&Km?WwLWJL9k}lkZwvE2%L064Bi1 zaJPkw5bSuyYPwI2o7r8ucEyDcw`N`k_|GGLs_Tzyu7YQxMPShraZetbZ`PDk}5`z-PN>yx=*wLY~G-g~^!u~|Gk zoU|OxTXq8pbA^?KR|Y=^8K2{qJ>L*#PJbS24w{~P-?)4jIoMi;FW&Z8e^dMp-o@L+ z(=>pW-F$uWc3>iKy?(uMrmLAJ?e>Yn8De|r$hNESi|)Q0G2rY(c>nSCafmb@F7gtZXuPo$WyzqLNEz2NpVpDun1HHCJYr3hKUQpU~q8}I7}4$p9^x~&BM+fuCH?MKfW${ zvJgic&J8Xs?BnAj7e|NlQ!r;SdoKys!}T#Jl2i^65 zM{7?*ycM564Zq+u{STbP*C-#q_>SAr@j!;~b% zl@yhgVK7xCMQN#fiZCfEy!dg73-wy3{-J6-tx4_55|#KM(5P)Hos z!w`#g`8x{`j#wPl(-G?i77-B=1>e?2+B&)Z8M*Ukm;SwI6_kgQH_Gmw2NnbVSD4{W z|0qFRS`4Q2M*{4h<^LON_Ya{{f+|Ww#iXSESFG@b7~wxT@;`Fs@1cuC{L}nz1zdFg zTSF+8GF}=$Sd9tqY%O;VBYr@uPV-`V9jsrP?kf=y`=ed<|WJkJy z_3g`qC&1WOCRRLBeuI_eV3L(A76aW_UiFRFoVG~nygB$L3Z!)xpr}b&+6A@xPfvdF z$~n~{=TBBE-%x_dDCZb9RlPwsX*Ehwg+`y^h28@Im;pd|ufAExSB(EKH8lshqH!X6e%( zWxw5!BcG7o;B7%&40qk+4qr3*;Ce4tKmBx0^4D_ps;^2$uvF@GgB)~Jx)}S)!i^YR zxurP+qIAvxeQGSevp5XF$i^_oHT@0I8F*Bp$*Vc`PWSqd0u>#?t&Y6vyYr)*86v0; z9j_V?%oylT|7BAkoX+W7l8oV{-sunb*y%Wbq(tkoz|Uc{c2l+Rrh4V*1JLdz^)N`2 zwx*EXRKMgIe&^)Ln2ClX>0X1M7o$3?O?rJRkV)NA*HB)KM40gD+sS~ZBUc|Vv{5b^ z$rFxu_o6O(zHMfvh5w%7HA8IhHT_mZ!BrwA4fu^5KamSFRj~s z%>t1DUE8YeiEQ9to_-b4tV8W7`lTH=y&+4{8dD zdgh@V>lD)d>h9ugTCBcpd8Q<}D8bsAyhJ;NO#Qu27UG!Q{&C>F`C5al_jF@d@mm>5 z`4x~PzgVmu|B)W`nds}v8nNT;dqN`R{7<(cuwp@u8`UHqD#dP3^)XnGP$t7@LS6LS z@*q@VeKqCyh3nO$()4zIAIEZNC>M*V*Y$foWgeeoNq!nQT=YrJr@#}Z?xPX3h=Zwb zM_CHnn#?Ed6>QEANV;h`b02>-Q zIX(+3X`@^iT|S)KZ~ipdKx3|#Ip=I-Q_)?DaiKU_rEGt}aC^7Rj|yW-#pXq;#w`Pc zWgJEP)8eVmG&b$CaWR4|)QJSByqg($KY_1djiDt#k#*aFS*X{c)HCWn8Q5N2C8Dbi zGZ>H~nf1bu=rps#D{JuZbier1LYHO1_VroG?MG8@D3v(Z{VsjDyo|f!eC1Unh%z{J za9%u_Lh+}{DEC!LO@p5|v1P&CAxR#aCd3yH8y08o=C=csLlu{&^Y8)#qV{Ugw@)0pTBOe5<@2`Rjs(T9i;FibZhc5}+BCxRf|x*Tq@3AmOC|L|u%|3a zr+pQC+q-e%6_3jpG^9-yF!>(9(>+fzXJoI~_7S!$kC6tHII8Qls)Y%@?`bK!_vw_g z$jd&Y#mebJz7gsLH(HsCa56RuK41yE@16*Hs+J_xVLjcE=0(RU{-fV=S|;BHs1Nef zr=Rp!Q$Z8d6);A|g-tu-6~fniBUDdC0$nT3c%S8mOD!h$fy)-nA8}9=YLUiHDmNVY z#+Nb0_?yPDg04E~*7F(;2L&kzri%BPRsOaojT1Bie~a3t(>|A@DD;eJfvQEf;*+NN zl-~AQWK%n(EGOtQq&>>IL;~&BSj#>B%XTY(F7J!kg2AsJEERzK)jMAM7LwaK`ol#V zq^qI}s*WflE3S`rri7KF0=Yp+{CY=?oF9cL@7?ehuoVi$Mx37oJJMDqyX-k7(>*U$ zpqn0&T`Gb##gmbgH-k4c4!aUl9!l?t_{;NZJxj85wrNiZi%SgESR&Q1?*J3G5G(H1 z_jKQK(_}q8_k(p=OE&lJ+=EfZyfaGf<2szyB#u1MlVR z!yNmLmZ*jxF9c0^uhc4e#OiO-;)ALt)e0j0qGCe(1ixhN3m1+`k zBv4>-^;t&BLyt$r+g`%{3blb zMa#o%s-%2hopR!RfJ99zlat$AXoJ4HTf&D*8JDlq%>DAyl3K`DHGG-V>v~2C$CdHQ z7?Tmt;4%!`F7oI-+)x1`Nr{H5vI{iuIgEcCn7(}!b5OIJeII~2?Cork7BD9z**m{_ zw*oflikg#x4b5qoXgp=>pLrGdhPzDD=!v=YnxLbCP5fLlc}RWxn@cwiSU*|%7?OrW z996>vid5$H8D5aJ?1h;WQ+_PE2HdrN)H(4`zQ0DJ@QpkvZeyEHq|eUxMn-aT)%EIC z)(SrfMH7ZApf~myJ3J`M zQ>nc-sDDgvo_-6_yD^q=9>KbCcU45fBNm)Fa~>+AxEXeSL@lmD@s=C^VjlV(K_E^0`J~#8-TyIsh7$1f5?7& zr}|W%_4hgG9A`)gjQwct8VObH&7RT#O7lt_I=nQs=;$}U2Mu&Hs|hlW2<>lU8iOzZ8Y5*5UHa+=(>oS*VRd+=vl0=M+h$bEUX@1MJg zawoX&@2b>NYZs^Yw{wGhNlfJ&2RaGTCEn=Wp+DuJ~wvFZhcFY?iseLXj#-! zp~jOXk@xJP-aKD`k&e)=rQeR1GrB^Wq{I15B=aOa5x&m}%@4lt4Hb}r=iR5-6E?+4 zA98%)U3MhZMy@j1Y^}M6Y=97O3avMry4Cvxp(FP#zV$>$A$lm0`EnX&z9G8C zbSqk{%02}u+-kNk>9ykVvJ&X_4NuT$0Oi0%pXUTUDR!_V=hj44ef~n;BUs}=CRrW| zx%+O``>)%3soks9NbWuui4>ISx`leQ7k{O(AY+l|=DM!ftmb(%ilJJv1UWimam=otJ zccDKPMLxEn1Q0>3Itqxb+ZkPb^%Px6LSt7c+MRwuoN>8t*d&&0meF?tmh#{(L2@v8q)50+r04vuoW7_=-CBIoui3ip@$FHd_ zUJ|f--kEyJcs=w5z`^&p=02#Ws`6&-`t$i`=h{E>93bp{>iO^9e|y-RvYnl*GJWE=aIeP1SkI&7aEeAm zdAgK=fs`3UKHElzJ@eb4-RP+Q0H z`khmLMtP1ip{!P}#F|*0(l@U=<>!32Z*-9k(02@RN_5e0%uM{je(eq8gb6B7 z7xZd{h{%JL1+Y-$iV;lo=s{+N^IGm(4rHS8TrAx4Jti7#Qlq9FcZ|}-#?WE5fr>f_ zzlr^AOSe#3QWPh_JO<}t;{W}|MRK3tY6HGT`^Ko0Ds}w%&84BLqf(}19s2(Okq;Fc literal 0 HcmV?d00001 diff --git a/Assets/_Datas/03.Image/Gold.png.meta b/Assets/_Datas/03.Image/Gold.png.meta new file mode 100644 index 000000000..9ddfc6143 --- /dev/null +++ b/Assets/_Datas/03.Image/Gold.png.meta @@ -0,0 +1,143 @@ +fileFormatVersion: 2 +guid: e15933f76da90e742866563b5cd9e45f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 64 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: