public void AddDefault()
    {
        if (!meshFilter)
        {
            meshFilter = GetComponent <MeshFilter>();
        }

        List <Vector2> uvList = new List <Vector2>();
        Mesh           mesh   = meshFilter.sharedMesh;
        List <Vector2> uv     = new List <Vector2>(mesh.uv);

        for (int i = 0; i < mesh.uv.Length; i++)
        {
            if (!uvList.Contains(mesh.uv[i]))
            {
                uvList.Add(mesh.uv[i]);
            }
        }

        VariantUV variant = new VariantUV();

        for (int i = 0; i < uvList.Count; i++)
        {
            VariantUV.UVCoord coord = new VariantUV.UVCoord();
            coord.currentUV = new Vector2Int((int)(uvList[i].x * 8), (int)(uvList[i].y * 8));
            coord.newUV     = new Vector2Int((int)(uvList[i].x * 8), (int)(uvList[i].y * 8));
            variant.coords.Add(coord);
        }

        variants.Add(variant);
    }
    public void Generate()
    {
        int rand = Random.Range(0, variants.Count + 1);

        if (rand == 0 && includeDefault)
        {
            return;
        }

        rand = Random.Range(0, variants.Count);

        VariantUV alter = variants[rand];

        Mesh mesh = meshFilter.sharedMesh;

        List <Vector2> uv = new List <Vector2>(mesh.uv);

        for (int i = 0; i < mesh.uv.Length; i++)
        {
            for (int j = 0; j < alter.coords.Count; j++)
            {
                float xFloor = (float)alter.coords[j].currentUV.x / texture.width;
                float xCeil  = (float)(alter.coords[j].currentUV.x + 1) / texture.width;
                float yFloor = (float)alter.coords[j].currentUV.y / texture.height;
                float yCeil  = (float)(alter.coords[j].currentUV.y + 1) / texture.height;
                if (mesh.uv[i].x > xFloor && mesh.uv[i].x <xCeil && mesh.uv[i].y> yFloor && mesh.uv[i].y < yCeil)
                {
                    uv[i] = new Vector2(((float)alter.coords[j].newUV.x + 0.5f) / texture.width, ((float)alter.coords[j].newUV.y + 0.5f) / texture.height);
                }
            }
        }

        Mesh newMesh = Instantiate(mesh);

        newMesh.SetUVs(0, uv);

        meshFilter.mesh = newMesh;
    }