本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二)

前几天有点事情所以没有继续更新,今天我们接着说。上个帖子中我们看到已经把Excel数据生成了.bin的文件,不过其实这样到游戏中还是不能用的。主要有两个方面,1.bin文件的后缀使我们随便取的名字,但是这种文件Unity不买账。因为Unity中的二进制文件必须是以.bytes命名的。2.在写文件之前其实还可以对二进制进行压缩,这样可以最大化节省设备空间。也就是说我们在生成数据实例后还需要做以下几件事:序列化 -> 压缩 -> 写文件.

方式和上帖中的方式基本相同,但是因为我们要对序列化的数据进行压缩,所以不能直接把数据序列化进文件流,二是序列化进一个MemoryStream然后取出二进制数据压缩后再进行写文件。

        MemoryStream ms = new MemoryStream();
Serializer.Serialize<StaticData>(ms, (StaticData)staticData);
byte[] byts = ms.ToArray();
System.IO.FileStream stream1 = new System.IO.FileStream(Application.dataPath + "/Resources/StaticDatas.bytes", System.IO.FileMode.Create);
System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream1);
writer.Write(GZIP.Encode(byts));
writer.Close();
stream1.Close();

哦啦,加上这几句就Ok了。说明一下我们使用了ICSharpCode.SharpZipLib.GZip这个dll,GZIP的使用方法可以参考这个地址 http://community.sharpdevelop.net/forums/t/11005.aspx,这里我写了个GZIP工具类就两个方法

    public static byte[] Encode(byte[] bin)
{
MemoryStream ms = new MemoryStream();
GZipOutputStream gzp = new GZipOutputStream(ms);
gzp.Write(bin, , bin.Length);
gzp.Close();
return ms.ToArray();
} public static byte[] Decode(byte[] bin)
{
GZipInputStream gzp = new GZipInputStream(new MemoryStream(bin));
MemoryStream re = new MemoryStream();
int count = ;
byte[] data = new byte[];
while ((count = gzp.Read(data, , data.Length)) != )
{
re.Write(data, , count);
}
return re.ToArray();
}

然后,我们在看看游戏中是怎么用的。使用也很简单,因为前面已经把类什么的都生成好了,所以,看代码把。

        byte[] bytes = (Resources.Load("StaticDatas") as TextAsset).bytes;
MemoryStream ms = new MemoryStream(GZIP.Decode(bytes));
StaticData data = Serializer.Deserialize<StaticData>(ms);

现在我们游戏中就能看到数据了,使用的时候直接data.就可以啦。

哦了,至此本课题结束。

每个人都会经历从不会到会的过程,如果有什么纰漏还请大家多指教!谢谢啦!

C# Unity游戏开发——Excel中的数据是如何到游戏中的 (三)的更多相关文章

  1. C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二)

    本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (一) 上个帖子主要是讲了如何读取Excel,本帖主要是讲述读取的Excel数据是如何序列化成二进制的,考虑到现在在手游中 ...

  2. C# Unity游戏开发——Excel中的数据是如何到游戏中的 (四)2018.4.3更新

    本帖是延续的:C# Unity游戏开发--Excel中的数据是如何到游戏中的 (三) 最近项目不算太忙,终于有时间更新博客了.关于数据处理这个主题前面的(一)(二)(三)基本上算是一个完整的静态数据处 ...

  3. 【COCOS2DX-LUA 脚本开发之一】在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!

    [COCOS2DX-LUA 脚本开发之一]在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途! 分类: [Cocos2dx Lua 脚本开发 ] 2012-04-1 ...

  4. excel中的数据粘贴不全到plsql中,excel 粘贴后空白,Excel复制粘贴内容不全

    http://zhidao.baidu.com/link?url=pHZQvfWJzI-lQjl4uP86q4GLcpYHu4o-fdjiYegJS0Cy5HEq5oz0YrUye3iHjmv5CJ3 ...

  5. [置顶] cocos2d-x 3.0游戏开发xcode5帅印博客教学 003.[HoldTail]游戏世界以及背景画面

    cocos2d-x 3.0游戏开发xcode5帅印博客教学 003.[HoldTail]游戏世界以及背景画面 写给大家的前言,在学习cocos2d-x的时候自己走了很多的弯路,也遇到了很多很多问题,不 ...

  6. hbase使用MapReduce操作4(实现将 HDFS 中的数据写入到 HBase 表中)

    实现将 HDFS 中的数据写入到 HBase 表中 Runner类 package com.yjsj.hbase_mr2; import com.yjsj.hbase_mr2.ReadFruitFro ...

  7. sql之将一个表中的数据注入另一个表中

    sql之将一个表中的数据注入另一个表中 需求:现有两张表t1,t2,现需要将t2的数据通过XZQHBM相同对应放入t1表中 t1: t2: 思路:left join 语句: select * from ...

  8. 使用spark将内存中的数据写入到hive表中

    使用spark将内存中的数据写入到hive表中 hive-site.xml <?xml version="1.0" encoding="UTF-8" st ...

  9. SQL语句的使用,SELECT - 从数据库表中获取数据 UPDATE - 更新数据库表中的数据 DELETE - 从数据库表中删除数据 INSERT INTO - 向数据库表中插入数据

    SQL DML 和 DDL 可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL). SQL (结构化查询语言)是用于执行查询的语法. 但是 SQL 语言也包含用于更新. ...

随机推荐

  1. Jackson最简单用法

    jackson的包在:https://yunpan.cn/cu2b6eMaBjFpz  访问密码 753f 代码: ObjectMapper objectMapper = new ObjectMapp ...

  2. 《accelerated c++》第九章---设计类

    本章简单介绍了类的设计,但是包含了一些好的设计原则. 1一些通用的设计原则 (1)一个函数是否设计成成员函数的原则:如果这个函数改变对象的状态,那么这个函数就应该成为这个对象的成员. (2)对于内置类 ...

  3. Java谜题心得

    1,二进制浮点数的运算是对实际算数的一种近似运算. 2,IEEE 754浮点算术保留了一个特殊的值用来表示一个不是数字的数量[IEEE 754].这个值就是NaN(“不是一个数字(Not a Numb ...

  4. 在MAC下配置MySQL 5.7 数据库的编码问题

    1.MySQL 5.7 for MAC 默认没有my.cnf文件 ,首先 新建my.cnf文件: 2.在my.cnf文件追加 [mysqld] character-set-server=utf8mb4 ...

  5. JAVA中浅复制与深复制 - coolmist - ITeye技术网站

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  6. c#之时间戳与DateTime的相互转换

    1. 时间戳转 DateTime static DateTime GetServerNow(ulong serverTime) { DateTime dateTimeStart = TimeZone. ...

  7. ZOJ 3935 2016

    简单规律题...没看懂题目直接从输出中找到了规律. 先不管是不是闰年,前后两项的差值会形成一个等差数列,公差是64... 输出的时候再判一下闰年即可. #include<cstdio> # ...

  8. bootstrap switch功能

    bootstrap switch是一个按钮开关,点击时获取其状态可通过以下代码: <input id="email_switch_state" type="chec ...

  9. HTML中meta的应用

    meta是用来在HTML文档中模拟HTTP协议的响应头报文.meta 标签用 于网页的<head>与</head>中,meta 标签的用处很多.meta 的属性有两种:name ...

  10. iOS开发——生成条形码,二维码

    - (void)viewDidLoad { [super viewDidLoad]; self.imageView.image = [self generateBarCode:@"15248 ...