09. 保存地图场景

本节目的

将 Map 上的房间和连线都保存下来,以便从战斗场景回来的时候能够恢复这些数据

实现方法

定义存储结构

定义一个名叫MapLayoutSO的 ScriptableObject,它里面记录了所有的房间和连线信息,如下图所示

房间的信息中不单单有房间的图标、房间的类型、引用的场景,还有房间的状态、房间的坐标(posX, posY),房间的列号、行号

线条的信息中有起点和终点的坐标,因为 Vector3 不能进行序列化,所以需要使用 SerializeVector3 包装一下

实例化存储体

在 Game Data / Settings 下面创建出 MapLayoutSO

修改 Map Generator

在 Map Generator 中添加MapLayoutSO,并通过拖拽的方式进行赋值

然后为它编写SaveMapLoadMap两个方法

SaveMap的时候,需要遍历所有的房间和线段,然后将它们保存到MapLayoutSO

LoadMap的时候,需要从MapLayoutSO中读取所有的房间和线段信息,并反向更新上去

CreateMap的最后,调用SaveMap保存数据

OnEnable的时候,如果当前MapLayoutSO存储的房间数大于0,那么就从MapLayoutSO中读取数据,否则就重新创建一个

Start里面不再调用CreateMap

项目相关代码

代码仓库:https://gitee.com/nbda1121440/DreamOfTheKingdom.git

标签:20240302_1813

posted @ 2024-03-02 23:20  hellozjf  阅读(49)  评论(0编辑  收藏  举报