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