经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 游戏设计 » 查看文章
插件之一:Epplus
来源:cnblogs  作者:feixus  时间:2019/5/5 8:36:24  对本文有异议

  从策划配置文件导入项目实际使用,为提高效率总会使用一些转换工具,据同事介绍Epplus更强大一些,我自己试了下,发现api非常全面且强大。记录下所学。

一、插件来源

  https://github.com/JanKallman/EPPlus

  https://www.nuget.org/packages/EPPlus/

二、使用

  在其github的WiKi页签有简单的使用示例, 具体导成什么格式,看自己的项目需求了。我是转成.asset和json格式的。

  2.1 配置excel

  我分了两个sheet:

                 

  2.2 设计对应的数据结构

  我使用的 jsonUtility.fromjson 不支持ScriptableObject,所以写了两个结构。

  1. [Serializable]
  2. public class SurfaceTile
  3. {
  4. public int ID;
  5. public int Layer;
  6. public string SpriteName;
  7. public string Vertices;
  8. }
  9. [Serializable]
  10. public class BuildingTile
  11. {
  12. public int ID;
  13. public string SpriteName;
  14. public int GridWidth;
  15. public int GridHeight;
  16. public int Interactive;
  17. }
  18. public class MapTileConfig : ScriptableObject
  19. {
  20. public List<SurfaceTile> BasicTileData;
  21. public List<BuildingTile> BuildingData;
  22. }
  23. public class MapTileConfigForJson
  24. {
  25. public List<SurfaceTile> BasicTileData;
  26. public List<BuildingTile> BuildingData;
  27. }

  

  2.3 解析

   2.3.1 .asset解析

  为了减少解析过程与数据结构的耦合, 我将sheet名设置为数据结构名, 利用反射来获取类型与创建实例

  1. static Type GetType(string typeName)
  2. {
  3. Type type = null;
  4. Assembly curExecuteAssembly = Assembly.GetExecutingAssembly();
  5. AssemblyName[] refAssembly = curExecuteAssembly.GetReferencedAssemblies();
  6. foreach (var assemblyName in refAssembly)
  7. {
  8. var assembly = Assembly.Load(assemblyName);
  9. if(assemblyName != null)
  10. {
  11. type = assembly.GetType(typeName);
  12. if (type != null)
  13. break;
  14. }
  15. }
  16. //typeof(SurfaceTile).Assembly.GetType()
  17. return type;
  18. }
  19. var dataObj = dataType.Assembly.CreateInstance(sheet.Name);

  

  我使用的 List<List<object>> excelData 来临时保存excel数据,但在数据转换为 MapTileConfig 类型没想到好的处理方式。希望有想法的可以指导下。

  1. static void SettingToAsset(List<List<object>> data, string assetPath)
  2. {
  3. MapTileConfig mapConfig = ScriptableObject.CreateInstance<MapTileConfig>();
  4. for (int i = 0; i < data[0].Count; i++)
  5. {
  6. mapConfig.BasicTileData.Add((SurfaceTile)data[0][i]);
  7. }
  8. for (int i = 0; i < data[1].Count; i++)
  9. {
  10. mapConfig.BuildingData.Add((BuildingTile)data[1][i]);
  11. }
  12. AssetDatabase.CreateAsset(mapConfig, testAssetPath + "/MapTileConfig.asset");
  13. AssetDatabase.SaveAssets();
  14. }

 

  2.3.2 json解析

  只要按着json格式,将键值对对应好,解析是很容易的,唯一没想明白的是jsonUtility.fromjson竟然不支持ScriptableObject结构。

三、总结

  因大量的逻辑代码都是用的lua,所以excel解析成json或直接lua形式的数据,都是比较方便的。

  有兴趣的可以查看我的测试代码:https://github.com/feixus/UnityTools

  

 

  

  

 

原文链接:http://www.cnblogs.com/yaosee/p/10808148.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号