Unity3D去掉全屏时的屏幕黑边

给全屏后不在意拉伸变形仍想让画面占满屏幕的朋友,网上搜了一上午,实在是没有相关的资料,只能本身琢磨了。数组

使用Canvas Scaler在全屏后Unity虽然会为咱们自动拉伸UI,但拉伸后仍然保持咱们在Unity中设置的高宽比。屏幕中的黑边须要经过代码来对UI的内容进行拉伸填充。函数

下面是个人测试环境:测试

Unity3D 5.3.4orm

Win 10 64bitblog

 

测试中我Unity设置成了自动根据屏幕宽度进行拉伸,这样须要调整UI的高度来填充画面上下出现的黑边了。开发

开发中使用的分辨率是16:9的,但实际发布运行后肯能会在5:3,16:10甚至是2:1的显示器上运行,这样在根据上面的设置,unity会自动横向拉伸,但在画面的上下会出现黑边。数学

把下面的代码挂在Camera或者Canvas上的脚本的Start函数里,UI便会自动上下拉伸把画面上下部分的黑边给填充掉。it

        StandarRatio = new Vector3[RechangeForms.Length];
        float referenceRatio = 16f/9f;
        float currentRatio =( (float)Screen.width /  (float)Screen.height);
        for (int i = 0; i < RechangeForms.Length; i++)
        {
            StandarRatio[i] = RechangeForms[i].transform.localScale;
            float yFactor = StandarRatio[i].y * (referenceRatio / currentRatio);
            float posYFactor = RechangeForms[i].transform.position.y * (referenceRatio / currentRatio);
            RechangeForms[i].transform.DOScaleY(yFactor, 0.0f);
            RechangeForms[i].transform.DOMoveY(posYFactor, 0.0f);
        }    

StandarRatio是一个Vector3的数组,用来存储元素在拉伸前的Scale的值,RechangeForms是须要被拉伸的元素的集合,是个gameobject数组。io

代码是经过调整UI元素的Scale中Y的值来实现填充黑边的。form

使用到的数学公式:新的YScale=原始YScale*(参考分辨率的比率/实际分辨率的比率)。

这里有个额外的问题,就是在调整UI元素的Scale的Y值后,该元素的中心点左边也改变了,因此也须要作相应的调整。公式同上。(此处也多是因为我自身项目的缘由引发的)

 

完成上述步骤后,能够在Unity的预览窗口中切换成各类比利的显示器进行测试,能够看到原来上下出现的黑边已经被拉伸事后的UI元素给填充上了(虽然UI变形了,但黑边没了)。

相关文章
相关标签/搜索