Unity 处理策划的 Excel
很多时候我们需要使用策划的Excel表来做游戏的静态数据配置, 而不是采用自己定义的xml或者U3D的scriptobject。
因为很多数据都是策划处理的,而策划最喜欢的就是excel,也只会用这个。如果不用excel,意味着数据需要你自己输入,纯属浪费时间。
所以很多时间我们和策划约定好VO类的字段,直接从Excel映射出VO类。
比如下面的这张表

另存为.csv 然后转换为.txt 注意编码都改为UTF-8


做好配置文件后,VO类映射就可以了,举个例子:
Vo 类
public class HeroVo
{
public int heroId; public string heroName;///武将名称 //public int heroStar;///品质
public int bingZhongId;///职业 public string heroIcon;///icon(头像) public string heroFace;///face(形象) public string heroDescription;///描述 public float hp; public float grownHp; public float attack; public float grownAttack; public float defense; public float grownDefense; public float luckRate; /// 暴击率 public float missRate;///闪避 public int skill1_Id; public int skill2_Id; public HeroVo (Dictionary<string,string> paramters)
{
FieldInfo[] fields = this.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance); foreach (var item in paramters.Keys)
{
FieldInfo[] curfields = fields.Where(t => t.Name == item).ToArray(); if (curfields != null && curfields.Length == )
{
//Debug.Log("key:" + item + "value:" + paramters[item]); FieldInfo curField = curfields[]; if (curField.FieldType == typeof(int))
{
curField.SetValue(this, int.Parse(paramters[item]));
}
else if (curField.FieldType == typeof(string))
{
curField.SetValue(this, paramters[item]);
}
else if (curField.FieldType == typeof(float))
{
curField.SetValue(this, float.Parse(paramters[item]));
}
}
}
} public override string ToString()
{
StringBuilder builder = new StringBuilder(); FieldInfo[] fields = this.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance);
foreach (var item in fields)
{
builder.Append(" " + item.Name + " : " + item.GetValue(this) + " ");
} return builder.ToString();
}
}
Vo 类集合解析
public class StaticHeroDataPool
{
public static string ResourceDataPath = "battle/Data/Hero/StaticHeroDataModel"; public List<HeroVo> heros = new List<HeroVo>(); static StaticHeroDataPool _instatnce = null;
public static StaticHeroDataPool Instatnce
{
get
{
if (_instatnce == null)
{
_instatnce = new StaticHeroDataPool(); _instatnce.AddData(LoadData(ResourceDataPath));
}
return _instatnce;
}
} private static string[] LoadData(string loadUrl)
{
TextAsset binAsset = Resources.Load(loadUrl, typeof(TextAsset)) as TextAsset; string[] lineArray = binAsset.text.Split("\n"[]); /// 去掉最后一空行
int length = lineArray.Length;
string[] newlineArray = lineArray.Where((t, index) => (index < length - )).ToArray(); return newlineArray;
} private void AddData(string[] lineArray)
{
string[] fieldNames = lineArray[].Replace("\r", "").Split(";"[]); for (int i = ; i < lineArray.Length; i++)
{
string[] Values = lineArray[i].Replace("\r", "").Split(";"[]); Dictionary<string, string> paramters = new Dictionary<string, string>();
for (int j = ; j < fieldNames.Length; j++)
{
paramters.Add(fieldNames[j], Values[j]);
} HeroVo heroVo = new HeroVo(paramters);
heros.Add(heroVo);
}
}
}
Unity 处理策划的 Excel的更多相关文章
- Unity 读取CSV与Excel
前几天看到我们在游戏中需要动态加载某些角色的游戏策划值,关于这个问题怎么解决呢?其实办法很多种,归根到底,就是数据的读取.我们可以想到的存储数据的载体有很多.例如:txt,xml,csv,excel. ...
- untiy 插件工具: 游戏中 策划数据Excel 导出到项目中
https://github.com/zhutaorun/Excel2Unity,这个项目是直接下载就可以用的, 其中原理和相关的解释 http://blog.csdn.net/neil3d/arti ...
- C# Unity游戏开发——Excel中的数据是如何到游戏中的 (一)
引言 现在做游戏开发的没有几个不用Excel的,用的最多的就是策划.尤其是数值策划,Excel为用户提供强大的工具,各种快捷键,各种插件,各种函数.但是作为程序来说其实关注的不是Excel而是它最终形 ...
- Unity读Excel 输出PC端(Windows)后不能读取的问题
问题:在Unity中用ExcelDataReader读Excel时,在编辑器模式下可以正常读取,但是在导出PC端app后读Excel却会报空,Excel读取失败. 要点: 1.把库文件Excel.dl ...
- Unity 3D读取Excel表格、导入信息、导出Json
Unity 3D读取/导入Excel表格 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar ...
- Excel转Json,Json转CSharp
一份给策划最好的礼物!就是:Excel2Json2CSharp 策划配置Excel,动不动就要改数值啊,增加字段啊. 程序这边对应的解析类就得改动啊.整一个麻烦了得! 所以我就整理了这个Excel2J ...
- KEngine策划指南:配置表格的编辑与编译
策划与程序的桥梁 执行策划在游戏开发的过程中的主要工作是什么?当然就是和Excel打交道了.大量的Excel数据表,最终会被演变成游戏的配置数据.日常游戏开发中,策划编辑配置表一般有两种方式: 编译式 ...
- Python导出Excel为Lua/Json/Xml实例教程(一):初识Python
Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...
- c# 游戏策划配置工具
该工具是提供策划配置excel数据,导出到mysql数据库,以及生成xml文件,和对应的xml解析实体类 实现了程序 excel 列名 ID =P 表示ID这列是唯一字段 =S=300 表示这列类型是 ...
随机推荐
- prettyprint
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- ASP.NET内置对象之Request传递请求对象
Request对象是HttpRequest类的一个实例,Request对象用于读取客户端在Web请求期间发送的HTTP值.Request对象常用的属性如下所示. q QueryString: ...
- AIDL与service
Service:Local service,一个进程中的多线程服务. AIDL:remote service,不同进程间通信. Service启动方法: startService():调用方destr ...
- PHP自定义函数使用外部变量
一般,php的自定义函数不能直接使用外部变量. 在php自定义函数中使用外部变量前,需要先使用global对外部变量进行声明. <?php $var = "hello World!& ...
- 如何让webapi只返回json格式数据
最近脑子不好用,总记不住事,以前搞过让webapi只返回json格式的数据,今天有人问我又突然想不起了,后来总结一下,备忘一下,大概有下面几种处理方式 1.在WebApiConfig类的Registe ...
- bootstrap bootstrapTable 分页 传值问题
bootstrapTable 分页传值 配置项:将原始的 limit: params.limit, //页面大小 page: params.offset, //页码 改成 limit: params ...
- 【转载】VGA时序与原理
显示器扫描方式分为逐行扫描和隔行扫描:逐行扫描是扫描从屏幕左上角一点开始,从左像右逐点扫描,每扫描完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT对电子束进行消隐,每行结束时,用行同步信 ...
- iOS9新系统下APP Store 应用上传新指南
一 iTunes Connect介绍 iTunes Connect是面向iOS应用开发人员的苹果门户网站,供开发人员管理其应用,跟踪下载情况.今年1月份闹得沸沸扬扬的iTunes Connect BU ...
- Lisp使用Lambda语法
lamdba 其实就是一个匿名函数. 定义Lisp的lambda语法非常的简单,如下: (lambda ([parameter]) [experssion]) 调用lambda的语法有三种方法,如下: ...
- [shell基础]——if/for/while/until/case 语句
for语句 do echo $loop done ` do echo $loop done for loop in `ls /tmp` do echo $loop done while语句 while ...