SRPG游戏开发(二十五)第七章 寻路与地图对象 - 三 将寻路扩充到地图(Extend Pathfinding to Map Graph)

返回总目录

第七章 寻路与地图对象(Pathfinding and Map Object)

这一章主要进行寻路与地图对象的部分工作。



三 将寻路扩充到地图(Extend Pathfinding to Map Graph)

在我们的地图中,寻路包含了移动范围,攻击范围和点到点路径:

  • 移动范围:角色可移动的范围,已经附带了路径;

  • 攻击范围:武器的攻击范围;

  • 点到点路径:这里只有故事情节需要无视移动点数时使用。

MapGraph中添加这些属性:

        /// <summary>
        /// 地图每个格子的信息
        /// </summary>
        private Dictionary<Vector3Int, CellData> m_DataDict = new Dictionary<Vector3Int, CellData>();

        /// <summary>
        /// 获取CellData
        /// </summary>
        /// <param name="position"></param>
        /// <returns></returns>
        public CellData GetCellData(Vector3Int position)
        {
            if (!Contains(position))
            {
                return null;
            }
            return m_DataDict[position];
        }

        #region Path Finding Field
        /// <summary>
        /// 寻路核心
        /// </summary>
        private PathFinding m_SearchPath;

        [Header("Path Finding")]
        [SerializeField]
        private FindRange m_FindAttackRange;

        [SerializeField]
        private FindRange m_FindMoveRange;

        [SerializeField]
        private FindRange m_FindPathDirect;
        #endregion

        #region Path Finding Property
        /// <summary>
        /// 寻路核心
        /// </summary>
        public PathFinding searchPath
        {
            get { return m_SearchPath; }
        }

        /// <summary>
        /// 寻找攻击范围
        /// </summary>
        public FindRange findAttackRange
        {
            get { return m_FindAttackRange; }
            set { m_FindAttackRange = value; }
        }

        /// <summary>
        /// 寻找移动范围
        /// </summary>
        public FindRange findMoveRange
        {
            get { return m_FindMoveRange; }
            set { m_FindMoveRange = value; }
        }

        /// <summary>
        /// 无视移动力,直接寻找路径
        /// </summary>
        public FindRange findPathDirect
        {
            get { return m_FindPathDirect; }
            set { m_FindPathDirect = value; }
        }
        #endregion

1 初始化地图数据(Init Map Data)

在场景运行之前,地图需要被初始化。

而在寻路之前,我们必须先有数据,所以应先初始化地图的数据。

        /// <summary>
        /// 初始化地图
        /// </summary>
        /// <returns></returns>
        public void InitMap(bool<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值