Unity里有个很重要的基类,UnityEngine.Object。一般Object这种名字一般不是乱取的,它往往意味着一个系统万物的最底层设计。Unity所有核心的东西:monobehvaiour, gameobject, material 都是继承于UnityEngine.Object.
要了解一个底层的基类对应了哪些底层功能,最直接的方法就是,看它定义了哪些接口(Unity - Scripting API: Object (unity3d.com) )里面有个Instantiate(),这个接口,可以将任何Object实例化到场景,这几乎是贯穿每个游戏里的功能,最常见的就是动态加载的Prefab在场景里实例化,以及游戏过程中动态生成一些比如子弹,小兵等GameObject实例。而这个接口的实现,就是这篇文章讨论的主题:序列化
UnityEngine.Object.Instantiate 解决的需求是:我要拷贝一个"对象”。 这在很多编程语言里都会有这样的问题,对象怎么拷贝,以及那个高频面试题:深拷贝还是浅拷贝(Difference between Shallow and Deep copy of a class - GeeksforGeeks) ?
从一个不严谨的角度,实现拷贝对象有两种流派