这篇文章是转载的,之前用UIStretch做屏幕自适应,但一直有两个硬伤让我难受,一是屏幕被随意拉伸后,里面的UI就不是我想要的比例了,明明一个圆形变成椭圆了,一个高挑的美女变成一个肥姐了,好吧,这如果还能忍,那第二条真是让我尝尽了各种方法,那就是panel的裁剪用不了了,想做Scroll View做不了了,然后百度才知道要Panel做裁剪必须要求其scale和其父一直到根节点的scale都是(1,1,1),这还咋拉伸啊,然后看到很多朋友的各种代码尝试,结果一一失败了,反正是不好使,所以用UIStretch做屏幕自适应真是蛋疼啊,下了个新的NGUI版本3.0.8,UIStretch已经不能用了,看来连官方都不太支持了,好在还有其他办法,看了一位朋友的博客,写的非常清楚了,我这里做一下转发,真是帮我解决了所有问题:
看过一些文章,大多数都用UIStretch。说实话我并不喜欢用这个脚本。
我一直对那些在屏幕适应上出现问题的人推荐使用UIRoot的ManualHeight。
先提供三个截图。看看效果是否是你想要的。旁边空白出来的地方,你需要和策划、美术商量用一些背景挡住。
1、正常开发分辨率下:
 
 
2、看起来较细的分辨率:
 
 
3、看起来较宽的分辨率:
 
 
使用注意:
1、和策划制定好开发时分辨率。这很重要,要保证所有UI都在同样的分辨率下制作。
2、把我这个脚本挂在UIRoot上。UIRoot的Scaling Style修改为FixedSize。
3、aspectRatioHeight、aspectRatioWidth分别为开发时的高和宽。
4、每个UIRoot都需要调整ManualHeight到和策划制定的高度。
5、Unity3D的Game窗口,调整到相应的分辨率。
 
 
(感谢成都-大强提供以下版本。注意:UICamera.onScreenResize是3.0+版本的,如果报错请删除即可)
- using UnityEngine;
 - [ExecuteInEditMode]
 - [RequireComponent(typeof(UIRoot))]
 - public class SZUIRootScale : MonoBehaviour
 - {
 - public int aspectRatioHeight;
 - public int aspectRatioWidth;
 - public bool runOnlyOnce = false;
 - private UIRoot mRoot;
 - private bool mStarted = false;
 - void Awake()
 - {
 - UICamera.onScreenResize += ScreenSizeChanged;
 - }
 - void OnDestroy()
 - {
 - UICamera.onScreenResize -= ScreenSizeChanged;
 - }
 - void Start()
 - {
 - mRoot = NGUITools.FindInParents<UIRoot>(this.gameObject);
 - mRoot.scalingStyle = UIRoot.Scaling.FixedSize;
 - this.Update();
 - mStarted = true;
 - }
 - void ScreenSizeChanged()
 - {
 - if (mStarted && runOnlyOnce) {
 - this.Update();
 - }
 - }
 - void Update()
 - {
 - float defaultAspectRatio = aspectRatioWidth * 1f / aspectRatioHeight;
 - float currentAspectRatio = Screen.width * 1f / Screen.height;
 - if (defaultAspectRatio > currentAspectRatio) {
 - int horizontalManualHeight = Mathf.FloorToInt(aspectRatioWidth / currentAspectRatio);
 - mRoot.manualHeight = horizontalManualHeight;
 - } else {
 - mRoot.manualHeight = aspectRatioHeight;
 - }
 - if (runOnlyOnce && Application.isPlaying) {
 - this.enabled = false;
 - }
 - }
 - }
 
NGUI屏幕适配技巧
        
                  
                  
                  
                  
                            
本文介绍了一种使用NGUI进行屏幕适配的方法,避免了UIStretch带来的比例失真问题。通过调整UIRoot的ManualHeight参数,实现了不同分辨率下的良好显示效果。
          
      
          
                
                
                
                
              
                
                
                
                
                
              
                
                
              
            
                  
					2819
					
被折叠的  条评论
		 为什么被折叠?
		 
		 
		
    
  
    
  
            


            