unity遇到的坑----背包篇---强化装备影响其他装备属性

学习完基础的背包系统,发现一个问题。背包里强化装备或者升级装备时,同名装备的属性也会发生变动。
这个问题一度让我十分苦恼,网上也找不到原因。
后来发现初始化背包时,实例化的同名物品指向的地址相同,也就是说所有同名装备都是一个物体,对任意一个装备进行操作都会改变这个装备的同名装备。
解决办法:
序列化克隆每一个装备对象,使他们指向不同地址。
步骤:
第一,在装备类前加上[System.Serializable],使其可序列化

[System.Serializable]  //表示该类可以序列化的意思
public class Iventory()
{
}

第二,装备类对象序列化

//必要的引用
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;  

public class Main()
{
private arraylist<iventory> list = new arraylist<iventory>();
private Iventory item = new Iventory();

void xuliehua()
{
/*序列化前:id = 1001
item和it是引用类型,地址相同,改变item,it也会跟着改变*/
item = list[1];
Iventory it = list[1];
var a = item;

//序列化,item的地址指向新的托管堆,对item进行操作
item = DeepClone(a) as Iventory;
item.id = 1003;

/*序列化后item.id = 1003   it.id = 1001
对item进行操作,it的值并不会改变*/
}
//序列化函数
   public static object DeepClone(object obj)
    {
        BinaryFormatter bFormatter = new BinaryFormatter();
        MemoryStream stream = new MemoryStream();
        bFormatter.Serialize(stream, obj);
        stream.Seek(0, SeekOrigin.Begin);
        return bFormatter.Deserialize(stream);
    }
}

克隆对象之后,每件装备指向不同地址,操作一个不会影响其他。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值