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