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; } }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。