虚幻5保存系统,序列化UObject为空的问题

文章为本人学习虚幻引擎时的笔记,未必会帮到你!

在学习虚幻引擎的序列化保存方式的时候,因为图方便,直接给场景里的Actor需要保存的组件属性添加了SaveGame声明

这里给Actor里的组件标记了SaveGame
这里给Actor的一个组件(UActorComponent)标记上了SaveGame

在调用加载的时候,也就是反序列化的时候,可以看到储存着保存的属性

但是随后我通过一些交互的方式获取到该Actor对象的时候,竟然发现这个对象的组件为空??

这里提供一个解决方案:那就是重写Actor的Serialize方法,因为如果Actor里的某个成员是个UObject,而这个UObject类里面还有一些无法被写入的属性的时候,最好要使用这种方式,然后在该方法里,对你的UObject里面的具体的某个对象进行序列化

重写Actor的这个方法

 取消对这个组件的SaveGame标记

这个组件内部没有需要保存的属性,但是其还继承一个父类UISItemContainer,这里有必要作一下说明

 在这个父类中有我需要保存的属性,是一个结构体数组

 

这里需要提醒下,如果是个结构体,还要将结构体里的每个成员都重载一遍序列化运算符

最后回到对Actor重写的Serialize方法中,对刚刚保存的组件中,组件内部父类的被标记SaveGame的数组进行序列化

然后在加载游戏的相关方法中,需要为Actor写入序列号的时候,如果其重写了Serialize函数,会运行到子类重写的函数上,也许是上面写的那样

写入之前,组件内的数组空空如也

接着运行断点后,可以看到保存的数组已经重新写入了

这样就解决了Actor中的某些UObject无法被序列化的问题,其实就是详细地将UObject的真正需要保存的属性进行保存,如果出现无法保存的属性,例如结构体需要自行重载序列化运算符的话这时候直接保存UObject会造成写入时该Actor的UObject为空的现象!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值