不序列化的深度复制
本文关键字:复制 深度 序列化 | 更新日期: 2023-09-27 18:18:14
我试图复制同一个类的两个不同的实例,没有引用,我不知道为什么这很难做到,只是复制和好吧,再见了吗?
btw我发现了一个脚本与binnaryformatter做什么我想要的,但在我的类我有类型Texture2D的变量,当我按下播放我有一个错误说,Texture2D不标记为可序列化。
using UnityEngine;
using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters.Binary;
public class pichota : MonoBehaviour {
public List<Pig> johnPigList = new List<Pig>();
public List<Pig> peterPigList = new List<Pig>();
void Start () {
List<Pig> templist = Clone(johnPigList);
peterPigList = templist;
}
public List<Pig> Clone(List<Pig> source)
{
BinaryFormatter bf = new BinaryFormatter();
using (var ms = new MemoryStream())
{
bf.Serialize(ms, source);
ms.Seek(0, 0);
return (List<Pig>)bf.Deserialize(ms);
}
}
void Update () {
if (Input.GetKeyDown(KeyCode.G))
{
peterPigList[0].number += 2;
}
}
}
[System.Serializable]
public class Pig
{
public int number;
}
是否有另一种方法来深度复制,或只是序列化纹理2d ?别笑我,我对这些高级的东西还是新手
我不知道为什么你需要一堆克隆纹理。这对我来说似乎很奇怪,我想象的东西像程序动画图像。
通常,你不能在Unity中序列化纹理。我想事情并不是这样的。但是你可以用Texture2D将纹理转换为字节数组。EncodeToPNG并将其序列化
无论如何,在编辑器模式下,Unity允许你使用CopySerialized克隆不同的对象。此外,还有一些未归档的用于复制组件的函数:UnityEditorInternal.ComponentUtility.CopyComponent(copiedComponent);
UnityEditorInternal.ComponentUtility.PasteComponentAsNew(targetGameObject);
在播放器模式下,如果你想克隆任意对象,那么最好的方法是使用反射而不是序列化。