第七章 寻路与地图对象(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<