加密
目前y3会默认对所有处于存档槽内的信息进行加密,具体的加密逻辑不表。
在调用 “表格 - 对表格进行加密”语句后,对应的表格内容将会加密,这个操作适用于存储较为关键的玩家内存信息。避免作弊工具修改里面的内容达到“爽一局”的作用。
由于加密后的表格解析也需要经过解密,会导致表格操作的性能压力陡增,不建议滥用加密操作,也不建议将过多信息打到一张表中再进行加密,分成多张表可以有效降低瞬时的性能负荷,使玩家不易感受到卡顿。
初始值
存档的初始值主要的意义在于避免解析报错,以及发放一些初始道具。
如果进入游戏的玩家没有这个槽位,那么这个槽位中的数据将会被设置为初始值。
修改初始值时并不会影响到已有存档的玩家,也就是说,并不能通过修改初始值然后发布地图来达到补发、增发初始道具或类似的功能场景。
常见的错误使用方式为:在使用前将所有的未来数据塞到存档槽中,后续不再增加行列,仅修改内容对应的键值。
如:在存档中直接使用武器图鉴功能的配置表,每个图鉴可能包含id,图片,标题,说明文本,剪影图片,是否解锁等信息,在解锁图鉴后,将“是否解锁”的属性值改为是。
这种使用方式会导致两个严重后果:
1.存储空间被大量浪费。
2.由于存档的信息是加密的,在访问对应的功能时,产生较大的性能压力,玩家卡顿。
上述案例 正确的使用方式是初始值配为空表,或带有初始武器的表,在解锁图鉴后,将解锁的对应id插入存档槽存储。在界面显示时,遍历预设的图鉴表,根据存档槽中已有的id判断是否显示以及显示什么内容。
武器强化等场景同理,如何拓展空行空列可见使用方式。
使用方式
无论是实时型还是主动型,在编写业务逻辑时,均不建议直接访问存档槽内部数据,因为访问存档槽内部逻辑涉及到解密及解析过程,会增加无谓的性能损耗。
正确的方式是在初始化时,将存档槽内部的数据加载到全局变量中,后续访问变量进行使用。
对于主动型存档表,在全局变量中进行表格操作后直接使用设置存档语句即可将存档槽中的内容更新为“修改过的表”
关于这条语句,需要注意的是将表格转为合规的字符串这一步并非上传时完成,而是在设置时完成,意味着频繁调用将会产生极大的性能压力。若需要多次修改表格中的内容,不需要修改一次就设置一次,尽量等所有预期的表格操作完成后执行一次,并尽量控制执行的频次。
若内容的修改较为高频,强烈建议使用实时型存档表,实时型存档表的设置语句更为分散,在高频操作时性能可能有百倍以上的提升。
语句执行的时间与表格中的内容量正相关,首先建议尽可能优化数据内容(一般可采用常量、大量程序可批量处理的默认值从存档中转到预设表格中、程序增加空值保护等手段),其次尽量将表格中的功能模块粒度切细,以压缩单一表格体积,同时避免在一帧中设置较多主动型表格槽位的值(通过计时器延时处理等方式)。
在执行过设置操作后,此时对应的数据仍然处于玩家本地,需要调用上传存档语句进行更新。除主动型存档表外,全局存档的上传也并非实时的,修改过后也需要调用上传存档语句。
若数据量过大,存档上传行为可能发生卡顿,建议周期或在特点业务节点结合界面告知进行上传,尽可能避免在战斗过程中进行上传,若有类似的需求,建议换用实时型存档表。
在玩家退出游戏事件是上传这个玩家的存档是不可取的,因为在这个事件发出之前,退出玩家本地的数据已经被销毁了。但是若玩家通过正常的途径退出游戏,将会尝试在数据销毁前进行一次上传操作。这并不意味着你不需要在业务逻辑中为玩家进行存档,因为游戏崩溃或网络通信不畅等原因可能导致保底的上传行为不能生效,导致产生进度丢失。
常见问题:
1.我尝试设置值为空表后发现丢失了表格编辑器的字段名。我应该如何在多维表存档中插入新的数据?
回答:触发器中的表格能够容纳绝大多数游戏中的数据类型,是一种强大的数据容器。而表格编辑器只是提供了一种在编辑时构建容器内容的方式。表格编辑器能够构建的表格是触发器能够构建的表格的子集。
表格编辑器中的多维表功能暂时仅支持二维表格的构建,其构建规则是,创建一张空的表A ,逐一设置这个空的表 在表格编辑器的索引列 单元格 填写的字段指向的值 为 新的空的表,设置这些空的表的 表头 字段的值为对应单元格中的值。
可以看出,多维表是由一维表组成的,所以为表格编辑器定义的多维表增加行的方式为 设置多维表需要增加行的字段的值为新的空表,再设置这张表(一维)的键值即可。
下文演示实时型的实例操作,主动型将无索引2的语句对应设置一维表的值,将有索引2的的语句对应设置多维表的值,流程同理。
假设存档槽【实例表格】中现有的表格样式如下:
希望新增第五行,并保持表头索引正常,流程如下:
在此之上,若希望对现有的五行新增一个新表头,流程如下: