Excel导入数据创建ScriptableObject
ExcelToScriptableObject
提示
该package是为了导入大量数据做的 使用不是很方便 需要自己改动写ScriptableObject赋值代码适配自己的需求。
导入Package
Assets/Import Package/Custom Package 选择包导入
使用
首先找到脚本ExcelToScriptableObject,对方法GetScriptableObjects初始化物体赋值进行修改,每个人初始化的物体属性不同所以需要根据自己需要进行修改。package中有示例。可看后面代码详解。
Unity上方导航栏中找到ExcelTool,点击选择Import,出现面板如下图左一所示
选择需要生成的ScriptableObject,出现右图所示界面,选择想要生成的ScriptableObject
再选择excel,非常不建议使用xls,会出现无法初始化list等问题。
重复导入确保删除之前的生成的ScriptableObject,否则会出现问题,如导入的数据未改变等。
解决方案:去文件管理器删除再重新生成

代码详解
重写赋值部分
DataRowCollection可视为二维string数组
1 2 3 4 5 6 7 8 9 10 11 12
| DataRowCollection data = ReadExcel(excelpath, out int col, out int row, type);
Item item = ScriptableObject.CreateInstance<Item>();
item.itemName = data[i][0].ToString(); int.TryParse(data[i][1].ToString(), out item.times); item.list = new List<string>(data[i][2].ToString().Split(';'));
AssetDatabase.CreateAsset(item, "Assets/Items/item" + i + ".asset");
|
窗口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| public class ExcelWindow : EditorWindow { public ScriptableObject source;
[MenuItem("ExcelTool/Import")] public static void OnInit() { GetWindow<ExcelWindow>("导入excel", true); }
public void OnGUI() { GUILayout.BeginHorizontal(); GUILayout.Label("Import Excel"); GUILayout.EndHorizontal();
GUILayout.BeginHorizontal(); GUILayout.Label("Excel/根据excel后缀选"); GUILayout.EndHorizontal(); source = (ScriptableObject)EditorGUILayout.ObjectField("选择需要生成的ScriptalbeObject脚本", source, typeof(ScriptableObject), false);
if (GUILayout.Button("选择Excel/后缀为xlsx")) { string filePath = EditorUtility.OpenFilePanel("选择Excel/后缀为xlsx", Application.dataPath, "*xlsx"); ExcelToScriptableObject.GetScriptableObjects(filePath, source,ExcelType.xlsx); } if (GUILayout.Button("选择Excel/后缀为xls(不推荐)")) { string filePath = EditorUtility.OpenFilePanel("选择Excel/后缀为xls", Application.dataPath, "*xls"); ExcelToScriptableObject.GetScriptableObjects(filePath,source, ExcelType.xls);
} } }
|
使用过程中可能出现的问题
不建议使用xls,大概出问题,做的时候用xls测试生成list完全无法生成成功 甚至string 赋值也有问题 可能是我没弄懂 总之xlsx测试就完全没问题
重新导入文件值没变化
删除之前生成的ScriptableObject 再重试
选择ScriptableObject 时没有我想要生成的
使用前需要先创建一个ScriptableObject实例,指右键Create,不是ScriptableObject C#脚本
参考
Unity实用功能之读写Excel表格| 8月更文挑战 - 掘金 (juejin.cn)
(31条消息) Unity Excel 文件读取和写入_PassionY的博客-CSDN博客_unity读取excel文件
Unity知识记录–自动处理大量数据导入,生成ScriptObject(制作UI界面) - 哔哩哔哩 (bilibili.com)