提前注释:使用UE420,项目基于C++需要先编译一次,角色控制互动逻辑基于C++,武器结构设计基于蓝图,有中文注释。
大概是这样的,假设有一个游戏逻辑,游戏数据是基于CSV,那么datatable中存储了各个不同武器的数据,有武器等级,武器内容,武器星级等等,怎么做到如果在Runtime下对武器升级后下一次进入游戏或者关闭UI再打开保持升级后武器的数据。
固定数据的做法,是再创建UI时,先走一遍datatable然后显示,但是这样每次走一次后,会将datatable重新刷新赋予到UI上,你再怎么更新,关了UI在打开,数据不会改变,因为datatable数据没有改变。
按照正常的逻辑,当游戏启动或者UI创建后,或者根据开发者自己的规定,先循环一次datatable,打开UI,会看到武器的信息,如果这个时候点击武器的升级,理论上来讲,假设原武器为2级,点击升级后,武器变为3级,这个时候如果我们退出游戏或者返回到主菜单,再次进入,就会发现游戏武器还是2级。
这个是一个游戏设计模式的问题,理论上来说我们应该对武器升级后的数据,一般武器的数据为一个结构体,也就是说更新当前结构体到原始的datatable中。
那么作为开发者知道CSV本身基于蓝图是无法进行重写的,使用c++可以实施的读写csv文件,参考文献如下:
https://answers.unrealengine.com/questions/156354/how-to-load-the-csv-datatable-dynamically.html
如果使用蓝图,需要结合savegame,或者自己写一个插件根据自己所需要的格式进行保存,博主在以前的文章好像发过一个读写txt文本的范例,或者json或者xml格式,思路都是一样,也就是说将数据转换成一个可以存储的格式,然后只对这个存储的格式进行操作。
文章的范例思路如下:首先在启动地图Map1,创建DataTable,创建后,检测当前是否有游戏存档,如果有游戏存档,则读取,如果没有,则将DataTable中的数据,存入SaveGame中并创建一个slot,这样游戏每次启动都会遵循这个逻辑,这个也是传统游戏所做的,如下图所示:
然后通过UI上点击开始游戏后,这个根据开发者对下一个地图的设计,是游戏大厅还是任务列表根据需求设计,开始游戏后,打开第二个地图,地图开始会读取存档数据给到一个控制器模块,这个可以不给控制器模块,可以随便给,根据需求设计:
其实这个样子已经完成了,假设弹出武器UI界面,进行操作完毕后,更新存档中的数据:
这里点了强化以后,会对金钱,稀有度,攻击力进行修改,并且最终会覆盖savegame中的存档,再次进行一次存储更新:
整体逻辑非常简单,多看几次就好了。这样就可以通过蓝图去变相的相当于是不断的更新DataTable中的数据,角色升级啊,武器升级什么的,就可以使用这种方法来做。
其他升级需要更新数据的,可以执行当前操作后马上更新,也可以比如下面的视频中,UI里整体操作完成关闭UI界面的时候,对所有变更数据进行一次存档更新,都可以,根据设计来定。
而且本身游戏的运行逻辑也是再不断的创建、更新和储存数据。
最后来一个演示视频和工程:
https://www.zhihu.com/video/1129919731083427840工程源文件:链接:https://pan.baidu.com/s/1iDNlfSOmXa2zeQaw1H7hAA 提取码:5ffy
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态