예제 #1
0
    private void initTexture()
    {
        GAFAtlasElementData element = atlasElement;
        GAFTexturesData     info    = textureInfo;

        int csf = (int)movieClip.settings.csf;

        m_MaskTexture = new Texture2D(
            (int)(element.width * csf)
            , (int)(element.height * csf)
            , TextureFormat.ARGB32
            , false);

        Color [] textureColor = texture.GetPixels();
        for (uint i = 0; i < textureColor.Length; ++i)
        {
            textureColor [i] = Color.black;
        }

        m_MaskTexture.SetPixels(textureColor);
        m_MaskTexture.Apply();

        Texture2D atlasTexture = movieClip.resource.getTexture(System.IO.Path.GetFileNameWithoutExtension(info.getFileName(csf)));

        Color [] maskTexturePixels = atlasTexture.GetPixels(
            (int)(element.x * csf)
            , (int)(atlasTexture.height - element.y * csf - element.height * csf)
            , (int)(element.width * csf)
            , (int)(element.height * csf));

        m_MaskTexture.SetPixels(
            0
            , 0
            , (int)(element.width * csf)
            , (int)(element.height * csf)
            , maskTexturePixels);

        m_MaskTexture.Apply(true);

        m_MaskTexture.filterMode = FilterMode.Bilinear;
        m_MaskTexture.wrapMode   = TextureWrapMode.Clamp;

        m_MaskTexture.Apply();
    }
예제 #2
0
    protected virtual void initMesh()
    {
        GAFAtlasElementData element = atlasElement;
        GAFTexturesData     info    = textureInfo;

        if (filter == null)
        {
            filter = gameObject.AddComponent <MeshFilter> ();
        }

        float scale        = element.scale * movieClip.settings.pixelsPerUnit;
        float scaledPivotX = element.pivotX / scale;
        float scaledPivotY = element.pivotY / scale;
        float scaledWidth  = element.width / scale;
        float scaledHeight = element.height / scale;

        Vector3 [] vertices = new Vector3[4];
        vertices[0] = new Vector3(-scaledPivotX, scaledPivotY - scaledHeight, 0f);
        vertices[1] = new Vector3(-scaledPivotX, scaledPivotY, 0f);
        vertices[2] = new Vector3(-scaledPivotX + scaledWidth, scaledPivotY, 0f);
        vertices[3] = new Vector3(-scaledPivotX + scaledWidth, scaledPivotY - scaledHeight, 0f);

        Texture2D atlasTexture         = movieClip.resource.getTexture(System.IO.Path.GetFileNameWithoutExtension(info.getFileName(movieClip.settings.csf)));
        float     scaledElementLeftX   = element.x * movieClip.settings.csf / atlasTexture.width;
        float     scaledElementRightX  = (element.x + element.width) * movieClip.settings.csf / atlasTexture.width;
        float     scaledElementTopY    = (atlasTexture.height - element.y * movieClip.settings.csf - element.height * movieClip.settings.csf) / atlasTexture.height;
        float     scaledElementBottomY = (atlasTexture.height - element.y * movieClip.settings.csf) / atlasTexture.height;

        Vector2 [] uv = new Vector2[vertices.Length];
        uv [0] = new Vector2(scaledElementLeftX, scaledElementTopY);
        uv [1] = new Vector2(scaledElementLeftX, scaledElementBottomY);
        uv [2] = new Vector2(scaledElementRightX, scaledElementBottomY);
        uv [3] = new Vector2(scaledElementRightX, scaledElementTopY);

        Vector3 [] normals = new Vector3[vertices.Length];
        normals[0] = new Vector3(0f, 0f, -1f);
        normals[1] = new Vector3(0f, 0f, -1f);
        normals[2] = new Vector3(0f, 0f, -1f);
        normals[3] = new Vector3(0f, 0f, -1f);

        int [] triangles = new int[6];
        triangles[0] = 2;
        triangles[1] = 0;
        triangles[2] = 1;
        triangles[3] = 3;
        triangles[4] = 0;
        triangles[5] = 2;

        Mesh mesh = new Mesh();

        mesh.name = "Element_" + atlasElementID;

        mesh.vertices  = vertices;
        mesh.uv        = uv;
        mesh.triangles = triangles;
        mesh.normals   = normals;

        filter.mesh = mesh;
        filter.sharedMesh.Optimize();
    }