Esempio n. 1
0
    Rect GetImageUVRect(Image image, Rect localRect, Vector2[] uv)
    {
        Rect imageRect = new Rect(0, 0, image.size.x, image.size.y);
        Rect bound     = ToolSet.Intersection(ref imageRect, ref localRect);
        Rect uvRect    = image.texture.uvRect;

        if (image.scale9Grid != null)
        {
            Rect  gridRect = (Rect)image.scale9Grid;
            float sourceW  = image.texture.width;
            float sourceH  = image.texture.height;
            uvRect = Rect.MinMaxRect(Mathf.Lerp(uvRect.xMin, uvRect.xMax, gridRect.xMin / sourceW),
                                     Mathf.Lerp(uvRect.yMin, uvRect.yMax, (sourceH - gridRect.yMax) / sourceH),
                                     Mathf.Lerp(uvRect.xMin, uvRect.xMax, gridRect.xMax / sourceW),
                                     Mathf.Lerp(uvRect.yMin, uvRect.yMax, (sourceH - gridRect.yMin) / sourceH));

            float vw = imageRect.width - (sourceW - gridRect.width);
            float vh = imageRect.height - (sourceH - gridRect.height);
            uvRect = Rect.MinMaxRect(Mathf.Lerp(uvRect.xMin, uvRect.xMax, (bound.x - gridRect.x) / vw),
                                     Mathf.Lerp(uvRect.yMin, uvRect.yMax, (imageRect.height - bound.yMax - (sourceH - gridRect.yMax)) / vh),
                                     Mathf.Lerp(uvRect.xMin, uvRect.xMax, (bound.xMax - gridRect.x) / vw),
                                     Mathf.Lerp(uvRect.yMin, uvRect.yMax, (imageRect.height - bound.yMin - gridRect.y) / vh));
        }
        else
        {
            uvRect = Rect.MinMaxRect(Mathf.Lerp(uvRect.xMin, uvRect.xMax, bound.xMin / imageRect.width),
                                     Mathf.Lerp(uvRect.yMin, uvRect.yMax, (imageRect.height - bound.yMax) / imageRect.height),
                                     Mathf.Lerp(uvRect.xMin, uvRect.xMax, bound.xMax / imageRect.width),
                                     Mathf.Lerp(uvRect.yMin, uvRect.yMax, (imageRect.height - bound.yMin) / imageRect.height));
        }

        uv[0] = uvRect.position;
        uv[1] = new Vector2(uvRect.xMin, uvRect.yMax);
        uv[2] = new Vector2(uvRect.xMax, uvRect.yMax);
        uv[3] = new Vector2(uvRect.xMax, uvRect.yMin);

        if (image.texture.rotated)
        {
            ToolSet.RotateUV(uv, ref image.texture.uvRect);
        }

        return(uvRect);
    }