博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity3D去掉全屏时的屏幕黑边
阅读量:6224 次
发布时间:2019-06-21

本文共 1328 字,大约阅读时间需要 4 分钟。

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

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

下面是我的测试环境:

Unity3D 5.3.4

Win 10 64bit

 

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

开发中使用的分辨率是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变形了,但黑边没了)。

 

转载地址:http://rdyna.baihongyu.com/

你可能感兴趣的文章
Unable to connect to any of the specified MySQL hosts.
查看>>
Android屏幕尺寸适配注意事项
查看>>
JAVA代码中加了Try...Catch的执行顺序
查看>>
三个c#入门小程序
查看>>
docker中使用systemd
查看>>
[模拟电路] 1、模拟调制、解调电路原理
查看>>
Android Nine Patch图片及按钮背景
查看>>
在.NET中调用Oracle9i存储过程经验总结
查看>>
Eclipse崩溃后无法启动的问题解决
查看>>
Android Studio git ignore
查看>>
springmvc
查看>>
22.2. 用户认证
查看>>
1.7. User interfaces
查看>>
阿里Druid数据连接池在SSM框架中的配置使用
查看>>
基于Metronic的Bootstrap开发框架经验总结(17)-- 使用 summernote插件实现HTML文档的编辑和图片插入操作...
查看>>
Linux虚拟主机通过程序实现二级域名绑定到子目录
查看>>
7.12. cvs diff
查看>>
Android酷炫实用的开源框架(UI框架)
查看>>
Winform开发框架之对话框样式同化
查看>>
一脸懵逼学习Linux的Shell编程
查看>>