【Unity編輯器】UVPreview擴充套件
阿新 • • 發佈:2019-02-20
/// <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; }