Unity3d Serialize问题
2024-08-23 15:42:32
备忘:
1. ScriptableOjbect中,由于Serialization的原因,不能使用基类引用来存储子类对象,这样都会导致数据丢失
2. 无法直接对Unity的数据如,vector3, quaternion等使用BinaryFormatter进行序列化,会报“SerializationException: Type UnityEngine.Vector3 is not marked as Serializable”。要绕过这个问题的姿势是,自己对Vector3进行包装。下面是其中一种方法
using System;
using System.Runtime.Serialization;
using UnityEngine; namespace Assets.Editor
{
sealed class Vector3SerializationSurrogate : ISerializationSurrogate
{ public void GetObjectData(object obj, System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
{
Vector3 v3 = (Vector3)obj;
info.AddValue("x", v3.x);
info.AddValue("y", v3.y);
info.AddValue("z", v3.z);
} public object SetObjectData(object obj, System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context, System.Runtime.Serialization.ISurrogateSelector selector)
{
Vector3 v3 = (Vector3)obj;
v3.x = (float)info.GetValue("x", typeof(float));
v3.y = (float)info.GetValue("y", typeof(float));
v3.z = (float)info.GetValue("z", typeof(float)); return (object)v3;
}
}
}
public static void TestFunc()
{
BinaryFormatter bf = new BinaryFormatter();
SurrogateSelector ss = new SurrogateSelector(); Vector3SerializationSurrogate v3Surrogate = new Vector3SerializationSurrogate();
ss.AddSurrogate(typeof(Vector3), new StreamingContext(StreamingContextStates.All), v3Surrogate); bf.SurrogateSelector = ss; MemoryStream stream = new MemoryStream(); Vector3 testObj = new Vector3(, , );
bf.Serialize(stream, testObj);
stream.Position = ;
Vector3 resultObj = (Vector3)bf.Deserialize(stream);
Debug.Log(resultObj);
}
最新文章
- bzoj-4517 4517: [Sdoi2016]排列计数(组合数学)
- libevent
- Apache Internal Server Error
- spring mvc 和junit 4集成的注意点
- Jquery插件easyUi表单验证提交
- POI读取excel
- Sublime Text3使用及常用插件
- ceph启动脚本
- 算法之旅,直奔<;algorithm>;之十五 find
- (step5.1.3)hdu 1213( How Many Tables——1213)
- H5 拖放
- 查询优化--小表驱动大表(In,Exists区别)
- Codeforces976E Well played! 【贪心】
- Spark Worker启动Driver和Executor工作流程
- WinCHM 制作开发知识库,So easy!!!
- hdu 1576 A/B 【扩展欧几里德】
- MongoDB 安装和使用问题总结
- Linux 系统磁盘挂载信息文件
- python中list和str互转
- js中with 用法