打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
unity3d GUI 自适应分辨率
userphoto

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

}


}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
android:scaleType="matrix"布局文件加载图片时候的显示方式
ImageView的scaletype属性
android ImageView scaleType属性
Android ImageView 总结
java图片缩放实现图片填充整个屏幕
【android】scaleType属性与ImagView中图片的显示的关系
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服