示例#1
0
    // Start is called before the first frame update

    void Start()
    {
        // Rigidbody2Dを取得する
        Rigidbody2D rd = GetComponent <Rigidbody2D>();

        //目的地の設定
        //餌の位置
        targetFeed = GameObject.Find("feed").transform.position;
        //巣の位置
        targetNest = GameObject.Find("nest").transform.position;
        //現在置
        nowPlace = GameObject.Find("workingAnt").transform.position;

        //経路探索のプログラムにぶち込むためのnode作成
        nodeGraph = new NodeGraph();
        nodeNest  = nodeGraph.CreateNode(targetNest);
        nodeFeed  = nodeGraph.CreateNode(targetFeed);
        //現在は曲がり角を生成していないため、nodeは2つだけ
        //試しにtargetNestEntrance(巣の出入り口)なるものを曲がり角として用意してみる
        targetNestEntrance = GameObject.Find("nestEntrance").transform.position;
        nodeNestEntrance   = nodeGraph.CreateNode(targetNestEntrance);

        // nodeGraph.ConnectNodes(new []{nodeNest, nodeNestEntrance,nodeFeed});
        nodeGraph.ConnectNodes(new [] { nodeNest, nodeNestEntrance });
        nodeGraph.ConnectNodes(new [] { nodeNestEntrance, nodeFeed });
        //探索ごとにAStarSearcherインスタンスを作る
        searcher = new AStarSearcher(nodeGraph);
        //経路探索をする
        searcher.SearchRoute(nodeNest, nodeFeed);
        Debug.Log(searcher.Route);
        //結果はsearcher.Routeに入る
        foreach (var node in searcher.Route)
        {
            //vにnode.Posで値を取得する
            v.Add(node.Pos);
            Debug.Log(node.ToString());
        }


        //ありの状態の取得
        //初期位置
        nowPlace = GameObject.Find("workingAnt").transform.position;
        //対象までにかかる時間
        time = 250;
        //node間の移動を計算し足していく値
        //最初は1番目の目的地へと向かう
        i      = 1;
        target = v[i];
        way    = explore(target);
        float x = way.x;
        float y = way.y;

        Debug.Log(x);
        Debug.Log(y);
        //運搬能力
        //ability = 1;
    }
示例#2
0
    //運搬能力
    //public int ability = 1;


    // Start is called before the first frame update

    void Start()
    {
        antMovement = new AntMovement();
        //目的地の設定

        //餌と巣の位置情報はテスト用(後で削除または変更する可能性あり)
        //餌の位置
        targetFeed = GameObject.Find("feed").transform.position;
        //巣の位置
        targetNest = GameObject.Find("nest").transform.position;
        //現在置
        //自身の座標を取得
        antMovement.nowPlace = transform.position;

        //経路探索のプログラムにぶち込むためのnode作成
        nodeGraph = new NodeGraph();
        nodeNest  = nodeGraph.CreateNode(targetNest);
        nodeFeed  = nodeGraph.CreateNode(targetFeed);
        //現在は曲がり角を生成していないため、nodeは2つだけ
        //試しにtargetNestEntrance(巣の出入り口)なるものを曲がり角として用意してみる
        targetNestEntrance = GameObject.Find("nestEntrance").transform.position;
        nodeNestEntrance   = nodeGraph.CreateNode(targetNestEntrance);
        //nodeをそれぞれつなげる作業
        //nodeGraph.ConnectNodes(new []{from,to});→ fromからtoへnodeをつなげる
        //nodeGraph.ConnectNodes(new []{A, B,C});→ABCの循環円を作成
        nodeGraph.ConnectNodes(new [] { nodeNest, nodeNestEntrance });
        nodeGraph.ConnectNodes(new [] { nodeNestEntrance, nodeFeed });
        //探索ごとにAStarSearcherインスタンスを作る
        searcher = new AStarSearcher(nodeGraph);
        //経路探索をする
        searcher.SearchRoute(nodeNest, nodeFeed);
        Debug.Log(searcher.Route);
        //結果はsearcher.Routeに入る
        foreach (var node in searcher.Route)
        {
            //vにnode.Posで値を取得する
            v.Add(node.WorldPosition);
            //Debug.Log(node.ToString());
            I++; //vの大きさ
        }


        //ありの状態の取得
        //初期位置
        antMovement.nowPlace = transform.position;
        //アリのスピード取得(未取得)
        //public float speed = hogehoge.speed;
        //試験用スピード //これは後で削除
        antMovement.speed = 0.01f;
        //node間の移動を計算し足していく値
        //最初は1番目の目的地へと向かう
        i               = 1;
        target          = v[i];
        antMovement.way = antMovement.Explore(target);
    }
示例#3
0
    // Start is called before the first frame update
    void Start()
    {
        Debug.Log("testStart");

        //経路グラフはNodeGraphで表現する
        NodeGraph nodeGraph = new NodeGraph();
        Node      nodeA     = nodeGraph.CreateNode(new Vector2(0, 0));
        Node      nodeB     = nodeGraph.CreateNode(new Vector2(-5, 10));
        Node      nodeC     = nodeGraph.CreateNode(new Vector2(0, 5));
        Node      nodeD     = nodeGraph.CreateNode(new Vector2(10, 10));
        Node      nodeE     = nodeGraph.CreateNode(new Vector2(10, 0));

        //それぞれをつなげる
        nodeGraph.ConnectNodes(new [] { nodeA, nodeB, nodeC });
        nodeGraph.ConnectNodes(new [] { nodeB, nodeC, nodeD });
        nodeGraph.ConnectNodes(new [] { nodeA, nodeE });
        nodeGraph.ConnectNodes(new [] { nodeD, nodeE });

        Debug.Log(nodeA.ToString());
        Debug.Log(nodeB.ToString());
        Debug.Log(nodeC.ToString());
        Debug.Log(nodeD.ToString());
        Debug.Log(nodeE.ToString());


        Debug.Log("graphOk");

        Debug.Log("AStarSearchStart");
        var stopWatch = new System.Diagnostics.Stopwatch();

        stopWatch.Start();

        //探索ごとにAStarSearcherインスタンスを作る
        AStarSearcher searcher = new AStarSearcher(nodeGraph);

        //経路探索をする
        searcher.SearchRoute(nodeB, nodeE);

        stopWatch.Stop();
        Debug.Log(stopWatch.ElapsedMilliseconds + "ms");

        Debug.Log("Route:");
        //結果はsearcher.Routeに入る
        foreach (var node in searcher.Route)
        {
            Debug.Log(node.ToString());
        }
        // Debug.Log();
    }