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

使用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变形了,但黑边没了)。

最新文章

  1. C# WebBrowser控件使用教程与技巧收集
  2. 修改Arduino串口缓冲区大小(转)
  3. 【BZOJ-1046】上升序列 DP + 贪心
  4. TCP(传输控制协议)和三次握手和四次断开
  5. 破解Excel保护
  6. Java Web项目_部门内部留言板
  7. R语言---热图的制作
  8. linux du 与 df 命令
  9. 通过URL推送POST数据
  10. Oracle常用函数:DateDiff() 返回两个日期之间的时间间隔自定义函数
  11. InstallShield打包
  12. Codevs3278[NOIP2013]货车运输
  13. ansj人名识别
  14. Spring之AOP的注解配置
  15. JDK8-新特性-附demo
  16. spring @transactional 注解事务
  17. sql生成随机不重复字符串 可指定长度
  18. ASP.NET Core 1.0 中 EntityFramework 与 PostgreSQL 的使用
  19. pthread中errors.h的代码
  20. local variables referenced from a Lambda expression must be final or effectively final------理解

热门文章

  1. php protected封装
  2. [Linux技巧]固定Vmware下CentOS的IP
  3. js中json对象的深拷贝
  4. 常用Sql语句书写
  5. C#读写xml文件的常用方法
  6. Spring MVC+Spring +Hibernate配置事务,但是事务不起作用
  7. 关于collapsed margin(外边距合并)
  8. mfc 在VC的两个对话框类中传递参数的三种方法
  9. IE6兼容透明JS
  10. Setup network on centos 7