Unity2D中摄像机镜头的尺寸决定了我们实际看到多少

Unity2D中摄像机镜头的尺寸决定了我们实际看到多少

---------------------------------------逐渐变好的分割线---- ------------------------------------------------- 好了,讲完了上面的事情我们就知道了为什么我们的游戏在不同屏幕分辨率的设备上会显示不同。 不同的屏幕分辨率和相同的相机orthographicSize值会产生不同的相机尺寸,不同的相机尺寸会导致实际显示的游戏内容存在差异。 接下来我提出两个概念,方便后续解释: 1、游戏有效内容是指游戏中必须完整显示在屏幕上的内容; 2、游戏实际内容是指所有游戏内容,包括有效内容。 主要为了适应多分辨率或其他不重要目的而添加的内容和内容。 我们的开发一般选择以固定的设计分辨率进行,比如常用的iOS竖屏游戏设计分辨率为640*960。 我们就以此设计方案为例。 通常,设计分辨率大小就是我们游戏的有效内容的大小。 使用此分辨率,我们将相机的 orthographicSize 值设置为 4.8。 假设我们不做任何多分辨率适配处理,这样我们游戏的有效内容区域和实际内容区域大小是一样的,都是6.4*9.6(已经做了像素到单位的转换,下同),让这个游戏运行一下,看看在iPhone 5设备上(即屏幕为640*1136)会发生什么。

为了更好的解释,我们首先设置变量: 游戏的有效内容尺寸为 gameValidContentSize 游戏的实际内容尺寸为 gameContentSize 摄像头尺寸为cameraSize 实际屏幕尺寸为 screenSize 屏幕长宽比为aspectRatio 然后开始计算:3 orthgraphicSize = 4.8 aspectRatio = 640/ 1136 = 9/16cameraSize.height = 相机orthgraphicSize * 2 = 4.8 * 2 = 9.6cameraSize.width =cameraSize.height *aspectRatio = 9.6 * 9 /16 = 5.4 根据计算,我们得到实际的摄像头宽度为5.4,而游戏的有效内容宽度为6.4,并且摄像头宽度小于游戏的有效内容宽度,即cameraSize.width。 第一张图是在640*960设备上运行时的效果,一切正常。 第二张图是在640*1136设备上运行的效果。 可以看到游戏内容被明显删减,右上角的按钮几乎消失了。 如何解决这个问题呢? 最直接的想法就是,如果我们的游戏是在640*1136屏幕的设备上,摄像头宽度保持6.4,那么肯定不会被裁剪。

为了做到这一点,我们必须在运行时调整相机的 orthographicSize 值。 方法很简单,我们套用上面提到的公式:aspectRatio = 9/16 4 为了让cameraSize.width = 6.4,我们计算cameraSize.height =cameraSize.width/aspectRatio = 6.4 * 16 / 9(因为不能被分割,后面就不再继续写了)camera的orthographicSize=cameraSize.height/2约=5.69 我们再次运行游戏,动态修改camera的orthographicSize值为5.69。 可以看到:宽方面已完全显示,但顶部和底部都出现了。 “黑色边框”(这里是蓝色边框,哈哈)。 这是因为相机的高度已经大于游戏内容的高度,所以自然会出现没有内容的区域,即“黑边框”。 为了解决这个问题,我们需要给游戏添加上下边框。 一种方法是直接添加一张与黑框大小相同的图片,但是还有一种更简单的方法,直接放大游戏背景覆盖黑框~这个游戏比较简单。 我们将使用这个简单的方法。 我们将游戏背景放大到1.3倍unity 分辨率适配,如下图: 百度搜索“爱读书”,专业资讯、生活学习,尽在爱读书,您的网络图书馆! OK~现在我们的游戏看起来正常了,对iPhone 5的适配已经完成了。

注意到此时我们游戏的有效内容区域不再等于实际内容区域程序开发,我们放大了背景图片,这实际上给游戏添加了一个外边缘。 如图所示,白框内的区域为有效内容区域,白框外的区域为无效内容区域。 整体实际游戏内容区域大于有效内容区域。 ----------------------------------------------------最终结论的分割线--- --------------------------------------------------------- 基于以上解决分辨率问题的过程中,我们可以得到 原来,实际的分辨率适配问题与三个尺寸有关:相机尺寸、游戏内容尺寸(包括有效内容尺寸和无效内容尺寸)和实际屏幕尺寸。 为了能够显示我们需要的有效内容而不显示黑边,我们必须保证:摄像头的尺寸必须小于等于游戏实际内容尺寸,并且必须大于等于游戏的有效内容大小。 如下图所示,蓝色线框代表相机的尺寸。 只要保证蓝框在白框之外,就可以在画面内正确显示游戏内容。 只要我们能够保证以上几点,我们的游戏就可以处理几乎所有的屏幕分辨率。 按照这个方案,归根结底,解决屏幕分辨率适配问题,实际上就是解决如何将游戏摄像头的尺寸限制在给定范围内的问题。

总结一下,步骤是:首先需要确定游戏的有效内容区域和实际内容区域; 然后,当游戏开始时unity 分辨率适配,根据实际屏幕宽高比将相机尺寸调整为适合您游戏的尺寸。 ----------------------------------------------------最后的分割线----- - ------------------------------------------------ 最近写了很多小游戏,可以使用此解决方案可以一劳永逸地解决它们。 解决了多分辨率适配问题,特别是Android设备适配问题。 这种方法的优点是只要懂了就很容易操作。 另一方面音乐音效,它与缩放游戏内容不同。 这种方法保证了游戏内容的真实性。 当然,也可能有缺点。 我暂时能想到的是,对于一些依赖相机进行效果或者操作的游戏来说,改变相机的大小可能会产生一些影响。 目前这方面的经验比较少,希望这个解决方案能够在未来不断完善。 最后我写了一个简单的脚本来调整orthographicSize值,保证相机的宽度值不会小于游戏的有效内容宽度。 有效内容大小为6.4*9.6。 这个脚本只要挂在游戏的Camera上就可以生效。 1 使用UnityEngine; 2 使用System.Collections; 3 4 公共类 GameCamera : MonoBehaviour { 5 7 6 float devHeight = 9.6f; 7 浮点数devWidth = 6.4f; 8 9 // 使用它进行初始化 10 void Start () { 11 12 float screenHeight = Screen.height; 13 14 Debug.Log(\+screenHeight); 15 16 //this.GetComponent().orthgraphicSize = screenHeight / 200.0f; 17 18 浮点数 orthgraphicSize = this.GetComponent().orthgraphicSize; 19 20 浮动纵横比 = Screen.width * 1.0f / Screen.height; 21 22 浮动相机宽度=正交尺寸*2*纵横比; 23 24 Debug.Log(\+cameraWidth); 25 26 if (cameraWidth 28 orthgraphicSize = devWidth / (2 *spectRatio ); 29 Debug.Log (\ + orthgraphicSize); 30 this.GetComponent().orthgraphicSize = orthgraphicSize; 31 } 32 33 } 34 35 // 更新被调用一次每帧 36 void 8 Update () { 37 38 } 39 } 好了,先写这么多,有问题可以留言或者发短信给我,百度搜索“久爱读书”,专业资讯、生活学习,尽在嘉读书网,您的在线图书馆!9

文章来源:http://ishare.iask.com/f/jbkSV0xX44.html?utm_source=sgsc