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

时间: 2024-08-08 00:10:15

Unity3D去掉全屏时的屏幕黑边的相关文章

audio与video控件/标签的隐藏,iso/Android下自动全屏播放,短暂黑屏问题

(一)audio音频标签 <audio src="xxx.mp3"></audio> (二)video视频标签 <video src="xxx.mp4"></video> (三)使用video代替audio (1) 有时候audio标签被屏蔽,不能被浏览器解释通过,可以选择使用video来代替: <video src="xxx.mp3"></video> (2) 若想要将音乐

video 全屏时 隐藏controls

1. 参考:“http://www.cnblogs.com/kite-Runner/p/4254709.html” 指定全屏时的css风格: video::-webkit-media-controls { display:none !important; }

div设置全屏(铺满屏幕)

1.如果要以百分比设置元素(div)的尺寸,必要以父元素的尺寸作为参考,如果父元素没有设置尺寸,那么子元素(div)尺寸自然不会生效.2.所以如果设置div的高度为100%,那么他的参考元素就是是body,那么如何设置body的尺寸呢?3.在怪异模式下,body可以作为根元素,设置它的高度为100%的时候(不考虑外边距),body的高度取是浏览器的高度.4.在标准模式下,html元素才是根节点,div的父元素是body,body的父元素是html,然后html设置为100%,取得是浏览器的高度,

Unity3D在Windows的全屏和跨屏(双屏)方案

方案1 unity中2个摄像机场景显示在两个显示器屏幕上(一个窗口跨屏) 1.设置场景中的两个摄像机 摄像机1 摄像机2 2.设置发布的平台及分辨率 3.全屏运行游戏,没有标题栏还可以通过-popupwindow 例如: G:\untiy3d_workspace\Demos>lol_demo_0515 -popupwindow 方案2 http://blog.csdn.net/a117653909/article/details/47101743 环境:Win7 64bit, Unity3D 4

Vim在图形环境下全屏产生黑边

在终端中运行Vim或运行GVim都会遇到这个问题,当窗口全屏时,左右和底部可能会出现边框,这个边框在终端中的Vim表现为Terminal的背景颜色.下图为SpaceVim+Neovim+Terminal的全屏效果 原因 Terminal中运行的全屏应用受限于屏幕显示多少行多少列都是固定的.正如在普通窗口显示终端的情况下,当调整窗口高度时,终端只能调整为行高的整数倍.水平方向也是,宽度只能为字符宽度的整数倍.而这个字符宽度和高度受限于字体,字体大小,屏幕分辨率.当屏幕宽度高度不能成为字符宽度高度的

vitamio videoView 用隐藏除videoview的控件,并旋转屏幕方向实现的全屏功能,出现的画面不能填充满videoview(画面不完整)

使用vitamio 封装的播放器 当切换到全屏模式,有时候会出现播放的画面不是全屏的情况, 全屏时,画面只占左半部分并出现拉伸效果,还显示不全,等等其他情况 阅读分析源代码发现是getHolder().setFixedSize(mSurfaceWidth, mSurfaceHeight); 的2个参数没有改变导致该方法调用没起作用 解决办法在setVideoLayout 里面重新调用getHolder().setFixedSize(this.getWidth(), this.getHeight(

Fullscreen API 全屏显示网页

第一次看到应用 Fullscreen API 全屏显示网页,是 FaceBook 中的照片放大.作为一个比较新的 API,目前只有 Safari.Chrome 和 FireFox 三种浏览器支持该特性.因为尚未发布正式版的标准,所以必须使用浏览器特定的方法,也就是应用添加前缀(webit/moz)的方法. 这个 API 不仅能够使整个页面全屏显示,也可以使页面中的某个元素全屏显示.它的设计初衷是为了全屏显示 HTML5 视频和游戏,以便更全面的替代 flash 功能.尽管还有很多有待完善的地方,

Android编程实现WebView全屏播放的方法

这篇文章主要介绍了Android编程实现WebView全屏播放的方法,结合实例形式较为详细的分析了Android实现WebView全屏播放的布局与功能相关技巧,需要的朋友可以参考下! 本文实例讲述了Android编程实现WebView全屏播放的方法.分享给大家供大家参考,具体如下: 最近因为项目要用webview加载html5的视频,开始不能全屏播,做了很久才做出来!那按我的理解说下怎么实现全屏吧. 首先写布局文件activity_main.xml: <LinearLayout xmlns:an

webview加载网页与全屏播放视频?

上篇我们大致了解了webview的一些属性,以及重要的方法.这篇我们就要一些案列来说明,一般webview最广泛的作用就是,加载一个html的网页(实现与js交互),,webview加载网页网页当中含有视频,webview文件下载等等. 首先我们来了解下webview是如何加载网页的?首先我们看下网页在家的效果? 代码也是比较简单 1 package cn.xiao.webviewplayvideo; 2 import android.app.Activity; 3 import android