/// <summary>
        /// 获取该地形的通过费用
        /// </summary>
        /// <param name="terrain"></param>
        /// <returns></returns>
        public static int GetCost(this Terrain terrain)
        {
            if (CostDict.TryGetValue(terrain, out int result) == false)
            {
                Debug.LogError($"存在未配置的地形类型:{terrain}");
                throw new ArgumentException($"存在未配置的地形类型:{terrain}");
            }

            return(result);
        }
        /// <summary>
        /// 获取起始点至终点的导航点参数
        /// </summary>
        /// <param name="map">游戏地图</param>
        /// <param name="startCost">其实费用</param>
        /// <param name="start">起始点</param>
        /// <param name="end">终点</param>
        /// <param name="args">角色通过性参数</param>
        /// <returns></returns>
        private NavigatePointArgs GetNavigatePointArgs(GameMap map, int startCost, Vector2Int start, Vector2Int end, RolePassabilityArgs args)
        {
            Terrain neighborTerrain = map[start.x, start.y].Terrain;
            int     cost            = PassabilityTest(args, neighborTerrain) == true ? int.MaxValue : neighborTerrain.GetCost();

            return(new NavigatePointArgs()
            {
                ActualCost = cost + startCost,
                ExpectCoset = this.GetExpectCoset(start, end),
                Position = start,
            });
        }
 /// <summary>
 /// 通过性测试
 /// </summary>
 /// <param name="args"></param>
 /// <param name="neighborTerrain"></param>
 /// <returns></returns>
 private static bool PassabilityTest(RolePassabilityArgs args, Terrain neighborTerrain)
 {
     return((args.CanPassMountain == false && neighborTerrain == Terrain.Mountain) ||
            (args.CanPassWater == false && neighborTerrain == Terrain.Ocean));
 }