|
|
|
@ -20,16 +20,10 @@ namespace Tools.ExcelResolver.Editor
|
|
|
|
|
var worksheet = classCodeDataDictPair.Key; |
|
|
|
|
var classCodeData = classCodeDataDictPair.Value; |
|
|
|
|
|
|
|
|
|
Type dataSOType = ExcelResolverUtil.GetOrCacheTypeByName(classCodeData.className); |
|
|
|
|
|
|
|
|
|
if (dataSOType == null) |
|
|
|
|
{ |
|
|
|
|
Debug.LogError($"Class '{classCodeData.className}SO' not found. Please generate classes first (or check namespace)."); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
var dataName = $"{classCodeData.className}"; |
|
|
|
|
var path = $"{excelResolverConfig.SOPathRoot}/{classCodeData.className}/"; |
|
|
|
|
|
|
|
|
|
string[] assetGuids = AssetDatabase.FindAssets($"t:{dataSOType}", new[] { path }); |
|
|
|
|
string[] assetGuids = AssetDatabase.FindAssets($"t:{dataName}", new[] { path }); |
|
|
|
|
Dictionary<string, ScriptableObject> originAssets = new(); |
|
|
|
|
for (int i = 0; i < assetGuids.Length; i++) |
|
|
|
|
{ |
|
|
|
@ -50,7 +44,7 @@ namespace Tools.ExcelResolver.Editor
|
|
|
|
|
|
|
|
|
|
if (originAssets.ContainsKey(assetName)) |
|
|
|
|
{ |
|
|
|
|
set(originAssets[assetName], dataSOType, worksheet, row, classCodeData); |
|
|
|
|
set(originAssets[assetName], worksheet, row, classCodeData); |
|
|
|
|
EditorUtility.SetDirty(originAssets[assetName]); |
|
|
|
|
Debug.Log($"刷新:{assetName}", originAssets[assetName]); |
|
|
|
|
result.Add(originAssets[assetName]); |
|
|
|
@ -58,8 +52,8 @@ namespace Tools.ExcelResolver.Editor
|
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
ScriptableObject instance = ScriptableObject.CreateInstance(dataSOType); |
|
|
|
|
set(instance, dataSOType, worksheet, row, classCodeData); |
|
|
|
|
ScriptableObject instance = ScriptableObject.CreateInstance(dataName); |
|
|
|
|
set(instance, worksheet, row, classCodeData); |
|
|
|
|
AssetDatabase.CreateAsset(instance, fullPath); |
|
|
|
|
Debug.Log($"创建:{assetName}", instance); |
|
|
|
|
result.Add(instance); |
|
|
|
@ -72,13 +66,14 @@ namespace Tools.ExcelResolver.Editor
|
|
|
|
|
AssetDatabase.DeleteAsset(AssetDatabase.GetAssetPath(value)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
WriteUtilSO(path, dataSOType, result, classCodeData); |
|
|
|
|
WriteUtilSO(path, result, classCodeData); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
AssetDatabase.SaveAssets(); |
|
|
|
|
GC.Collect(); |
|
|
|
|
GC.WaitForPendingFinalizers(); |
|
|
|
|
|
|
|
|
|
void set(ScriptableObject instance, Type dataSOType, ExcelWorksheet worksheet, int row, ClassCodeData classCodeData) |
|
|
|
|
void set(ScriptableObject instance, ExcelWorksheet worksheet, int row, ClassCodeData classCodeData) |
|
|
|
|
{ |
|
|
|
|
foreach (var pair in classCodeData.fields) |
|
|
|
|
{ |
|
|
|
@ -87,7 +82,7 @@ namespace Tools.ExcelResolver.Editor
|
|
|
|
|
|
|
|
|
|
var cell = worksheet.Cells[row, col]; |
|
|
|
|
object convertedValue = ExcelResolverUtil.ConvertCellValue(cell, fieldData.type, classCodeData.className); |
|
|
|
|
FieldInfo fieldInfo = dataSOType.GetField(fieldData.varName); |
|
|
|
|
FieldInfo fieldInfo = instance.GetType().GetField(fieldData.varName); |
|
|
|
|
if (fieldInfo == null) throw new Exception($"{classCodeData.className}中不存在字段:{fieldData.varName}"); |
|
|
|
|
fieldInfo.SetValue(instance, convertedValue); |
|
|
|
|
} |
|
|
|
|