unity编辑器中的序列化如何理解[SerializeField]特性

17 篇文章 0 订阅

之前一直对序列化和[SerializeField]特性不是很理解(若理解有误,拜请指正)

首先序列化是什么,百度如下解释

序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

 

简单理解,玩游戏存档,会把存档是的玩家信息保存到一个文件中,当下次开启游戏读取存档的时候,可以继续从存档的状态开始玩

Unity编辑器也一样,public 公共属性的值 显示在属性面板中,我们可以任意修改数值(脚本中对应的数值是没有变的),关闭Unity编辑器再次打开的时候,属性的值是我们修改过的值,而不是脚本里赋的初值,说明属性的值”存档“了

存储的位置就是Unity的场景文件,用记事本打开可以查看对应的信息

首先Unity编辑器就是一款软件

当脚本中创建一个public int a = 0;的公共属性

我们就可以在属性面板(Inspector)中对a进行赋值为(例如赋值为2)

我们关闭Unity编辑器

当再次打开编辑器时a的数值为2

说明Unity编辑器已经将公共属性进行序列化(也就是记录下修改的值,类似存档)

 

[SerializeField] Attribute

强制unity去序列化一个私有域。这是一个内部的unity序列化功能,有时候我们需要Serialize一个private或者protected的属性,

using System.Collections;

using System.Collections.Generic;

using System.IO;

using System.Runtime.Serialization.Formatters.Binary;

using UnityEngine;

public class Test : MonoBehaviour {

    public int a = 0;

    [SerializeField]

    int b = 0;

    void Update () {

        if (Input.GetKeyDown(KeyCode.A))

        {

            a++;

            b++;

        }

        if (Input.GetKeyDown(KeyCode.B))

        {

            Debug.LogError("a:" + a);

            Debug.LogError("b:" + b);

        }

    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值