本节目的
将 Map 上的房间和连线都保存下来,以便从战斗场景回来的时候能够恢复这些数据
实现方法
定义存储结构
定义一个名叫MapLayoutSO
的 ScriptableObject,它里面记录了所有的房间和连线信息,如下图所示
房间的信息中不单单有房间的图标、房间的类型、引用的场景,还有房间的状态、房间的坐标(posX, posY),房间的列号、行号
线条的信息中有起点和终点的坐标,因为 Vector3 不能进行序列化,所以需要使用 SerializeVector3 包装一下
实例化存储体
在 Game Data / Settings 下面创建出 MapLayoutSO
修改 Map Generator
在 Map Generator 中添加MapLayoutSO
,并通过拖拽的方式进行赋值
然后为它编写SaveMap
和LoadMap
两个方法
SaveMap
的时候,需要遍历所有的房间和线段,然后将它们保存到MapLayoutSO
中
LoadMap
的时候,需要从MapLayoutSO
中读取所有的房间和线段信息,并反向更新上去
在CreateMap
的最后,调用SaveMap
保存数据
在OnEnable
的时候,如果当前MapLayoutSO
存储的房间数大于0,那么就从MapLayoutSO
中读取数据,否则就重新创建一个
Start
里面不再调用CreateMap
项目相关代码
代码仓库:https://gitee.com/nbda1121440/DreamOfTheKingdom.git
标签:Map,场景,SaveMap,房间,地图,保存,09,MapLayoutSO From: https://www.cnblogs.com/hellozjf/p/18049451