Unity3D去掉全屏时的屏幕黑边
2024-10-13 08:59:14
给全屏后不在乎拉伸变形仍想让画面占满屏幕的朋友,网上搜了一上午,实在是没有相关的资料,只能自己琢磨了。
使用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变形了,但黑边没了)。
最新文章
- C# WebBrowser控件使用教程与技巧收集
- 修改Arduino串口缓冲区大小(转)
- 【BZOJ-1046】上升序列 DP + 贪心
- TCP(传输控制协议)和三次握手和四次断开
- 破解Excel保护
- Java Web项目_部门内部留言板
- R语言---热图的制作
- linux du 与 df 命令
- 通过URL推送POST数据
- Oracle常用函数:DateDiff() 返回两个日期之间的时间间隔自定义函数
- InstallShield打包
- Codevs3278[NOIP2013]货车运输
- ansj人名识别
- Spring之AOP的注解配置
- JDK8-新特性-附demo
- spring @transactional 注解事务
- sql生成随机不重复字符串 可指定长度
- ASP.NET Core 1.0 中 EntityFramework 与 PostgreSQL 的使用
- pthread中errors.h的代码
- local variables referenced from a Lambda expression must be final or effectively final------理解