UE4 SaveGame保存游戏注意事项
来源:互联网 发布:淘宝找运营商可靠吗 编辑:程序博客网 时间:2024/05/16 16:20
保存数据的流程参考官方文档的例子足够(https://docs.unrealengine.com/latest/CHN/Gameplay/SaveGame/index.html)
这里说一些注意事项以及对SaveGame使用相关的分析理解。
1.首先,UE提供的游戏保存的基本原理是序列化对象,通过构建一个SaveGame对象,并把要保存的数据赋给该对象的成员属性,再把SaveGame对象序列化保存到磁盘上来实现该功能。查看SaveGame类可以看到,他直接继承于UObject并且没有任何成员变量及函数。所以,保存对象的细节不在于SaveGame对象,而在于UObject序列化里面的相关内容。
2.所有保存与加载游戏的逻辑操作都在GamePlayStatics.cpp的SaveGame相关函数里面,如果自己要实现自己的存档机制(完全可以不使用SaveGame对象),可以参考SaveGameToSlot等函数。下面给出了保存游戏涉及到的所有类:
Archive是“档案”的意思,在UE里面表示数据存储的类。FMemoryArchive是内存数据存储,就是将当前的数据写到内存里面(如写到一个Byte数组里面),进而存档。用它来辅助UObject的序列化以及反序列化操作。
3.SaveGameToSlot以及LoadGameFromSlot里面的最后参数UserIndex在非H5平台上并没有作用。你保存文件的名字就是SlotName.sav文件,与UserIndex无关。
4.属性前面可以添加SaveGame宏,但是不添加这个宏也可以在保存游戏时执行对属性的序列化,官方的例子就没有标记这个宏。官方的解释是: This specifier is a simple way to include fields explicitly for a checkpoint/save system at the property level. The flag should be set on all fields that are intended to be part of a saved game, and then a proxy archiver can be used to read/write it. 大家可以参考下面的代码,其实意思就是如果不标记SaveGame属性,在使用FArchive对UObject序列化时,如果标记了ArIsSaveGame为true,那么这个属性就会跳过序列化。如果标记了SaveGame,那么无论FArchive的ArIsSaveGame是否为true,都不会跳过这个属性的序列化。
/*** Indicates whether this archive is saving or loading game state* @return true if the archive is dealing with save games, false otherwise.*/virtual bool IsSaveGame(){ return ArIsSaveGame;}
- UE4 SaveGame保存游戏注意事项
- UE4之SaveGame重要节点
- UE4之保存游戏
- 利用SaveGame标记保存属性
- SaveGame
- UE4环境搭建注意事项
- UE4中的数据保存
- UE4数据保存
- UE4 iOS游戏开发
- UE4 游戏退出蓝图
- UE4退出游戏
- UE4游戏图标
- UE4 C++ 游戏退出
- UE4之局域网游戏
- UE4 移动平台游戏开发
- UE4之显示游戏帧数
- ue4 2游戏构架相关
- UE4之制作局域网游戏
- NOIP赛前总结
- XListView框架的使用
- Lesson 6 异常处理2
- “xxx对用户透明" 的真正意思
- 三分钟教你读懂本票是什么
- UE4 SaveGame保存游戏注意事项
- 第2章 冒泡排序-选择排序-插入排序
- mybatis 一对一查询 出现一条数据总结
- 空数组的真假值
- 简单圆球水波动。手写
- 编程注意
- Mybatis基础---配置文件
- 我的博客即将入驻“云栖社区”,诚邀技术同仁一同入驻。
- 大文件切割工具