Пример #1
0
    public void GenerateMap()
    {
        foreach (Transform childTransform in transform)
        {
            Destroy(childTransform.gameObject);
        }
        GenerateMapArrayFromLevelData();

        int numSquares   = Squares_X * Squares_Y;
        int numVerts     = 4 * numSquares;
        int numTriPoints = 6 * numSquares;

        Vector3[] verts   = new Vector3[numVerts];
        Vector3[] normals = new Vector3[numVerts];
        Vector2[] uv      = new Vector2[numVerts];

        int[]   tris         = new int[numTriPoints];
        Vector3 towardCamera = new Vector3(0, 0, -1f);

        int squareNum = 0;

        for (int y = 0; y < Squares_Y; y++)
        {
            for (int x = 0; x < Squares_X; x++)
            {
                verts[squareNum * 4]     = new Vector3(x * Square_Size, /*(Squares_Y*Square_Size) -*/ y * Square_Size, 0.0f);
                verts[squareNum * 4 + 1] = new Vector3((x + 1) * Square_Size, /*(Squares_Y*Square_Size) -*/ y * Square_Size, 0.0f);
                verts[squareNum * 4 + 2] = new Vector3(x * Square_Size, /*(Squares_Y*Square_Size) -*/ (y + 1) * Square_Size, 0.0f);
                verts[squareNum * 4 + 3] = new Vector3((x + 1) * Square_Size, /*(Squares_Y*Square_Size) -*/ (y + 1) * Square_Size, 0.0f);

                tris[squareNum * 6]     = squareNum * 4;
                tris[squareNum * 6 + 1] = squareNum * 4 + 2;
                tris[squareNum * 6 + 2] = squareNum * 4 + 1;
                tris[squareNum * 6 + 3] = squareNum * 4 + 1;
                tris[squareNum * 6 + 4] = squareNum * 4 + 2;
                tris[squareNum * 6 + 5] = squareNum * 4 + 3;

                normals[squareNum * 4]     = towardCamera;
                normals[squareNum * 4 + 1] = towardCamera;
                normals[squareNum * 4 + 2] = towardCamera;
                normals[squareNum * 4 + 3] = towardCamera;

                SetSquareTexCoords(uv, squareNum, MapArray[x, y].TextureNum);

                /*if (MapArray[x, y].IsWall)
                 * {
                 *      GameObject go = new GameObject();
                 *      go.name = "Collider_("+x+","+y+")";
                 *      BoxCollider2D boxcoll = go.AddComponent<BoxCollider2D>();
                 *      boxcoll.size = new Vector2(Square_Size,Square_Size);
                 *      boxcoll.center= new Vector2((x+0.5f)*Square_Size, (y+0.5f)*Square_Size);
                 *      go.transform.position = transform.position;
                 *      go.transform.rotation = transform.rotation;
                 *      go.transform.localScale = transform.lossyScale;
                 *      go.transform.parent = transform;
                 * }*/

                squareNum++;
            }
        }

        GenerateColliders();

        Mesh mesh = new Mesh();

        mesh.vertices  = verts;
        mesh.triangles = tris;
        mesh.normals   = normals;
        mesh.uv        = uv;
        GetComponent <MeshFilter>().mesh = mesh;
        pathfinder = new PathfindingImpl(Squares_X, Squares_Y, CollideAtGrid);
    }
Пример #2
0
    public void GenerateMap()
    {
        foreach (Transform childTransform in transform) Destroy(childTransform.gameObject);
        GenerateMapArrayFromLevelData();

        int numSquares = Squares_X * Squares_Y;
        int numVerts = 4 * numSquares;
        int numTriPoints = 6 * numSquares;

        Vector3[] verts = new Vector3[numVerts];
        Vector3[] normals = new Vector3[numVerts];
        Vector2[] uv = new Vector2[numVerts];

        int[] tris = new int[numTriPoints];
        Vector3 towardCamera = new Vector3(0,0,-1f);

        int squareNum = 0;

        for(int y = 0; y < Squares_Y; y++)
        {
            for(int x = 0; x < Squares_X; x++)
            {
                verts[squareNum*4  ] = new Vector3(x*Square_Size,     /*(Squares_Y*Square_Size) -*/ y*Square_Size, 0.0f);
                verts[squareNum*4+1] = new Vector3((x+1)*Square_Size, /*(Squares_Y*Square_Size) -*/ y*Square_Size, 0.0f);
                verts[squareNum*4+2] = new Vector3(x*Square_Size,     /*(Squares_Y*Square_Size) -*/ (y+1)*Square_Size, 0.0f);
                verts[squareNum*4+3] = new Vector3((x+1)*Square_Size, /*(Squares_Y*Square_Size) -*/ (y+1)*Square_Size, 0.0f);

                tris[squareNum*6  ] = squareNum*4;
                tris[squareNum*6+1] = squareNum*4+2;
                tris[squareNum*6+2] = squareNum*4+1;
                tris[squareNum*6+3] = squareNum*4+1;
                tris[squareNum*6+4] = squareNum*4+2;
                tris[squareNum*6+5] = squareNum*4+3;

                normals[squareNum*4  ] = towardCamera;
                normals[squareNum*4+1] = towardCamera;
                normals[squareNum*4+2] = towardCamera;
                normals[squareNum*4+3] = towardCamera;

                SetSquareTexCoords(uv, squareNum, MapArray[x, y].TextureNum);

                /*if (MapArray[x, y].IsWall)
                {
                    GameObject go = new GameObject();
                    go.name = "Collider_("+x+","+y+")";
                    BoxCollider2D boxcoll = go.AddComponent<BoxCollider2D>();
                    boxcoll.size = new Vector2(Square_Size,Square_Size);
                    boxcoll.center= new Vector2((x+0.5f)*Square_Size, (y+0.5f)*Square_Size);
                    go.transform.position = transform.position;
                    go.transform.rotation = transform.rotation;
                    go.transform.localScale = transform.lossyScale;
                    go.transform.parent = transform;
                }*/

                squareNum++;
            }
        }

        GenerateColliders();

        Mesh mesh = new Mesh();
        mesh.vertices = verts;
        mesh.triangles = tris;
        mesh.normals = normals;
        mesh.uv = uv;
        GetComponent<MeshFilter>().mesh = mesh;
        pathfinder = new PathfindingImpl(Squares_X, Squares_Y, CollideAtGrid);
    }