コード例 #1
0
    public void CreateGrid()
    {
        if (manager == null)
        {
            manager = GameObject.Find("TerrainManager").GetComponent <TerrainManager>();
        }
        myInfo = manager.myInfo;
        map    = new Node[myInfo.x_N, myInfo.z_N];
        bool    walkable;
        Vector3 pos;

        for (int i = 0; i < myInfo.x_N; i++)
        {
            for (int j = 0; j < myInfo.z_N; j++)
            {
                if (myInfo.traversability[i, j] > 0.5)
                {
                    walkable = false;
                }
                else
                {
                    walkable = true;
                }
                pos       = new Vector3(myInfo.get_x_pos(i), 0f, myInfo.get_z_pos(j));
                map[i, j] = new Node(walkable, pos, i, j);
            }
        }
    }
コード例 #2
0
    public void CreateMap()
    {
        map = new Node[info.x_N, info.z_N];
        bool    walkable;
        Vector3 pos;

        for (int i = 0; i < info.x_N; i++)
        {
            for (int j = 0; j < info.z_N; j++)
            {
                if (info.traversability[i, j] > 0.5)
                {
                    walkable = false;
                }
                else
                {
                    walkable = true;
                }
                pos       = new Vector3(info.get_x_pos(i), 0f, info.get_z_pos(j));
                map[i, j] = new Node(walkable, pos, i, j);
            }
        }
    }
コード例 #3
0
    public List <Vector3> getV3Path()
    {
        int indexI = get_i_index(rawTerrainInfo.get_x_pos(mDFSPath[0].Item1));
        int indexJ = get_j_index(rawTerrainInfo.get_z_pos(mDFSPath[0].Item2));

        List <Vector3> path        = new List <Vector3>();
        var            neigbour    = getNeigbour(indexI, indexJ);
        int            mOffsetType = neigbour[0];

        indexI += mOffset[mOffsetType, 0];
        indexJ += mOffset[mOffsetType, 1];
        path.Add(new Vector3(get_x_pos(indexI), 0f, get_z_pos(indexJ)));
        traversability[indexI, indexJ] = 1f;
        remainArea--;
        int whileCounter = 0;

        while (remainArea > 0 && whileCounter < 10000)
        {
            whileCounter++;
            neigbour = getNeigbour(indexI, indexJ);
            if (neigbour.Count == 1)
            {
                mOffsetType = neigbour[0];
                indexI     += mOffset[mOffsetType, 0];
                indexJ     += mOffset[mOffsetType, 1];
                path.Add(new Vector3(get_x_pos(indexI), 0f, get_z_pos(indexJ)));
                traversability[indexI, indexJ] = 1f;
                remainArea--;
            }
            else if (neigbour.Count > 1)
            {
                bool ifAddPoint = false;
                foreach (var t in neigbour)
                {
                    int pIndexI_P1 = rawTerrainInfo.get_i_index(get_x_pos(indexI));
                    int pIndexJ_P1 = rawTerrainInfo.get_j_index(get_z_pos(indexJ));
                    int pIndexI_P2 = rawTerrainInfo.get_i_index(get_x_pos(indexI + mOffset[t, 0]));
                    int pIndexJ_P2 = rawTerrainInfo.get_j_index(get_z_pos(indexJ + mOffset[t, 1]));
                    if (pIndexI_P1 == pIndexI_P2 && pIndexJ_P1 == pIndexJ_P2)
                    {
                        indexI     += mOffset[t, 0];
                        indexJ     += mOffset[t, 1];
                        mOffsetType = t;
                        path.Add(new Vector3(get_x_pos(indexI), 0f, get_z_pos(indexJ)));
                        traversability[indexI, indexJ] = 1f;
                        remainArea--;
                        ifAddPoint = true;
                        break;
                    }
                }
                if (!ifAddPoint && neigbour.Exists(x => x == mOffsetType))
                {
                    indexI += mOffset[mOffsetType, 0];
                    indexJ += mOffset[mOffsetType, 1];
                    path.Add(new Vector3(get_x_pos(indexI), 0f, get_z_pos(indexJ)));
                    traversability[indexI, indexJ] = 1f;
                    remainArea--;
                    ifAddPoint = true;
                }
            }
            else
            {
                break;
            }
        }
        path = splitPath(path);
        for (int i = 0; i < path.Count; i++)
        {
            float   ori_center_x = rawTerrainInfo.get_x_pos(rawTerrainInfo.get_i_index(path[i].x));
            float   ori_center_z = rawTerrainInfo.get_z_pos(rawTerrainInfo.get_j_index(path[i].z));
            Vector3 centerV3     = new Vector3(ori_center_x, 0f, ori_center_z);
            path[i] += (centerV3 - path[i]) * 0.5f;
        }
        return(path);
    }