地图信息系统 - wuboluo/Unity-Farm GitHub Wiki
MapDataSO 地图信息配置表
记录以下数据: 1,地图名称 2,地图尺寸 3,地图左下角坐标 4,地图所有格子信息
注意:
每个格子可能会被标记为不同的功能区域,例如既可以扔东西,又可以种东西。所以在 tileProperties 这个列表中,可能会存在相同坐标的格子,但以不同类型保存进去。这里只是记录到配置表(SO),在游戏开始时,会被 GridMapManager 合并 具有多个功能的格子
GridMap 保存地图信息
此脚本只在编辑器下运行
挂载在自定义的区域地图上,如图:
记录以下数据: 1,此场景的地图信息 配置表(SO) 2,此地图的格子类型
主要包含的功能:
- OnEnable() 清空 配置表(SO) 列表
- OnDisable() 保存 配置表(SO)
- UpdateTileProperties() 找到此地图中所有有内容的瓦片格子,将其按照此地图的类型搭配其坐标添加进 配置表(SO)
GridMapManager 地图管理器
记录以下数据: 1,自定义的规则瓦片(挖地、浇水) 2,用于绘制(挖地、浇水)的地图层 3,所有场景的地图信息配置表(SO) 4,字典:所有地图的瓦片格子信息 5,字典:每个场景是否是第一次加载 6,杂草列表
主要包含的功能:
- Start() 1,设置所有场景默认为第一次加载/进入 2,初始化场景瓦片信息
- OnAfterSceneLoaded() 1,找到用于绘制 挖坑,浇水 效果的地图层 2,刷新农作物 3,刷新地图
- OnGameDay() 每过一天调用,更新浇水、耕地、播种等瓦片的内容
- OnExecuteActionAfterAnimation() 在人物使用工具动画之后,执行实际工具或物品功能,无需再判断格子是否允许等条件
- GetCropObject() 获得鼠标位置范围内所有属于农作物的碰撞体
- HaveReapableItemsInRadius() 返回工具范围内的杂草
- InitTileDetailDict() 合并地图中具有多个功能的瓦片格子,按照 坐标+场景名称 保存到字典中
- GetTileDetails() 通过 坐标+场景名称 找到相应的瓦片信息
- GetTileDetailsOnMousePosition() 通过鼠标所在网格位置找到相应的瓦片信息
- SetDigGround() 设置挖坑瓦片
- SetWaterGround() 设置浇水瓦片
- UpdateTileDetails() 更新/添加字典中的瓦片信息
- RefreshMap() 刷新当前地图
- DisplayMap() 根据配置表(SO)绘制地图内容
- GetGridDimensions() 根据场景名字构建网络范围,输出范围和原点,用于AStar寻路
- GenerateSaveData() 保存数据,用于存档
- RestoreData() 恢复数据,来自读取存档