Unity3D去掉全屏时的屏幕黑边
给全屏后不在乎拉伸变形仍想让画面占满屏幕的朋友,网上搜了一上午,实在是没有相关的资料,只能自己琢磨了。
使用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变形了,但黑边没了)。
Unity3D去掉全屏时的屏幕黑边的更多相关文章
- audio与video控件/标签的隐藏,iso/Android下自动全屏播放,短暂黑屏问题
(一)audio音频标签 <audio src="xxx.mp3"></audio> (二)video视频标签 <video src="xx ...
- VMware全屏时, 隐藏上方工具栏横条
VMware全屏时, 隐藏上方横条 菜单栏打开 编辑 选择 首选项 找到 显示 取消勾选 在全屏时取消固定时显示工具栏边缘
- Android开发 - 解决DialogFragment在全屏时View被状态栏遮住的问题
我的上一篇文章:设置DialogFragment全屏显示 可以设置对话框的内容全屏显示,但是存在在某些机型上顶部的View被状态栏遮住的问题.经过测试,发现了一种解决办法,在DialogFragmen ...
- 绘制bitmap 全屏 安卓获取 屏幕大小
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 绘制bitmap 全屏 Rectf rectF = new RectF(0, 0, w, ...
- uwp,c#,全屏播放保持屏幕响应
在开发视频app的时候,全屏播放一段时间内没有电脑操作,电脑会自动进入睡眠模式,这时就要多写些代码来保持响应了. (这里使用的是MediaElement播放控件,MediaElement需要手动添加代 ...
- 换了XCode版本之后,iOS应用启动时不占满全屏,上下有黑边
原因是没有Retina4对应的启动图片,解决方法很简单,就是把Retina4对应的图片给补上就只可以了
- videojs实现双击视频全屏播放、播放器全屏时视频未全屏
https://blog.csdn.net/staritstarit/article/details/78451963 暂停时只能使用左下角的暂停按钮,点击视频时不再响应 使用width和height ...
- Unity3D在Windows的全屏和跨屏(双屏)方案
方案1 unity中2个摄像机场景显示在两个显示器屏幕上(一个窗口跨屏) 1.设置场景中的两个摄像机 摄像机1 摄像机2 2.设置发布的平台及分辨率 3.全屏运行游戏,没有标题栏还可以通过-popup ...
- Vim在图形环境下全屏产生黑边
在终端中运行Vim或运行GVim都会遇到这个问题,当窗口全屏时,左右和底部可能会出现边框,这个边框在终端中的Vim表现为Terminal的背景颜色.下图为SpaceVim+Neovim+Termina ...
随机推荐
- 使用jQuery.form插件,实现完美的表单异步提交
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs ...
- 1334: [Baltic2008]Elect
Description N个政党要组成一个联合内阁,每个党都有自己的席位数. 现在希望你找出一种方案,你选中的党的席位数要大于总数的一半,并且联合内阁的席位数越多越好. 对于一个联合内阁,如果某个政党 ...
- 融云官方cordova示例使用指南
最近公司要在App里加IM功能,用融云IM.于是下载其cordova版示例:https://github.com/rongcloud/cordova-plugin-rongcloud-im-demo ...
- [原] XAF 如何非常容易禁止清除一个下拉字段的值?
- linux tcp协议定时器
1 连接建立定时器:75秒 2 保活定时器:2小时又10分钟 3 重传定时器:根据RTT计算 4 2MSL定时器:最大报文段存活时间 5 持续定时器
- iOS开发证书"此证书的签发者无效"解决方法
前言 哎,每次过完节都要有一个坑给自己跳.逃不过这个魔爪.这不,一过完春节,回来就发现公司证书出现"此证书的签发者无效". 问题原因 经过一番查找,苹果官方给出了回答. Thank ...
- [ASE][Daily Scrum]11.19
Sprint2已经开始了~今天晚上有课所以今天的plan比较少~ View Shilin Liu 能够看见其他玩家发射出来的子弹 能够看见其他玩家的子弹消失 Client Jiafan ...
- 《Linux内核设计与实现》读书笔记(十四)- 块I/O层
最近太忙,居然过了2个月才更新第十四章.... 主要内容: 块设备简介 内核访问块设备的方法 内核I/O调度程序 1. 块设备简介 I/O设备主要有2类: 字符设备:只能顺序读写设备中的内容,比如 串 ...
- [openwrt 项目开发笔记]: 传送门
“Openwrt 项目开发笔记”系列传送门: [Openwrt 项目开发笔记]:Openwrt平台搭建(一) (2014-07-11 00:11) [Openwrt 项目开发笔记]:Openwrt平台 ...
- 使用FEST-Swing测试GUI
在Java中最常用的单元测试工具要算JUnit了.FEST-Swing是一个能够与JUnit集成的GUI测试框架.使用FEST-Swing可以更方便的对Swing进行一系列的测试.下面就说 ...