unity中的SerializeField(序列化)

[Serializable]将类的实例持久化保存,可以保存在本地,也可以保存在别处。

unity中的SerializeField(序列化)

Unity会自动为Public变量序列化(再次读取Unity时序列化的变量是有值的,不需要再次去赋值,因为它已经被保存下来了。)

什么样的值可以显示在面板上?

已经被序列化,但是没有用[HideInInspector]标记的值

  1. 如果a是公有的序列化变量

想在面板上看到a,那么用:

public int a;

<
Unity序列用于将游戏对象或其属性的状态转换成可存储或在网络上传输的形式。以下是如何使用`Protobuf`和`SerializableDictionary`进行序列的步骤: **使用Protobuf序列/反序列** 1. 安装`Google.Protocol Buffers`插件:在Unity项目,通过Package Manager添加`Google.Protocol Buffers`库,这会生成对应的类来处理序列和反序列。 2. 创建或定义一个`.proto`文件:声明要序列的结构,如数据类型和字段。 ```protobuf message GameData { string playerName = 1; int32 score = 2; } ``` 3. 使用`ProtoBuf.Serializer.ToByteArray()`序列对象: ```csharp var gameData = new GameData { playerName = "John", score = 100 }; byte[] serializedData = ProtoBuf.Serializer.ToByteArray(gameData); ``` 4. 反序列时,用`ProtoBuf.Serializer.FromByteArray()`: ```csharp var deserializedGameData = ProtoBuf.Serializer.FromByteArray<GameData>(serializedData); ``` **使用`SerializableDictionary`序列Unity字典** 1. 将字典标记为`[SerializeField]`和`[HideInInspector]`,使其仅在编辑器可见但不参与构建过程: ```csharp [SerializeField] private Dictionary<string, object> myDictionary; [HideInInspector] public Dictionary<string, object> getMyDictionary() => myDictionary; ``` 2. 编译时,Unity会自动生成`BinaryFormatter`兼容的方法来保存和加载字典: ```csharp void OnSave() { BinaryFormatter formatter = new BinaryFormatter(); using (FileStream stream = File.Create("my_dict.bin")) { formatter.Serialize(stream, myDictionary); } } void OnLoad() { if (File.Exists("my_dict.bin")) { using (FileStream stream = File.OpenRead("my_dict.bin")) { myDictionary = (Dictionary<string, object>)formatter.Deserialize(stream); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值