精华内容
下载资源
问答
  • 寻路

    2019-06-12 16:02:00
    寻路 寻找图中一个点到标定点的路径; 用深度优先遍历整张图; 被遍历到的节点是从哪个节点遍历而来的信息存在 from 数组中; 通过在 from 数组中上溯得到某个节点到标定点的路径; 这个由深度优先遍历得到的路径...
        

    寻路

    • 寻找图中一个点到标定点的路径;
    • 深度优先遍历整张图;
    • 被遍历到的节点是从哪个节点遍历而来的信息存在 from 数组中;
    • 通过在 from 数组中上溯得到某个节点标定点的路径;
    • 这个由深度优先遍历得到的路径不是最短的

    寻路代码实现

    package _07._06;
    
    import java.util.Vector;
    import java.util.Stack;
    
    public class Path {
    
        private Graph G;   // 图的引用
        private int s;     // 起始点
        private boolean[] visited;  // 记录dfs的过程中节点是否被访问
        private int[] from;         // 记录路径, from[i]表示查找的路径上i的上一个节点
    
        // 图的深度优先遍历
        private void dfs( int v ){
            visited[v] = true;
            for( int i : G.adj(v) )
                if( !visited[i] ){
                    from[i] = v;
                    dfs(i);
                }
        }
    
        // 构造函数, 寻路算法, 寻找图graph从s点到其他点的路径
        public Path(Graph graph, int s){
    
            // 算法初始化
            G = graph;
            assert s >= 0 && s < G.V();
    
            visited = new boolean[G.V()];
            from = new int[G.V()];
            for( int i = 0 ; i < G.V() ; i ++ ){
                visited[i] = false;
                from[i] = -1;
            }
            this.s = s;
    
            // 寻路算法
            dfs(s);
        }
    
        // 查询从s点到w点是否有路径
        boolean hasPath(int w){
            assert w >= 0 && w < G.V();
            return visited[w];
        }
    
        // 查询从s点到w点的路径, 存放在vec中
        Vector<Integer> path(int w){
    
            assert hasPath(w) ;
    
            Stack<Integer> s = new Stack<Integer>();
            // 通过from数组逆向查找到从s到w的路径, 存放到栈中
            int p = w;
            while( p != -1 ){
                s.push(p);
                p = from[p];
            }
    
            // 从栈中依次取出元素, 获得顺序的从s到w的路径
            Vector<Integer> res = new Vector<Integer>();
            while( !s.empty() )
                res.add( s.pop() );
    
            return res;
        }
    
        // 打印出从s点到w点的路径
        void showPath(int w){
    
            assert hasPath(w) ;
    
            Vector<Integer> vec = path(w);
            for( int i = 0 ; i < vec.size() ; i ++ ){
                System.out.print(vec.elementAt(i));
                if( i == vec.size() - 1 )
                    System.out.println();
                else
                    System.out.print(" -> ");
            }
        }
    }
    

    图文件

    8 7
    0 1
    0 3
    0 2
    3 4
    3 5
    2 6
    2 7
    

    测试代码

    package _07._06;
    
    public class Main {
    
        // 测试寻路算法
        public static void main(String[] args) {
    
            String filename = "testG.txt";
            SparseGraph g = new SparseGraph(8, false);
            ReadGraph readGraph = new ReadGraph(g, filename);
            g.show();
            System.out.println();
    
            Path path = new Path(g,0);
            System.out.println("Path from 0 to 6 : ");
            path.showPath(6);
        }
    }
    
    输出:
    vertex 0:   1   3   2   
    vertex 1:   0   
    vertex 2:   0   6   7   
    vertex 3:   0   4   5   
    vertex 4:   3   
    vertex 5:   3   
    vertex 6:   2   
    vertex 7:   2   
    
    Path from 0 to 6 : 
    0 -> 2 -> 6
    
    展开全文
  • 寻路-源码

    2021-03-02 01:35:18
    寻路
  • A星寻路寻路系统

    2018-12-28 08:59:42
    采用A星寻路,让任务自动采取路径寻路到敌人身边,以最近路径
  • A*寻路代码 Astart寻路demo 用C#写的Astart寻路demo,方便易懂。下一赠一
  • 定点寻路插件

    2019-01-24 13:49:08
    一款好用的寻路插件,你可以自己选择路径和方式寻路
  • 寻路算法

    2011-03-18 08:52:53
    寻路算法 寻路封装
  • 易语言地图寻路源码

    2020-07-22 03:46:04
    易语言地图寻路源码,地图寻路,到坐标,到标签,可走,寻路
  • 基于Unity5.4.4版本,随机障碍物,动态实现寻路,UnityA星寻路完整Demo
  • EasyRoads寻路

    2012-08-27 11:31:17
    EasyRoads3D寻路 源码
  • Unity自动寻路

    2017-03-15 20:08:45
    Unity3d 自动寻路
  • C++写的Recast Detour寻路 NavMeshScene-master 用于游戏服务器寻路
  • 代码中实现了3种寻路算法AStar,AStar_Direct,BStar() 在VS2019环境下运行,建议以release方式运行,DEBUG没有调会崩溃
  • 连连看寻路方法连连看寻路方法连连看寻路方法连连看寻路方法连连看寻路方法连连看寻路方法
  • creator网格导航寻路

    2018-10-06 12:15:37
    网格寻路算法
  • lua 寻路算法

    2016-07-26 16:20:54
    lua 写的 寻路算法
  • 导航寻路有关

    2015-08-23 15:18:51
    导航寻路有关
  • 易语言A_寻路源码

    2020-07-21 13:20:41
    易语言A_寻路源码,A_寻路,初始化地图,分析地图,自动寻路
  • unity寻路

    2018-04-20 18:53:28
    最近被寻路给搞蒙了,由于我想做汽车的寻路,而且汽车速度什么的都定义好了,而unity自带的组件nav mesh agent自带了一些速度之类的值,搞得我很不开心,虽然值可以设为0,但后来还是发现有很多问题。不过,这个自带...

        最近被寻路给搞蒙了,由于我想做汽车的寻路,而且汽车速度什么的都定义好了,而unity自带的组件nav mesh agent自带了一些速度之类的值,搞得我很不开心,虽然值可以设为0,但后来还是发现有很多问题。不过,这个自带的功能还是很不错,可能不适合汽车,只对人比较友好,本着学习的态度我认真研究了一下。

        我们都知道,unity常见的寻路算法有:Astar寻路,自带寻路navmesh,点寻路等等。A*寻路就不说了,早期一般都是用它,算法插件网上都有。unity自带的这个寻路很有意思,首先选择window->navigation,然后可以看到检视板后面多了一个,选择你要烘培的静态物体,一般是地面,道路等等。勾选navigation static,烘培bake意思是被你选择的地方是可通行的,当然注意下面navigation area,里面有walkable,还有not walkable。勾选完之后就可以点击bake了,还有一些参数啥的,可以在API上去查查,可以多次bake哦。成功之后你可通行区域变成这个样子,可以看到变成了浅蓝色。

         然后你需要在寻路者的身上挂一个Nev mesh agent组件,如图:

        

     看到左上角那个人了吗,不是我要吐槽它啊,可能就是为主角是人量身定制的,它是一个胶囊体,注意的是你需要调radius和height把寻路物体完全包住。然后设置一个寻路对象就可以寻路了,是不是很简单。自带的组件还有一个重要功能就是动态寻路,动态寻路意思是你在寻路的过程中突然增加了一个障碍,游戏中很常见的。具体做法是在上面基础上,给障碍物添加一个组件nav mesh obstacle,再挂一个刚体,制作成预制体(就是可以复用的东西),然后把它做成一个在运行时动态Instantiate 实例化出来,寻路网格会重新生成。具体运行时这些组件帮你找到一条最短路径然后动态避障。当然还有一些别的运用,比如三路小兵分别寻不同的路径。

        网上看资料的时候发现一位童鞋的例子特别好,值得好好学习。传送门~还有动态避障再传送,还有小兵这个,好像他也是转的,在这里,感谢各位大佬。

        然后点寻路官方的例子有,但是我感觉太过复杂,后来自己写了一个很菜的方法,就是汽车一个位置一个位置的去寻,意思我提前定好位置,它只需要一个一个去找就好了。如下:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    using System;
    namespace UnityStandardAssets.Vehicles.Car
    {
        [RequireComponent(typeof(CarAIControl))]
        [RequireComponent(typeof(CarController))]
        public class WayTrack : MonoBehaviour
        {
            public GameObject obj;
            public Transform[] newposition = new Transform[] { };
            int k = 0;
            float dis;
            // Use this for initialization
            void Start()
            {
    
                obj.transform.position = newposition[0].position;
    
            }
            // Update is called once per frame
            void Update()
            {
                Vector3 m = obj.transform.position;
                Vector3 n = this.transform.position;
                dis = Vector3.Distance(m, n);
                if (dis < 2.0f)
                {
    
                    k++;
                    k = k % newposition.Length;
                    Transform next = newposition[k];
                    obj.transform.position = next.position;
                    Quaternion shipRotation = Quaternion.Euler(0, 0, 0);
                    obj.transform.rotation = shipRotation;
                    //  Debug.Log(k);
                   
                }
           
                Debug.Log(GetComponent<CarController>().m_Rigidbody.velocity.magnitude*3.6f);
    
            }
           void OnTriggerEnter(Collider other)
          {
                //   GetComponent<CarAIControl>(). m_CarController.Move(0, 0, -1f, 1f);
                if (other.tag == "stop"&&dis<10)
                {
               GetComponent<CarAIControl>().m_Driving = false;
                }
                else
                {
                    GetComponent<CarAIControl>().m_Driving = true;
                }
          }
      
        }
    
    
    }

    这个和我前面翻译的官方例子是一个系列,可以看出我update中每帧都在计算它与下一个位置的距离,当小于2时,目标位置会跳到下一个位置。然后添加了接触器,当接触到tag是stop的物体且dis小于10,汽车会刹车。后续还会有很多功能,我会一一分享。

    展开全文
  • Unity 自动寻路

    2018-03-05 16:39:28
    Unity 开发的基于DFS和BFS算法的自动寻路功能,适用于2d类格子棋盘地图。
  • 点击寻路:我使用Pygame进行了可点击寻路的练习
  • 详述了迷宫寻路的起点到终点的算法及代码实现
  • 寻路资源包

    2015-09-29 01:41:04
    这是一个寻路资源吧,里面有寻路的脚本、算法及demo ,可帮助新手入门
  • 寻路DEMO

    2019-09-16 11:32:34
    网格场景的寻路算法DEMO 灰色格子为默认正常蓝色格子表示为障碍物,不可进入红色细条在格子周围,表示格子的墙,用于阻碍行走紫色为当前鼠标选中格子黄色为寻路的起始位置和结束位置.鼠标左键设置,CTRL+鼠标左键可以...

    网格场景的寻路算法DEMO


    灰色格子为默认正常
    蓝色格子表示为障碍物,不可进入
    红色细条在格子周围,表示格子的墙,用于阻碍行走
    紫色为当前鼠标选中格子
    黄色为寻路的起始位置和结束位置.鼠标左键设置,CTRL+鼠标左键可以重设起始位置.
    绿色格子为寻路路径
    淡蓝色为寻路算法的搜索路径.
    鼠标右键控制场景的视角,按X键恢复为默认视角.
    鼠标滚轮调节视口远近.
    ESC 程序退出
    F11 全屏显示


    实现了三种寻路算法,A*,广度优先,深度优先.算法是很多年前写的,这两天整理到自已的引擎中.自己几年前的代码风格很差,改起来很是费劲.这只是个测试DEMO,你会发现深度优先算法的效率最高,但其路径可能会绕很大的弯,A*算法效率最差,大概是没有做更深入的优化.

    下面为三种寻路算法的截图

    场景:

    A*算法:

    广度优先算法:

    深度优先算法:

    下载地址:

    http://files.cnblogs.com/WhyEngine/PathFinder.zip

    转载于:https://my.oschina.net/abcijkxyz/blog/722653

    展开全文
  • A星寻路算法案例

    2018-04-10 16:55:03
    A星寻路算法案例 A星寻路算法案例 A星寻路算法案例 A星寻路算法案例 A星寻路算法案例 A星寻路算法案例 A星寻路算法案例
  • 远航模块游戏寻路

    2019-02-23 02:58:35
    中文大漠,A星寻路,等功能
  • 训练寻路

    2019-05-03 22:52:00
    做了一个demo,功能有8方向寻路,三点共线,修改并读取 地图,保存最佳路径,以及 训练地图。 上图是 寻路 的 测试,可以看到 设置 起点 终点,点击寻路,都能以黄色路径出来,蓝色是关键点,需要保存的。 这...

    做了一个demo,功能有8方向寻路,三点共线,修改并读取 地图,保存最佳路径,以及 训练地图。

    上图是  寻路 的 测试,可以看到 设置 起点 终点,点击寻路,都能以黄色路径出来,蓝色是关键点,需要保存的。

     

    这个图是 训练,什么是训练,就是 固定好 目标点,用地图上 所有路点(或指定点)来 寻路。

    寻路的 次数很多,所以需要比较长时间,我这个演示 只是寻了几次作为演示。寻好后,保存关键点。

    为什么要寻路,因为 a* 对于上千 上万的 格子时候,寻路很慢,但很多时候,我们需要数量很多的格子,

    这样 地图可以做的 精细点,那么就要用到我这个操作,训练!训练后得到的数据 存在xml。

    我们 在 项目里面,不需要 用寻路,只要把这些数据读取存在 内存字典里面,那么寻路就变成 字典读取数据,

    这个速度 肯定是 非常快的。因为做了三点共线,所以路径数据并不大,所以不用担心 几千个 路径数据多大内存。

    每个地图开始的时候,读取并加入字典,结束后 清空字典。

     

    好了,代码很简单,主要就是思路,三点共线 前一章节 给过代码,大家自己去测试吧。

    转载于:https://www.cnblogs.com/big-zhou/p/10806990.html

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,317
精华内容 6,926
关键字:

寻路