1. 程式人生 > >【Unity編輯器】UVPreview擴充套件

【Unity編輯器】UVPreview擴充套件

/// <summary>
    /// 繪製矩陣計算
    /// </summary>
    /// <param name="r"></param>
    /// <param name="x"></param>
    /// <param name="y"></param>
    /// <param name="w"></param>
    /// <param name="h"></param>
    /// <returns></returns>
    private Matrix4x4 RefreshMatrix(Rect r, float x = 0, float y = 0, float w = 1, float h = 1)
    {
        //該矩陣會在繪製區域r發生變化時更新,並根據r的寬高比自適應繪製區域
        r.x = r.x - (uvPanelScale.x - 1) * r.width / 2;
        r.y = r.y - (uvPanelScale.y - 1) * r.height / 2;
        r.x += uvPanelPosition.x;
        r.y += uvPanelPosition.y;
        r.width *= uvPanelScale.x;
        r.height *= uvPanelScale.y;
        return GetGUISquareMatrix(r, x, y, w, h);
    }
 
    private static Matrix4x4 GetGUISquareMatrix(Rect r, float x = 0, float y = 0, float w = 1, float h = 1)
    {
        //該矩陣會在繪製區域r發生變化時更新,並根據r的寬高比自適應繪製區域
        Matrix4x4 m_Matrix = new Matrix4x4();
        float aspect = r.width / r.height;
        if (aspect > 1)
        {
            m_Matrix.m00 = r.height * w;
            m_Matrix.m03 = r.x + r.width / 2 - r.height / 2 + r.height * x;
            m_Matrix.m11 = -r.height * h;
            m_Matrix.m13 = r.y + r.height - y * r.height;
        }
        else
        {
            m_Matrix.m00 = r.width * w;
            m_Matrix.m03 = r.x + x * r.width;
            m_Matrix.m11 = -r.width * h;
            m_Matrix.m13 = r.y + r.height / 2 + r.width / 2 - y * r.width;
        }
        m_Matrix.m33 = 1;
        return m_Matrix;
    }
 
    /// <summary>
    /// 通過GUI繪製區域獲取GUI裁剪矩陣計算
    /// </summary>
    /// <param name="r">繪製區域</param>
    /// <returns></returns>
    public static Matrix4x4 GetGUIClipMatrix(Rect r)
    {
        //fx = (x-r.x)/r.width;
        //fy = (y-r.y)/r.height;
        Matrix4x4 matrix = new Matrix4x4();
        matrix.m00 = 1 / r.width;
        matrix.m03 = -r.x / r.width;
        matrix.m11 = 1 / r.height;
        matrix.m13 = -r.y / r.height;
        matrix.m33 = 1;
        return matrix;
    }