分享

unity3d GUI 自适应分辨率

 3dC 2014-01-17

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);

}


}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多