unity3d ngui 适配性价比最高的方案

原创 2015年07月08日 10:47:58

      对于网上各种适配方法,说明的有很多,但我认为大部分都是自己写一个demo啥的能行然后就说这种方案可以。但实际上这些方法到底怎么样,恐怕并不尽如人意。

      ngui的UIRoot自带缩放功能,假设你的游戏按照普遍的1280*720设计,那么所有以此比例的分辨率都将完美适配。

      那么如果比例不同呢,uiroot并没有做任何处理,那么就是当宽度太宽,那么你的游戏将会被截边,如果高度太高,那么你的ui将会不贴边。当然你会发现ngui还提供了一个叫做anchor的类,这个类的作用就是让你的位置能够相对保持不变。那么看似能够解决这个问题,然后很多人也都是写了下anchor的用法然后就说完美适配啦。。。。太年轻。

      ui的设计并没有如此简单,首先贴边的你可能认为很好设计,那么居中的呢?面板大小呢?假设面板大小也相对不变,那么就是面板时大时小,那么你怎么保证面板里面的东西也对应起来呢,那么只能是所有的控件全部都用anchor设计,我只能说如果你一开始就能这么做,那么恭喜你,虽然每一次工作量多了一些,但长期弄的话,这将是实现出最完美的ui适配。

      但遗憾的是,即便你拥有如此先见之明,一些不好的ui设计依然会导致问题,重叠问题。没错,如果你的ui设计没有足够的容错性,那么你可能发现在某些比例下UI之间会产生相互重叠的情况,然后你可能要一个个去矫正规避。所以我认为这个性价比真的不高。不过也有这么做的游戏,例如《不良人》。大家可以去看一下,对于不同的分辨率,它都能比较好的适配,很大程度上是ui设计比较合理,一个全屏大底板,控件间距尽量小等。

      如果你一开始没有做相关内容,那么你就会发现各种适配问题,那么有什么快速方法解决呢?

      那就是黑边。

      按照比例缩放,如果碰到边界就停止,也就是多余部分应该会以黑边显示。有些人可能会调整camre的aspect,不推荐,因为会拉伸,你会发现你的ui被拉长或压扁。眼尖的人马上就能看出来,然后会觉得很不舒服,所以黑边还是正确的做法。

      那么怎么快速的产生黑边呢,我尝试了各种可以黑边的方法,其中最快速最好用的就是camera.rect,这个是最完美的,其他或多或少有bug或者需要特殊处理。

      代码如下:

     public static float getTimes()
    {
        float screenHeight = Screen.height;
        float screenWidth = Screen.width;
        float tarW = screenHeight * 1280f / screenWidth;
        return tarW / 720f;
    }

这个是获得理论上的缩放比例。我是按照1280*720来设计游戏的。

public static void checkMainCamera()
    {
        float times = CameraUtil.getTimes();
        if(times < 1f)
        {
            float x = (1-times) / 2f;
            Camera.main.rect = new Rect(x, 0f, times, 1f);
        }
        else if(times > 1f)
        {
            float x = (1 - 1 / times) / 2f;
            Camera.main.rect = new Rect(0f, x, 1f, 1 / times);
        }
    }

这个就是调整函数,当缩放比例<1,说明宽度太长,>1说明高度太高。

以上是调整3d摄像机的,那么ui摄像机的调整建议放在UIRoot中,这样就不用找各种地方了。

protected virtual void Awake () {
        mTrans = transform;
        if (Application.isPlaying)
        {
            Camera c = GetComponentInChildren<Camera> ();
            c.backgroundColor = Color.black;
            float times = CameraUtil.getTimes ();
            if(times < 1)
            {
                float x = (1 - times) / 2f;
                c.rect = new Rect(x, 0f, times, 1f);
            }
            else if(times > 1)
            {
                float x = (1 - 1 / times) / 2f;
                c.rect = new Rect(0f, x, 1f, 1 / times);
            }
        }
    }

修改UIroot的awake函数。好了,perfect。

unity3d iphoneX (去刘海)

unity3d iphoneX ,unity3d 适配 iphoneX 去刘海
  • nicepainkiller
  • nicepainkiller
  • 2017年12月28日 20:39
  • 489

iPhoneX 适配

Xib布局 Xib的绝对布局并不灵活,如果想要通过特有因素更改View的Frame则需要通过属性索引来实现。所以这里只针对Xib的AutoLayout来做讲解 首先XCode9的Xib为我们提供了S...
  • YLGWHYH
  • YLGWHYH
  • 2015年07月23日 10:29
  • 803

Unity3d + UGUI 的多分辨率适配

原文地址:http://blog.csdn.net/dingkun520wy/article/details/49471789 1、Canvas的属性配置 2、Canvas...
  • ax1274669874
  • ax1274669874
  • 2016年12月09日 15:16
  • 1334

unity3d iPhone X 适屏代码 屏幕适应方案

添加获取ios手机型号方法#import + (NSString*)getDeviceVersion { struct utsname systemInfo; uname(&syst...
  • qqo_aa
  • qqo_aa
  • 2017年11月09日 11:33
  • 4223

全球开发者各出奇招:我们想这样适配iPhone X

(原标题:面对iPhone X刘海现实,看看全世界的开发者怎么适配)原创curator北京时间9月12日凌晨,苹果在乔布斯剧院发布了iPhone X,主打全面屏的iPhone X取消了Touch ID...
  • fzhlee
  • fzhlee
  • 2017年09月20日 10:04
  • 3489

iPhoneX 适配

iPhone X 的到来,惊艳的是果粉,苦逼的是程序猿。今天升级到Xcode9.0,运行项目,所谓的全屏 iPhone X,but 页面好像也没有全屏,于是根据之前的适配经验,总算初步解决了这个问题,...
  • zhyxblog
  • zhyxblog
  • 2017年11月05日 10:43
  • 974

Unity3D GameCenter 排行榜, 成就实现

Unity3D内部已经集成了对 GameCenter的支持 在 UnityEngine.SocialPlatforms 命名空间下,基本已经满足目前需求  http://wiki.ceeger.c...
  • nicepainkiller
  • nicepainkiller
  • 2016年03月31日 15:05
  • 4472

unity3d 屏幕适配 iPhone X 解决方案

添加获取手机型号方法#import + (NSString*)getDeviceVersion { struct utsname systemInfo; uname(&systemI...
  • qqo_aa
  • qqo_aa
  • 2017年11月09日 14:17
  • 2573

unity3d 优化 高中低端机 机型分类

unity 开发移动端游戏众多, 此文章为优化考虑, 对不同的手机分类为高中低端, 分类标准如下Android 需要综合架构(这问题自己想)、核心数(代码请在blog里找)、主频(代码请在bl...
  • qqo_aa
  • qqo_aa
  • 2017年11月14日 17:39
  • 234

unity 使用Ngui 屏幕适配问题

原文地址:http://blog.csdn.net/onerain88/article/details/11713299/ 一、当下移动设备的主流分辨率(数据来自“腾讯分析移动设备屏幕分辨率...
  • oSKyTonight
  • oSKyTonight
  • 2015年05月28日 20:26
  • 6788
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:unity3d ngui 适配性价比最高的方案
举报原因:
原因补充:

(最多只允许输入30个字)