本帖是延续的: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. Android客户端通过socket与服务器通信

    android端--Client package com.sec.chatroomandroid; import java.io.BufferedReader; import java.io.Buff ...

  2. .net core 13

  3. UVa 816 Abbott的复仇(BFS)

    寒假的第一道题目,在放假回家颓废了两天后,今天终于开始刷题了.希望以后每天也能多刷几道题. 题意:这道BFS题还是有点复杂的,给一个最多9*9的迷宫,但是每个点都有不同的方向,每次进入该点的方向不同, ...

  4. Android Studio实现Service AIDL

    Android Studio实现Service AIDL [日期:2015-01-02] 来源:Linux社区  作者:teenyboy [字体:大 中 小]       今天要开发过程中要用到AID ...

  5. IMapControl3 Interface(1) Properties属性

    IMapControl3 Interface Provides access to members that control the MapControl. Note: the IMapControl ...

  6. 手动启动Android模拟器

    1.5版本中加了个所谓的AVD(Android Virtual Device),AVD就相当于是一个模拟器的,不过你可以利用AVD创建基于不同版本的模拟器,然后使用emulator-avd avdNa ...

  7. CodeForces 609D Gadgets for dollars and pounds

    二分天数+验证 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm&g ...

  8. 关于OC和Swift使用GIT创建项目

    1.先进入码云,点击自己的头像 ->   ,2.里面有一个SSH公钥,点击   ,3.之后在终端输入 ssh-keygen -t rsa -C “xxxxx@xxx.com”,注意:”” 要用英 ...

  9. hashmap如何初始化

    现在知道的有两种: 1) Map<String, String> hashMap = new HashMap<String, String>(){            {   ...

  10. find命令--xargs--exec

    find命令 1.1.find命令选项-name 按照文件名查找-perm 按照文件权限来查找-prune 可以使用find命令排除当前文件夹,不查找-user 可以按照文件属主来查找-group 可 ...