구글 시트 매니저 기능 변경
#필드 생성 처리 방지
This commit is contained in:
parent
0630680f5e
commit
3d4d0efdfe
@ -9,13 +9,10 @@
|
|||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using DDD;
|
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
using Sirenix.OdinInspector;
|
using Sirenix.OdinInspector;
|
||||||
using UnityEditor;
|
using UnityEditor;
|
||||||
using UnityEngine.AddressableAssets;
|
using UnityEngine.AddressableAssets;
|
||||||
using UnityEngine.ResourceManagement.AsyncOperations;
|
|
||||||
using UnityEngine.U2D;
|
|
||||||
using ColorUtility = UnityEngine.ColorUtility;
|
using ColorUtility = UnityEngine.ColorUtility;
|
||||||
|
|
||||||
public class GoogleSheetManager : Singleton<GoogleSheetManager>
|
public class GoogleSheetManager : Singleton<GoogleSheetManager>
|
||||||
@ -33,8 +30,8 @@ public class GoogleSheetManager : Singleton<GoogleSheetManager>
|
|||||||
private string _namespace = "DDD";
|
private string _namespace = "DDD";
|
||||||
|
|
||||||
[BoxGroup("기본 설정")]
|
[BoxGroup("기본 설정")]
|
||||||
[SerializeField, Tooltip("적용시킬 시트의 이름을 적고, 여러 개의 시트를 적는 경우 '/'로 구분지어 시트 나열\nex) \"Sheet1/Sheet2\"")]
|
[SerializeField, Tooltip("적용시킬 시트의 이름들")]
|
||||||
private string _availSheets = "Sheet1/Sheet2";
|
private List<string> _availSheets = new(){ "Sheet1", "Sheet2" };
|
||||||
|
|
||||||
[BoxGroup("기본 설정")]
|
[BoxGroup("기본 설정")]
|
||||||
[SerializeField, Tooltip("Class, Json, So 생성 위치 \"/GenerateGoogleSheet\"")]
|
[SerializeField, Tooltip("Class, Json, So 생성 위치 \"/GenerateGoogleSheet\"")]
|
||||||
@ -70,28 +67,11 @@ public class GoogleSheetManager : Singleton<GoogleSheetManager>
|
|||||||
|
|
||||||
private bool _alreadyCreatedSo;
|
private bool _alreadyCreatedSo;
|
||||||
|
|
||||||
public static async Task<T> LoadSo<T>() where T : ScriptableObject
|
|
||||||
{
|
|
||||||
await Addressables.InitializeAsync().Task;
|
|
||||||
|
|
||||||
string key = typeof(T).Name;
|
|
||||||
var handle = Addressables.LoadAssetAsync<T>(key);
|
|
||||||
await handle.Task;
|
|
||||||
|
|
||||||
if (handle.Status == AsyncOperationStatus.Succeeded)
|
|
||||||
return handle.Result;
|
|
||||||
|
|
||||||
Debug.LogError($"[GoogleSheetManager] Addressable 로드 실패: {key}");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if UNITY_EDITOR || DEVELOPMENT_BUILD
|
#if UNITY_EDITOR || DEVELOPMENT_BUILD
|
||||||
[BoxGroup("데이터 변경")]
|
[BoxGroup("데이터 변경")]
|
||||||
[Button("데이터 최신화"), EnableIf(nameof(CanFetchData))]
|
[Button("데이터 최신화"), EnableIf(nameof(CanFetchData))]
|
||||||
private async Task FetchGoogleSheet()
|
private async Task FetchGoogleSheet()
|
||||||
{
|
{
|
||||||
_availSheetArray = _availSheets.Split('/');
|
|
||||||
|
|
||||||
var prevLog = AssetDatabase.LoadAssetAtPath<GoogleSheetChangeLog>(ChangeLogAssetPath);
|
var prevLog = AssetDatabase.LoadAssetAtPath<GoogleSheetChangeLog>(ChangeLogAssetPath);
|
||||||
string previousJson = prevLog?.Logs.LastOrDefault()?.JsonSnapshot ?? "";
|
string previousJson = prevLog?.Logs.LastOrDefault()?.JsonSnapshot ?? "";
|
||||||
|
|
||||||
@ -333,7 +313,7 @@ private bool SaveFileOrSkip(string path, string contents)
|
|||||||
|
|
||||||
private bool IsExistAvailSheets(string sheetName)
|
private bool IsExistAvailSheets(string sheetName)
|
||||||
{
|
{
|
||||||
return Array.Exists(_availSheetArray, x => x == sheetName);
|
return _availSheets.Contains(sheetName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -366,6 +346,9 @@ private void GenerateClassFilesPerSheet(string jsonInput)
|
|||||||
{
|
{
|
||||||
string rawName = property.Name;
|
string rawName = property.Name;
|
||||||
string enumType = null;
|
string enumType = null;
|
||||||
|
|
||||||
|
// 🔽 #으로 시작하는 보기용 컬럼은 무시
|
||||||
|
if (rawName.StartsWith("#")) continue;
|
||||||
|
|
||||||
// ✅ 단일 필드 Enum: Cookware:Enum
|
// ✅ 단일 필드 Enum: Cookware:Enum
|
||||||
if (rawName.Contains(":Enum"))
|
if (rawName.Contains(":Enum"))
|
||||||
@ -480,51 +463,49 @@ private string GenerateDataClassCode(string className, JArray items)
|
|||||||
sb.AppendLine($" public class {className} : IId");
|
sb.AppendLine($" public class {className} : IId");
|
||||||
sb.AppendLine(" {");
|
sb.AppendLine(" {");
|
||||||
|
|
||||||
int count = sampleRow.Properties().Count();
|
List<string> types = new();
|
||||||
string[] types = new string[count];
|
List<string> names = new();
|
||||||
string[] names = new string[count];
|
List<string> tooltips = new();
|
||||||
string[] tooltips = new string[count];
|
|
||||||
|
|
||||||
foreach (JToken item in items.Skip(1))
|
foreach (var prop in sampleRow.Properties())
|
||||||
{
|
{
|
||||||
int i = 0;
|
string rawName = prop.Name;
|
||||||
foreach (var prop in ((JObject)item).Properties())
|
|
||||||
|
// 무시할 컬럼이면 continue
|
||||||
|
if (rawName.StartsWith("#")) continue;
|
||||||
|
|
||||||
|
string fieldName = rawName;
|
||||||
|
string explicitType = null;
|
||||||
|
|
||||||
|
if (rawName.Contains(":Enum"))
|
||||||
{
|
{
|
||||||
string rawName = prop.Name;
|
fieldName = rawName.Split(':')[0];
|
||||||
string fieldName = rawName;
|
explicitType = fieldName;
|
||||||
string explicitType = null;
|
|
||||||
|
|
||||||
if (rawName.Contains(":Enum"))
|
|
||||||
{
|
|
||||||
fieldName = rawName.Split(':')[0];
|
|
||||||
explicitType = fieldName;
|
|
||||||
}
|
|
||||||
else if (rawName.Contains(":") && rawName.EndsWith("_Enum"))
|
|
||||||
{
|
|
||||||
var parts = rawName.Split(':');
|
|
||||||
fieldName = parts[0];
|
|
||||||
explicitType = parts[1].Replace("_Enum", "");
|
|
||||||
}
|
|
||||||
else if (rawName.Contains(":NativeEnum"))
|
|
||||||
{
|
|
||||||
fieldName = rawName.Split(':')[0];
|
|
||||||
explicitType = fieldName;
|
|
||||||
}
|
|
||||||
else if (rawName.Contains(":"))
|
|
||||||
{
|
|
||||||
var parts = rawName.Split(':');
|
|
||||||
fieldName = parts[0];
|
|
||||||
explicitType = parts[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
types[i] = explicitType ?? GetCSharpType(prop.Value.Type);
|
|
||||||
names[i] = fieldName;
|
|
||||||
tooltips[i] ??= commentRow.TryGetValue(rawName, out var tip) ? tip.ToString() : "";
|
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
else if (rawName.Contains(":") && rawName.EndsWith("_Enum"))
|
||||||
|
{
|
||||||
|
var parts = rawName.Split(':');
|
||||||
|
fieldName = parts[0];
|
||||||
|
explicitType = parts[1].Replace("_Enum", "");
|
||||||
|
}
|
||||||
|
else if (rawName.Contains(":NativeEnum"))
|
||||||
|
{
|
||||||
|
fieldName = rawName.Split(':')[0];
|
||||||
|
explicitType = fieldName;
|
||||||
|
}
|
||||||
|
else if (rawName.Contains(":"))
|
||||||
|
{
|
||||||
|
var parts = rawName.Split(':');
|
||||||
|
fieldName = parts[0];
|
||||||
|
explicitType = parts[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
types.Add(explicitType ?? GetCSharpType(prop.Value.Type));
|
||||||
|
names.Add(fieldName);
|
||||||
|
tooltips.Add(commentRow.TryGetValue(rawName, out var tip) ? tip.ToString() : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < names.Count; i++)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrWhiteSpace(tooltips[i]))
|
if (!string.IsNullOrWhiteSpace(tooltips[i]))
|
||||||
{
|
{
|
||||||
@ -671,6 +652,9 @@ private async Task<bool> InternalCreateGoogleSheetSoAsync()
|
|||||||
string rawName = prop.Name;
|
string rawName = prop.Name;
|
||||||
string fieldName = rawName;
|
string fieldName = rawName;
|
||||||
string explicitType = null;
|
string explicitType = null;
|
||||||
|
|
||||||
|
// 🔽 보기용 컬럼 무시
|
||||||
|
if (rawName.StartsWith("#")) continue;
|
||||||
|
|
||||||
if (rawName.Contains(":Enum"))
|
if (rawName.Contains(":Enum"))
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user