位置: 编程技术 - 正文

关于unity数值资源序列化后在windows和android平台的本地读取(unity 数学)

编辑:rootadmin

推荐整理分享关于unity数值资源序列化后在windows和android平台的本地读取(unity 数学),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:unity常用的数据结构,unity value,unity常用数据结构和算法,unity 数据表,unity数据类型,unity 数学,unity值类型,unity值类型,内容如对您有帮助,希望把文章链接给更多的朋友!

unity存储数&#;文件的方式有很多,目前常用的有xml,csv,json等,xml与json都是节点式,csv的话策划可直接在excel导出,相对方便一些,目前对这三种方式的性能消耗未作探究,目前公司项目使用的csv表&#;存储数&#;,所以暂时仅讨论如何用序列化的方式优化数据资源加载,对于本文未提及的部分,欢迎朋友们补充~

首先了解序列化,序列化就是将资源文件转换成二进制文件到某个文件夹内,这个过程只需一次,然后在运行或者游戏发布以后加载数据资源时就可以直接将二进制文件夹内的二进制资源反序列化,结果就跟load数据资源相同,但这么读取二进制文件将极大的提升加载速度,废话不多说,先看一个小的例子:

首先想要序列化需要引用

using System.IO;using System.Runtime.Serialization.Formatters.Binary;using System.Runtime.Serialization;

第三个是需要抛出异常时引用,然后创建一个类,相当于后面的csv表&#;文件

[Serializable] public class ClassToSerialize { public int id = 1; public string name = "jack"; public string Sex = "man"; }

记住要想序列化某一个数据类型,一定要在前面加上 [Serializable]

开始序列化

public void SerializeNow() { ClassToSerialize c = new ClassToSerialize(); string path = Application.streamingAssetsPath &#; "/test.dat"; FileStream fs = new FileStream(path, FileMode.Create); BinaryFormatter formatter = new BinaryFormatter(); try { formatter.Serialize(fs, c); } catch (SerializationException e) { Debug.Log("Failed to serialize. Reason: " &#; e.Message); throw; } finally { fs.Close(); }

注意path路径,Application.streamingAssetsPath为StreamingAssets文件夹的本地路径,因此在序列化之前先在Unity工程的Assets目录下创建一个StreamingAssets文件夹,名称一定要是StreamingAssets,序列化后ClassToSerialize里的内容就存储在了test.dat文件内

关于unity数值资源序列化后在windows和android平台的本地读取(unity 数学)

序列化成功了,然后开始反序列化使用

IEnumerator DeSerializeNow() { ClassToSerialize c = new ClassToSerialize();

string path = Application.streamingAssetsPath &#; "/test.dat"; //FileStream fs = File.Create(filename); //FileInfo info = new FileInfo(filename); //if (!info.Exists) //{ // SerializeNow(); //} FileStream fs = new FileStream(path, FileMode.Open); yield return 0; try { BinaryFormatter formatter = new BinaryFormatter(); c = formatter.Deserialize(fs) as ClassToSerialize; } catch (SerializationException e) { Debug.Log("Failed to deserialize. Reason: " &#; e.Message); throw; } finally { fs.Close(); } textLab.text = c.name; }

这样就可以讲二进制文件中的内容反序化回c身上了,为了更加直观的展示,添加以下代码

void OnGUI() { if (GUI.Button(new Rect(0,0,,),"点我序列化")) { SerializeNow(); } if (GUI.Button(new Rect(0, , , ), "点我反序列化")) { StartCoroutine(DeSerializeNow()); } //if (GUI.Button(new Rect(0, , , ), "点我打印路径")) //{ // ShowThePath(); //} }

序列化只需在unity里运行一次

也许有朋友注意到了,在DeSerializeNow方法里我使用了携程,这里提到一个坑,windows平台下使用filestream读取二进制文件无任何问题,但发布到安卓平台是会报错找不到文件,开始我以为是路径不正确,但反复调试之后确定了是filestream在安卓平台下无法直接读取二进制文件,因此为了可以在安卓平台下反序列化,将DeSerializeNow修改为:

IEnumerator DeSerializeNow() { ClassToSerialize c = new ClassToSerialize();

string path = Application.streamingAssetsPath &#; "/test.dat"; //FileStream fs = File.Create(filename); //FileInfo info = new FileInfo(filename); //if (!info.Exists) //{ // SerializeNow(); //} if (Application.platform == RuntimePlatform.WindowsEditor) { FileStream fs = new FileStream(path, FileMode.Open); yield return 0; BinaryFormatter formatter = new BinaryFormatter(); c = formatter.Deserialize(fs) as ClassToSerialize; fs.Close(); } else if(Application.platform == RuntimePlatform.Android) { WWW www = new WWW(path); yield return www; MemoryStream fs = new MemoryStream(www.bytes); BinaryFormatter formatter = new BinaryFormatter(); c = formatter.Deserialize(fs) as ClassToSerialize; fs.Close(); } textLab.text = c.name; }

未结束,撸局再接着写

如果有朋友想在安卓手机上序列化的话, Application.streamingAssetsPath就不行了,如果谁有可行的方法欢迎讲解,我目前所能发现的可以在安卓平台上序列化的路径就是Application.persistentDataPath,这个路径位置就不是在工程目录下了,他是每个平台的data存储路径,想知道的朋友可以自己打印出来看

&#;&#;

Unity截图的三种方式 1.最常见的一种方式IEnumeratorCaputreScreen(){yieldreturnnewWaitForEndOfFrame();texture.ReadPixels(newRect(0,0,width,height),0,0);texture.Apply();}该方法可以截取一个矩形框内的图

小地图的制作,游戏中的导航仪,minimap制作(继续我们的仙剑demo) 我们继续白天的话题,白天列出了还有哪些东西需要后续的讲解,今晚我们就来讨论下小地图,说实话,小地图这个概念在u3d里面因为有透视相机的出

游戏中用到的真随机 隨機產生一個在程式設計中算是滿常使用到的一個需求可能你希望每次進來程式的時候,都可以讓使用到感到不一樣因此你就會需要「Random」隨機C#而在

标签: unity 数学

本文链接地址:https://www.jiuchutong.com/biancheng/372818.html 转载请保留说明!

上一篇:Unity自定义定时器(unity固定位置随机生成物体)

下一篇:Unity截图的三种方式(unity屏幕截图)

  • 社保的滞纳金放什么科目
  • 销售部门领用材料用于销售计入
  • 利润表中其他业务利润是什么
  • 小微企业增值税减免政策
  • 营业额和合同额的区别
  • 小微企业城建税优惠政策2022
  • 销售净水器营业执照范围
  • 购进石料再加工算自产吗
  • 企业最常用的业务分录
  • 服装行业营业收入存在的问题与对策
  • 以土地出资土地增值税
  • 风险纳税人还能开发票吗
  • 工厂员工饭票制度
  • 合同里包括产品销售和服务如何开票?
  • 社保逾期滞纳金可以免除吗?
  • 工程承建方给予的工期奖励如何做账?
  • 剩余材料入库的会计分录怎么做?
  • 个人独资企业免税销售额
  • 文化创意企业一般纳税人开票产生的税率为多少?
  • 发票查验平台查询官网手机版App
  • 应收账款的贷方反映
  • 会计明细账簿包括哪些
  • 小规模季报利润表本月金额和本年累计金额
  • 实收资本的会计处理
  • 多计提的社保费,可否计入营业外收入
  • 抵扣发票可以在哪里抵扣
  • 专票私人能开吗?
  • 银行存款明细账怎么登记及范本
  • 社保已申报但未缴费有什么影响
  • 如何关闭windows10自动更新
  • 浏览器播放视频加速怎么设置
  • 资源管理器被关闭了怎么恢复
  • 盈余公积的提取基数
  • PHP:oci_set_client_identifier()的用法_Oracle函数
  • 补交上一年度的企业所得税费用的分录
  • 股权转让交易税计税依据是什么
  • 进项税额转出怎么做账务处理
  • shine.exe - shine是什么进程 有什么用
  • 如何确定赞助对象
  • echarts高德地图自定义区域
  • 个人所得税减免政策2023
  • win11升级正式版
  • 土地使用权的折旧年限和折旧方法
  • phpxdebug
  • vue backbone
  • 【手撕Transformer】Transformer输入输出细节以及代码实现(pytorch)
  • 利用python实现Apriori关联规则算法
  • 生产劳务成本会计分录
  • 三联发票是哪三联颜色分别
  • php返回json数据交给js读出来是数字,不是字符串
  • select
  • 船舶税率是多少
  • 财政部关于印发财政专户管理办法的通知
  • 完税证明能作为抵扣凭证吗
  • 其它收益和递延收益的区别
  • 用友t3采购订单怎么录入
  • 单位收风险金是什么意思
  • 化妆品消费税纳税标准
  • 开出银行承兑汇票一张用于支付材料采购款
  • 可供分配的利润分配顺序
  • 公司视同销售产品确认收入分录?
  • 未分配利润期初余额怎么录入
  • 电汇凭证是什么会计科目
  • 企业给员工租的公寓
  • 公司厂房房产税计税依据最新
  • 通过MySQL优化Discuz!的热帖翻页的技巧
  • slmgr.vbs /dli
  • linux系统设置ntp同步
  • wp8.0升级8.1
  • vpengine.exe进程
  • linux服务器宕机排查
  • Ubuntu GNOME 14.10的桌面升级到GNOME 3.16教程
  • win7桌面图标自动排列怎么取消
  • win102020h2怎么样
  • linux bas
  • node.js中的http.createClient方法使用说明
  • 菜鸟 安卓
  • JavaScript入门教程
  • 没有交税,个人税可以低房子利息嘛
  • 代理记账公司里的公司文件盒书写样式图片
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设