NGUI自适应各种屏幕的解决方法
NGUI自适应各种屏幕的解决方法:
这个问题是困扰了很多人,但找了下解决的方法很多,我觉得这是最简单的方法。
现在很多人说屏幕自适应改用UIAnchor脚本,对于高版本我并没有用过,写该文时,NGUI已经更新到3.5.4。
使用的版本是NGUI 2.7.0,需要关联的脚本,UIRoot,UIStretch两个主要的脚本。
1.设置开发环境分辨率,设置开发分辨率:1920 x 1200 (这是我的开发分辨率)
2.点击NGUI创建的2DUI的根节点(如何创建UI就不用说了吧),在监视面板(Inspector)中设置UIRoot脚本,如下图:
3.找到2DUI相机节点(Camera),挂上UIStretch脚本,并设置,如下图:
4.在Game视图切换到开发比率(1920x1200)下开发,这样你发布的UI就能适应各种屏幕,不会有黑边,不过如果屏幕的分辨率和开发分辨率相差太大的话,会有压缩或放大。
5.我自己也写了个简单的2DUI界面自动适应的脚本(缩水版),直接将该脚本挂到UI相机上就行,然后再在监视面板输入开发的宽和高(开发分辨率)
using UnityEngine; using System.Collections;
// 使在辑模式运行该脚本,直接观察,所见及所得,点击播放按钮一次,观察效果
[ExecuteInEditMode]
public class AutoAdjustResFor2DUI : MonoBehaviour
{
// 该脚本挂到NGUI的2D相机上面,使UI自动适应屏幕,为了开发直观,还是要调好步骤1.2中的参数
public int resWidth = 1920; // 开发分辨率 宽 可以在监视面板改成你的分辨率宽,这是我默认值
public int resHieght = 1200; // 开发分辨率 高
Camera uiCamera = null;
Vector2 relativeSize = Vector2.one;
Transform mTrans;
UIRoot mRoot;
Rect mRect;
void Awake()
{
mRect = new Rect();
mTrans = transform;
}
void Start()
{
uiCamera = gameObject.camera;
mRoot = transform.root.GetComponent<UIRoot>();
//print(mRoot.name);
mRoot.manualHeight = resHieght;
relativeSize.x = 1f / resWidth;
relativeSize.y = 1f / resHieght;
}
void Update()
{
float adjustment = 1f;
if (uiCamera == null)
{
Debug.LogError("2DUI Camera is null!, This script must be attached 2DUI"s camera!");
return;
}
else
{
mRect = uiCamera.pixelRect;
adjustment = mRoot.pixelSizeAdjustment;
}
float rectWidth = mRect.width;
float rectHeight = mRect.height;
if (adjustment != 1f && rectHeight > 1f)
{
float scale = mRoot.activeHeight / rectHeight;
rectWidth *= scale;
rectHeight *= scale;
}
Vector3 localScale = mTrans.localScale;
localScale.x = relativeSize.x * rectWidth;
localScale.y = relativeSize.y * rectHeight;
if (mTrans.localScale != localScale) mTrans.localScale = localScale;
}
}
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
