2021-07-8 unity学习笔记(24)之利用unity自带的JsonUtility实现深拷贝
有时候在制作中,需要玩家有一份物品数据,敌人也有一份物品数据,而这份物品数据均来自于共同的物品数据集合,需要添加物品的时候就根据ID去这个共同的物品数据库里面寻找。 如果这些物品数据不涉及值的更改,那么直接从物品数据集合里面取就行了,但如果涉及值的更改,比如物品数量,那么就不能直接取了,而是需要对取出来的数据进行深拷贝。因为物品数据一般都是引用类型,不做深拷贝就取出来该值的话,会将所有引用了该物品数据的其他物品数据的值也一并更改。 然而在网上找了几种深拷贝的方法,都不太适用于unity中,因为物品数据中存有一些无法序列化的对象,比如GameObject,这时候就轮到unity自带的JsonUtility登场了。 这个JsonUtility有鸡肋之处也有方便之处,鸡肋之处在于它不支持字典的序列化,用来存储数据时不方便,而方便之处在于它支持GameObject的序列化,所以用它来深拷贝还是挺适合的。 代码也很简单,就几行:
public static T DeepCopy<T>(this T obj)
{
string json = JsonUtility.ToJson(obj);
T targetData = JsonUtility.FromJson<T>(json);
return targetData;
}
|