public override void GUIDraw (){
//开始缩放
//先定义一个标准屏幕大小代码按照这个分辨率写,这里屏是800*480象素,GUI矩阵再乘以新的缩放矩阵实现GUI的缩放,GUI.matrix*=scaleMatrix; 
ScreenScaleUtil.BeginScreenScale ();
//GUI代码
GUI...
//结束缩放
ScreenScaleUtil.EndScreenScale ();
}
ScreenScaleUtil.cs
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public enum ScreenScaleType
{
	None,
	Center,
	Fit,
	Full
}
public static class ScreenScaleUtil
{
	static ScreenScaleUtil ()
	{
		scaleRate=1;
		scaleType = ScreenScaleType.None;
		scaleMatrix = Matrix4x4.identity;
		screenSize = new Vector2 (800, 480);
		
		 ScaleType=ScreenScaleType.Fit;
		
	 	lstMats =new List<Matrix4x4>();
		
	}
private static Matrix4x4 scaleMatrix;
	private static ScreenScaleType scaleType;
	private static Vector2 screenSize;
	private static float scaleRate;
public static Matrix4x4 ScaleMatrix {
		get {return scaleMatrix; }
	}
public static ScreenScaleType ScaleType {
		get { return scaleType; }
		set {
			if (value != scaleType) {
				
				scaleType = value;
				
				scaleMatrix = GetScreenScaleMatrix (screenSize, scaleType,out scaleRate);
			}
		}
	}
	public static Vector2 ScreenSize {
		get { return screenSize; }
		set {
			if (value != screenSize) {
				screenSize = value;
 
				scaleMatrix = GetScreenScaleMatrix (screenSize, scaleType,out scaleRate);
			}
			
		}
	}
	
	public static float ScaleRate{
		get{
			return scaleRate;
		}
	}
public static void Update(){
			scaleMatrix = GetScreenScaleMatrix (screenSize, scaleType,out scaleRate);
	}
public static Matrix4x4 GetScreenScaleMatrix (Vector2 screenSize, ScreenScaleType scaleType)
	{
		float rate;
		return GetScreenScaleMatrix(screenSize,scaleType,out rate);
	}
	public static Matrix4x4 GetScreenScaleMatrix (Vector2 screenSize, ScreenScaleType scaleType,out float rate)
	{
		Matrix4x4 scaleMatrix;
			  rate = 1;
		
		if (scaleType == ScreenScaleType.None) { 
			scaleMatrix = Matrix4x4.identity;
			
		} else {
if ((Screen.width / (float)Screen.height) < (screenSize.x / screenSize.y)) {
				 
				if (scaleType == ScreenScaleType.Fit) {
					rate = Screen.width / screenSize.x;
				} else if (scaleType == ScreenScaleType.Full) {
					rate = Screen.height / screenSize.y;
				}
			} else {			
				if (scaleType == ScreenScaleType.Fit) {
					rate = Screen.height / screenSize.y;	
				} else if (scaleType == ScreenScaleType.Full) {
					rate = Screen.width / screenSize.x;	
				}
			}
			scaleMatrix = Matrix4x4.TRS (new Vector3 ((Screen.width - screenSize.x * rate) / 2.0f, (Screen.height - screenSize.y * rate) / 2.0f, 0), Quaternion.identity, new Vector3 (rate, rate, 1));
			
		}
		return scaleMatrix;
	}
	
	private static List<Matrix4x4> lstMats;
	
	public static void BeginScreenScale(){
	
		if(lstMats.Count>0){
			return;
		}
		
		lstMats.Add(GUI.matrix); 
		GUI.matrix*=ScaleMatrix;
		
	}
	
	public static void BeginScreenScale(ScreenScaleType scaleType ){
	
		if(lstMats.Count>0){
			return;
		}
		
		lstMats.Add(GUI.matrix); 
		GUI.matrix*=GetScreenScaleMatrix(screenSize,scaleType);
		
	}
public static void EndScreenScale(){
		if(lstMats.Count<=0)
			return;
		
		GUI.matrix=lstMats[lstMats.Count-1];
		
		lstMats.RemoveAt(lstMats.Count-1);
	}
}