Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】
Docker步步实践
目录文档:
①Docker简介
②基本概念
③安装Docker
④使用镜像:
⑤操作容器:
⑥访问仓库:
⑦数据管理:
⑧使用网络:
⑨高级网络配置:
⑩安全:
⑪底层实现:
⑫其他项目:
本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录
需要这份系统化的资料的朋友,可以点击这里获取
{
get
{
if (instance == null)
{
instance = new Routing();
}
return instance;
}
}
#endregion
///
/// 二维数组的地图
///
RoutingObject[,] map;
///
/// 存储被考虑来寻找最短路径的点
///
List open = new List();
///
/// 存储不再被考虑寻找最短路径的点
///
List closed = new List();
///
/// 存储路线点的列表
///
List route = new List();
///
/// 初始化
///
void Init(RoutingObject[,] mapArray)
{
open.Clear();
closed.Clear();
route.Clear();
map = mapArray;
}
///
/// 判断从起始点是否能到达目标点
///
/// 起始点x坐标
/// 起始点y坐标
/// 目标点x坐标
/// 目标点y坐标
///
///
public bool IsRouting(RoutingObject start, RoutingObject end, RoutingObject[,] mapArray)
{
Init(mapArray);
Explore(start, end, start);
// 判断存储路线点的列表里是否存有点
return route.Count > 0;
}
///
/// 探索中心点上下左右四个方向点
///
void Explore(RoutingObject center, RoutingObject end, RoutingObject start)
{
// 中心点不再考虑寻找路径
closed.Add(center);
// 将中心点从寻找列表中移除
if (open.Contains(center))
{
open.Remove(center);
}
// 是否找到目标点
if (IsGetEnd(end))
{
// 找到目标点
ReturnRoute(end, start);
}
else
{
// 判断中心点上边的点
if (center.y - 1 >= 0)
{
RoutingObject up = map[center.x, center.y - 1];
GetMoveSumByDirection(up, center, end, Direction.up);
}
// 判断中心点下边的点
if (center.y + 1 = 0)
{
RoutingObject left = map[center.x - 1, center.y];
GetMoveSumByDirection(left, center, end, Direction.left);
}
// 判断中心点右边的点
if (center.x + 1 0)
{
// 没有找到目标点,则在被考虑的列表中找出一个和值最小的
RoutingObject ro = GetMinimumMoveSum();
Explore(ro, end, start);
}
else
{
Debug.Log("没有找到目标点");
}
}
}
///
/// 根据传进来的方向去获取和值
///
///
///
///
///
void GetMoveSumByDirection(RoutingObject center, RoutingObject start, RoutingObject end, Direction direction)
{
// 判断这个点是否能移动或者是否被考虑
if (IsForward(center))
{
center.direction = direction;
// 获取移动距离
center.moveDistance = GetDistance(center, start);
// 获取目标距离
center.targetDistance = GetDistance(center, end);
// 获取A\*和值
center.moveSum = center.moveDistance + center.targetDistance;
// 将中心点加入将要被考虑的列表中
open.Add(center);
}
else
{
//Debug.Log(center.name + " 不能移动");
}
}
///
/// 判断这个点是否属于未来被考虑前进的点
///
///
///
bool IsForward(RoutingObject ro)
{
// 判断这个点是否已经在不再考虑的列表中
if (closed.Contains(ro) || open.Contains(ro))
{
return false;
}
else
{
// 判断这个点是否可以移动
if (ro.isCanMove)
{
return true;
}
else
{
// 不可以移动就加入不再考虑的列表中
closed.Add(ro);
return false;
}
}
}
///
/// 获取距离
///
///
///
int GetDistance(RoutingObject start, RoutingObject end)
{
// 定义目标距离返回值, --> 谁大,谁减谁
return Mathf.Abs(start.x - end.x) + Mathf.Abs(start.y - end.y);
}
///
/// 是否找到目标点
///
///
bool IsGetEnd(RoutingObject end)
{
return closed.Contains(end);
}
///
/// 在被考虑的列表中获取和值最小的点
///
///
RoutingObject GetMinimumMoveSum()
{
RoutingObject ro = null;
RoutingObject temporary = new RoutingObject();
for (int i = 0; i = 0; i--)
{
if (list[i] != start)
{
route.Add(list[i]);
}
}
}
///
/// 返回最短路线
///
///
public List GetRoute()
{
return route;
}
}
* 创建`GridManager`脚本,将其挂载到GridManager物体上,
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class GridManager : MonoBehaviour
{
///
/// 单例
///
public static GridManager Instance;
///
/// 地图行数
///
public int mapColumnCount = 9;
///
/// 地图列数
///
public int mapRowCount = 9;
///
/// 当前可移动最短路径存储集合
///
public List routeList = new List();
///
/// 已被占领的格子集合 -- 格子上有障碍物
///
public List OccupyGridList = new List();
///
/// 存储地图格子
///
private GameObject[,] GridArray;
///
/// 当前所选格子
///
private GameObject selectGrid;
private void Awake()
{
Instance = this;
GridArray = new GameObject[mapRowCount, mapColumnCount];
}
void Start()
{
}
///
/// 每个格子初始化时 调用赋值
///
/// 格子
/// 所在X
/// 所在Y
public void SetGridArray(GameObject go, int x, int y)
{
GridArray[x, y] = go;
}
///
/// 根据(x,y)获取 格子物体
///
///
///
///
GameObject GetGridArray(int x, int y)
{
return GridArray[x, y];
}
///
/// 获取一个准备移动球的二维数组(每个坐标点上记录着是否可以移动)
///
///
Grid[,] GetMoveMap()
{
// 定义存储地图格子是否可以移动的二维数组
Grid[,] array = new Grid[mapRowCount, mapColumnCount];
for (int i = 0; i
Spring全套教学资料
Spring是Java程序员的《葵花宝典》,其中提供的各种大招,能简化我们的开发,大大提升开发效率!目前99%的公司使用了Spring,大家可以去各大招聘网站看一下,Spring算是必备技能,所以一定要掌握。
目录:
部分内容:
Spring源码
- 第一部分 Spring 概述
- 第二部分 核心思想
- 第三部分 手写实现 IoC 和 AOP(自定义Spring框架)
- 第四部分 Spring IOC 高级应用
基础特性
高级特性
- 第五部分 Spring IOC源码深度剖析
设计优雅
设计模式
注意:原则、方法和技巧
- 第六部分 Spring AOP 应用
声明事务控制
- 第七部分 Spring AOP源码深度剖析
必要的笔记、必要的图、通俗易懂的语言化解知识难点
脚手框架:SpringBoot技术
它的目标是简化Spring应用和服务的创建、开发与部署,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用的微服务功能,可以和spring cloud联合部署。
Spring Boot的核心思想是约定大于配置,应用只需要很少的配置即可,简化了应用开发模式。
- SpringBoot入门
- 配置文件
- 日志
- Web开发
- Docker
- SpringBoot与数据访问
- 启动配置原理
- 自定义starter
微服务架构:Spring Cloud Alibaba
同 Spring Cloud 一样,Spring Cloud Alibaba 也是一套微服务解决方案,包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
- 微服务架构介绍
- Spring Cloud Alibaba介绍
- 微服务环境搭建
- 服务治理
- 服务容错
- 服务网关
- 链路追踪
- ZipKin集成及数据持久化
- 消息驱动
- 短信服务
- Nacos Confifig—服务配置
- Seata—分布式事务
- Dubbo—rpc通信
Spring MVC
目录:
部分内容:
本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录
需要这份系统化的资料的朋友,可以点击这里获取
服务
- Nacos Confifig—服务配置
- Seata—分布式事务
- Dubbo—rpc通信
[外链图片转存中…(img-DFzIooDx-1715472451094)]
[外链图片转存中…(img-9JWsLt2G-1715472451094)]
Spring MVC
目录:
[外链图片转存中…(img-zMte7WQW-1715472451094)]
[外链图片转存中…(img-cKklRqqC-1715472451095)]
[外链图片转存中…(img-2Jswd09m-1715472451095)]
部分内容:
[外链图片转存中…(img-MLDtDZFi-1715472451095)]
[外链图片转存中…(img-RsiV0iRe-1715472451095)]
本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录
需要这份系统化的资料的朋友,可以点击这里获取



























