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相机上就行,然后再在监视面板输入开发的宽和高(开发分辨率)

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. using UnityEngine;  
  2. using System.Collections;  
[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. // 使在辑模式运行该脚本,直接观察,所见及所得,点击播放按钮一次,观察效果  
[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. [ExecuteInEditMode]  
  2. public class AutoAdjustResFor2DUI : MonoBehaviour  
  3. {  
  4.     // 该脚本挂到NGUI的2D相机上面,使UI自动适应屏幕,为了开发直观,还是要调好步骤1.2中的参数  
  5.   
  6.     public int resWidth  = 1920; // 开发分辨率 宽 可以在监视面板改成你的分辨率宽,这是我默认值  
  7.     public int resHieght = 1200; // 开发分辨率 高  
  8.   
  9.     Camera uiCamera = null;  
  10.   
  11.     Vector2 relativeSize = Vector2.one;  
  12.   
  13.     Transform mTrans;  
  14.     UIRoot mRoot;  
  15.     Rect mRect;  
  16.   
  17.     void Awake()  
  18.     {  
  19.         mRect = new Rect();  
  20.         mTrans = transform;  
  21.     }  
  22.   
  23.     void Start()  
  24.     {  
  25.         uiCamera = gameObject.camera;  
  26.         mRoot = transform.root.GetComponent<UIRoot>();  
  27.         //print(mRoot.name);  
  28.         mRoot.manualHeight = resHieght;  
  29.         relativeSize.x = 1f / resWidth;  
  30.         relativeSize.y = 1f / resHieght;  
  31.     }  
  32.   
  33.     void Update()  
  34.     {  
  35.         float adjustment = 1f;  
  36.   
  37.         if (uiCamera == null)  
  38.         {  
  39.             Debug.LogError("2DUI Camera is null!, This script must be attached 2DUI's camera!");  
  40.             return;  
  41.               
  42.         }  
  43.         else  
  44.         {  
  45.             mRect = uiCamera.pixelRect;  
  46.             adjustment = mRoot.pixelSizeAdjustment;  
  47.         }   
  48.   
  49.         float rectWidth = mRect.width;  
  50.         float rectHeight = mRect.height;  
  51.   
  52.         if (adjustment != 1f && rectHeight > 1f)  
  53.         {  
  54.             float scale = mRoot.activeHeight / rectHeight;  
  55.             rectWidth *= scale;  
  56.             rectHeight *= scale;  
  57.         }  
  58.   
  59.         Vector3 localScale = mTrans.localScale;  
  60.   
  61.         localScale.x = relativeSize.x * rectWidth;  
  62.         localScale.y = relativeSize.y * rectHeight;  
  63.   
  64.         if (mTrans.localScale != localScale) mTrans.localScale = localScale;  
  65.     }  
  66. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值