zoukankan      html  css  js  c++  java
  • 【NGUI】屏幕自适应(不用UIStretch,用UIRoot)---------------good

    原地址:http://blog.csdn.net/lzhq1982/article/details/18814023

    这篇文章是转载的,之前用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+版本的,如果报错请删除即可

    [csharp] view plaincopy
     
     
    1. using UnityEngine;  
    2.   
    3. [ExecuteInEditMode]    
    4. [RequireComponent(typeof(UIRoot))]  
    5. public class SZUIRootScale : MonoBehaviour  
    6. {  
    7.     public int aspectRatioHeight;  
    8.     public int aspectRatioWidth;  
    9.     public bool runOnlyOnce = false;  
    10.     private UIRoot mRoot;  
    11.     private bool mStarted = false;  
    12.   
    13.     void Awake()  
    14.     {  
    15.         UICamera.onScreenResize += ScreenSizeChanged;  
    16.     }  
    17.   
    18.     void OnDestroy()  
    19.     {  
    20.         UICamera.onScreenResize -= ScreenSizeChanged;  
    21.     }  
    22.   
    23.     void Start()  
    24.     {  
    25.         mRoot = NGUITools.FindInParents<UIRoot>(this.gameObject);  
    26.           
    27.         mRoot.scalingStyle = UIRoot.Scaling.FixedSize;  
    28.           
    29.         this.Update();  
    30.         mStarted = true;  
    31.     }  
    32.   
    33.     void ScreenSizeChanged()  
    34.     {   
    35.         if (mStarted && runOnlyOnce) {  
    36.             this.Update();  
    37.         }   
    38.     }  
    39.        
    40.     void Update()  
    41.     {  
    42.         float defaultAspectRatio = aspectRatioWidth * 1f / aspectRatioHeight;  
    43.         float currentAspectRatio = Screen.width * 1f / Screen.height;  
    44.   
    45.         if (defaultAspectRatio > currentAspectRatio) {  
    46.             int horizontalManualHeight = Mathf.FloorToInt(aspectRatioWidth / currentAspectRatio);  
    47.             mRoot.manualHeight = horizontalManualHeight;  
    48.         } else {  
    49.             mRoot.manualHeight = aspectRatioHeight;  
    50.         }  
    51.   
    52.         if (runOnlyOnce && Application.isPlaying) {  
    53.             this.enabled = false;  
    54.         }  
    55.     }  
    56. }  
  • 相关阅读:
    txt文本处理---行未添加逗号
    wav转txt格式的代码实现(c,python)
    程序员的健康--预防
    程序员的健康--病因
    朴素贝叶斯算法简介及python代码实现分析
    hdf 5文件格式及python中利用h5py模块读写h5文件
    C 语言restrict 关键字的概念及使用例子
    一个程序员卑微的目标
    【ES】学习4-结构化搜索
    【python】正则表达式中的转义问题
  • 原文地址:https://www.cnblogs.com/123ing/p/3903912.html
Copyright © 2011-2022 走看看