前言
最近公司项目需要把Unity的Scriptable生成的asset文件,转换成二进制文件,给服务器这边用,中间也爬了不少坑,现在简要记录一下操作的方法。
楼主新手,写的如有错误,欢迎批评指正。
1.
首先是把asset文件里面的资源导出 ,一个个导出到二进制文件中,按照特定的顺序导入:
创建一个空byte数组,利用以下函数,把数据写入其中,可以考虑封装一个数据类型,写一个write操作,里面的具体操作用bitConverter实现
BitConverter.GetBytes();//可以将常规格式转换成byte
2.
再用文件流函数,创建一个二进制文件,把数据写进去
using(FileStream fs = new FileStream(path,FileMode.Create))
{
fs.Write(data.buffer,0,data.pos);
fs.Flush();
fs.Close();
}
3.
利用文件流读取函数,具体与2类似
4.
利用同样是利用1的函数,将二进制转换回原来的函数,可以在buffer位置直接传要赋值的变量的引用,这样可以直接传值。
BitConverter.ToInt32(buffer,pos);
5.
再次用2,重新存储即可
需要注意的坑
- C#中的char是两个字节
- 如果要把string类型转换成bytes,可以先把string转换成char[],再进行转换,我之前用的
System.Text.Encoding.UTF8.GetBytes(str);
这个函数,发现是个深坑,string转换成二进制再转换回来后,后面莫名其妙跟了好几个问号??? - 如果要转枚举,可以把枚举转换成int,输入Int,读取后,再转换成枚举重新赋值。