不序列化的深度复制

本文关键字:复制 深度 序列化 | 更新日期: 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);

在播放器模式下,如果你想克隆任意对象,那么最好的方法是使用反射而不是序列化。