地图信息系统 - wuboluo/Unity-Farm GitHub Wiki

MapDataSO 地图信息配置表

记录以下数据: 1,地图名称 2,地图尺寸 3,地图左下角坐标 4,地图所有格子信息

注意: 每个格子可能会被标记为不同的功能区域,例如既可以扔东西,又可以种东西。所以在 tileProperties 这个列表中,可能会存在相同坐标的格子,但以不同类型保存进去。这里只是记录到配置表(SO),在游戏开始时,会被 GridMapManager 合并 具有多个功能的格子

GridMap 保存地图信息

此脚本只在编辑器下运行 挂载在自定义的区域地图上,如图: image

记录以下数据: 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() 恢复数据,来自读取存档