Unity3D去掉全屏时的屏幕黑边

摘要:
使用CanvasScaler在全屏后Unity虽然会为我们自动拉伸UI,但拉伸后仍然保持我们在Unity中设置的高宽比。下面是我的测试环境:Unity3D5.3.4Win1064bit测试中我Unity设置成了自动根据屏幕宽度进行拉伸,这样需要调整UI的高度来填充画面上下出现的黑边了。代码是通过调整UI元素的Scale中Y的值来实现填充黑边的。这里有个额外的问题,就是在调整UI元素的Scale的Y值后,该元素的中心点左边也改变了,所以也需要做相应的调整。

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

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

下面是我的测试环境:

Unity3D 5.3.4

Win 10 64bit

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

Unity3D去掉全屏时的屏幕黑边第1张

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

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

        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数组。

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

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

这里有个额外的问题,就是在调整UI元素的Scale的Y值后,该元素的中心点左边也改变了,所以也需要做相应的调整。公式同上。(此处也可能是由于我自身项目的原因引起的)

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

免责声明:文章转载自《Unity3D去掉全屏时的屏幕黑边》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇linux系统中安装R包oracle中imp命令具体解释下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【Unity Shader学习笔记】(一)在表面着色器中控制顶点变换

通常境况下,我们可以方便地使用表面着色器对材质进行简单的金属光泽、平滑度等设置。但是如果要想对顶点进行控制,就需要使用顶点片段着色器。然而,在顶点片段着色器中,连最基本的漫反射、高光等都需要手动去写,显然比较麻烦。因此,如果能在表面着色器中进行顶点的控制就好了。 当然,这是可以做到的! 首先,在Unity中生成一个基本的表面着色器,在Project选项卡...

External Tools

Preferences偏好设置-External Tools External Tools:     External Script Editor:外部脚本编辑器,通过此项可以切换您所擅用的脚本的编辑器     Editor Script Editor Args:     MonoDevelop Solution Properties:unity...

ios 图片拉伸不变形的方法

如果一个椭圆图片,原图大小为30*30,而我们让它显示100*30,那么这个图片就会被拉伸,而且效果很难看。用下边的方法可以创建一个局部不被拉伸的图片。 UIImage * buttonBg = [[UIImage imageNamed:@"btn_normal.png"]stretchableImageWithLeftCapWidth:10topCapH...

【Unity】经验汇总

移动平台使用顶点动画或UV动画的问题 5.4.2 在开发中,游戏打包到移动平台常出现的两种问题: 1.顶点动画:卡顿,动画变得生硬。 2.UV动画:贴图马赛克,模糊。 在实际问题解决中发现,导致这种问题的一般都是精度问题,移动平台开发针对大量性能不一的GPU。各种无法预料的问题。 很多效果在PC上的模拟器正常,打包到安卓还有ios就会出现各种奇怪的问题。...

Unity3D脚本中文系列教程(七)

http://dong2008hong.blog.163.com/blog/static/4696882720140311445677/?suggestedreading&wumii Unity3D脚本中文系列教程(六) 类方法◆ static function BeginGroup(GroupName : string) : void ◆ sta...

Unity输入法相关(IME)

  在UI上的InputField中, 中文输入法的备选框不会跟随在光标旁边, 造成输入不方便.   看到有一个相似的, 可是是WebGL的 : https://blog.csdn.net/Rowley123456/article/details/103726927/   它通过添加Html的Input控件的方式来修改备选框位置, 直接跟平台相关了, 不具...