Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

2024-06-13 1422阅读

Docker步步实践

目录文档:

Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

①Docker简介

②基本概念

③安装Docker

Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

④使用镜像:

Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

⑤操作容器:

Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

⑥访问仓库:

Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

⑦数据管理:

Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

⑧使用网络:

Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

⑨高级网络配置:

Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

⑩安全:

Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

⑪底层实现:

Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

⑫其他项目:

Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

本文已被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算是必备技能,所以一定要掌握。

目录:

Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

部分内容:

Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

Spring源码

  • 第一部分 Spring 概述
  • 第二部分 核心思想
  • 第三部分 手写实现 IoC 和 AOP(自定义Spring框架)
  • 第四部分 Spring IOC 高级应用

    基础特性

    高级特性

  • 第五部分 Spring IOC源码深度剖析

    设计优雅

    设计模式

    注意:原则、方法和技巧

  • 第六部分 Spring AOP 应用

    声明事务控制

  • 第七部分 Spring AOP源码深度剖析

    必要的笔记、必要的图、通俗易懂的语言化解知识难点

    Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

    Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

    脚手框架:SpringBoot技术

    它的目标是简化Spring应用和服务的创建、开发与部署,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用的微服务功能,可以和spring cloud联合部署。

    Spring Boot的核心思想是约定大于配置,应用只需要很少的配置即可,简化了应用开发模式。

    • SpringBoot入门
    • 配置文件
    • 日志
    • Web开发
    • Docker
    • SpringBoot与数据访问
    • 启动配置原理
    • 自定义starter

      Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

      Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

      微服务架构:Spring Cloud Alibaba

      同 Spring Cloud 一样,Spring Cloud Alibaba 也是一套微服务解决方案,包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。

      • 微服务架构介绍
      • Spring Cloud Alibaba介绍
      • 微服务环境搭建
      • 服务治理
      • 服务容错
      • 服务网关
      • 链路追踪
      • ZipKin集成及数据持久化
      • 消息驱动
      • 短信服务
      • Nacos Confifig—服务配置
      • Seata—分布式事务
      • Dubbo—rpc通信

        Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

        Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

        Spring MVC

        目录:

        Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

        Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

        Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

        部分内容:

        Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

        Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

        本文已被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面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

          需要这份系统化的资料的朋友,可以点击这里获取

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]