首頁 資料庫 mysql教程 Unity2D多分辨率屏幕适配方案

Unity2D多分辨率屏幕适配方案

Jun 07, 2016 pm 03:10 PM
解析度 螢幕 方案 適配

此文将阐述一种简单有效的Unity2D多分辨率屏幕适配方案,该方案适用于基于原生开发的Unity2D游戏,即没有使用第三方2D插件,如Uni2D,2D toolkit等开发的游戏,NGUI插件不受这个方案影响,可以完美和此方案配合使用。 --------------------------------------

此文将阐述一种简单有效的Unity2D多分辨率屏幕适配方案,该方案适用于基于原生开发的Unity2D游戏,即没有使用第三方2D插件,如Uni2D,2D toolkit等开发的游戏,NGUI插件不受这个方案影响,可以完美和此方案配合使用。

---------------------------------------正式开始的分割线-----------------------------------------

先说明一些基本的概念:

1.屏幕的宽高比Aspect Ratio = 屏幕宽度/屏幕高度

2.Unity2D中摄像机镜头的尺寸决定了我们实际看到游戏内容的多少,在编辑器中我们可以通过调整摄像机Camera的orthographicSize属性值来调整摄像机的大小。如下图所示,当摄像机orthographicSize属性值等于当前屏幕高度单位的一半时,摄像机大小正好与屏幕大小相等。注意这里提到的是屏幕单位高度的一半,这个数值是经过像素到单位比即Pixels To Units换算的,Unity2D中这个比例的默认值是100,即100像素等于1单位。如果我们的游戏屏幕有640像素高,那么实际换算成单位高度则是6.4个单位,当我们摄像机的orthographicSize值是3.2时,摄像机大小刚好与屏幕大小相等。

Unity2D多分辨率屏幕适配方案

Unity2D多分辨率屏幕适配方案

(可以通过此选项调整每张图片的像素单位比)

看到这里你可能会发出疑问,Unity编辑器中只能直接调整摄像机的高度,那摄像机的宽度是如何确定的呢?答案就是我们最前面提到的屏幕宽高比。Unity会根据当前屏幕实际的宽高比和摄像机的orthographicSize值来计算出摄像机的宽度值,即:

摄像机实际宽度 = 摄像机orthographicSize * 2 * 屏幕宽高比

也即是

摄像机实际宽度 = 摄像机高度 * 屏幕宽高比

我举个例子说明一下,iPhone4的屏幕像素为640*960,宽高比为2:3,假设Pixels To Units值为100,那么如果设摄像机高度size值为4.8,那么摄像机实际宽度按照公式算出6.4,刚好就是屏幕的单位宽度。

---------------------------------------渐入佳境的分割线------------------------------------------

好了,讲了以上的东西我们就知道为何我们的游戏会在不同的屏幕分辨率的设备上有不同的显示了。

不同的屏幕分辨率,相同的摄像机orthographicSize值会产生不同的摄像机尺寸,不同的摄像机尺寸导致实际显示的游戏内容的不同。

接下来我再提出两个概念,为了方便后文的说明:

1.游戏有效内容,指游戏中一定需要完整显示在屏幕上的内容;

2.游戏实际内容,指全部的游戏内容,包括有效内容主要是为了适配多分辨率的或其他不重要的目的而增加的内容

我们的开发一般都会选择在一个固定的设计分辨率上进行,比如常用的iOS竖屏游戏设计分辨率640*960,我们就以这个设计分辨率为例。通常情况下,设计分辨率尺寸就是我们游戏有效内容的尺寸。

采用这个分辨率,我们将摄像机的orthographicSize值设为4.8。假设我们不做任何多分辨率的适配处理,使我们游戏的有效内容区域和实际内容区域尺寸相同,都为6.4*9.6(已经做过像素到单位的换算,下同),让这个游戏运行在一款iPhone5设备上(即屏幕是640*1136)时,我们来看看会发生什么情况。

为了更好的说明,我们先设变量:

Unity2D多分辨率屏幕适配方案

<span>游戏有效内容尺寸为gameValidContentSize<br><br>游戏实际内容尺寸为gameContentSize

摄像机尺寸为cameraSize

实际屏幕尺寸为screenSize

屏幕宽高比为aspectRatio</span>
登入後複製

Unity2D多分辨率屏幕适配方案

接着开始计算:

Unity2D多分辨率屏幕适配方案

<span>orthographicSize = 4.8

aspectRatio = 640/1136 = 9/16

cameraSize.height = 摄像机orthographicSize * 2 = 4.8 * 2 = 9.6

cameraSize.width = cameraSize.height * aspectRatio = 9.6 * 9 /16 = 5.4</span>
登入後複製

Unity2D多分辨率屏幕适配方案

根据计算,我们得到实际摄像机的宽度为5.4,而游戏有效内容宽度是6.4,摄像机宽度小于游戏有效内容宽度,即cameraSize.width 这时游戏内容被摄像机裁减!

以下以我做的一个小游戏为例子,我们可以更清楚的看到这个问题:

第一张是在640*960的设备上运行时的效果,一切正常。第二张是在640*1136的设备上运行的效果,可以看到游戏内容被剪得很明显,右上角的按钮都快没有了。

Unity2D多分辨率屏幕适配方案

Unity2D多分辨率屏幕适配方案

如何解决这个问题呢?最直接的想法是,如果我们的游戏在640*1136屏幕的设备上,摄像机宽度依然保持是6.4,那肯定就不会剪切了。为了做到这一点,我们必须在运行时来调整camera的orthographicSize值。方法很简单,还是套用上面讲到的公式:

Unity2D多分辨率屏幕适配方案

<span>aspectRatio = 9/16

为了使cameraSize.width = 6.4,我们计算

cameraSize.height = cameraSize.width/aspectRatio = 6.4 * 16 / 9 (因为除不尽,后面就不继续写了)

camera的orthographicSize = cameraSize.height / 2 约=5.69</span>
登入後複製

Unity2D多分辨率屏幕适配方案

我们再一次运行游戏,动态修改camera的orthographicSize值为5.69,可以看到:

Unity2D多分辨率屏幕适配方案

宽的方面是完全显示出来了,可是上下都出现了的“黑边”(这里是蓝边,呵呵)。这是因为摄像机的高度已经大于了游戏内容的高度,所以自然会出现没有内容的区域,即“黑边”。为了解决这个问题,我们就需要给游戏增加上下边,直接上和黑边同尺寸的图是一种方法,但是还有一种更简易的办法,直接将游戏背景放大一些,以盖住黑边!这个游戏比较简单,我们就用这个简易的方法,我们将游戏背景放大到1.3倍,如下图:

Unity2D多分辨率屏幕适配方案

OK!现在我们的游戏看起来已经很正常了,已经完成了iPhone5的适配。

注意到这个时候我们游戏的有效内容区域已经不等于实际内容区域了,我们放大了背景图片,实际上等于为游戏增加了一层外边缘。如图,在白框内部的就是有效内容区域,在白框外部的就是无效内容区域。整体实际游戏内容区域已经大于了有效内容区域。

 Unity2D多分辨率屏幕适配方案

-----------------------------------------最终结论的分割线------------------------------------------

根据以上解决分辨率问题的过程,我们可以得出,实际的分辨率适配问题与三个尺寸相关,他们分别是:摄像机尺寸,游戏内容尺寸(包括有效内容尺寸和无效内容尺寸)和实际屏幕尺寸。为了能够显示我们需要的有效内容,并且不显示黑边,我们必须要保证:

摄像机的尺寸既必须要小于或等于游戏实际内容尺寸,又必须要大于或等于游戏有效内容尺寸。如下图,蓝色的线框表示摄像机的尺寸,我们即只要保证蓝色框在白框外,在图内就能保证游戏内容的显示正确。

Unity2D多分辨率屏幕适配方案

只要能够确保以上这一点,那么我们的游戏就能够应对几乎所有的屏幕分辨率。

按照这种方案,说到底,解决屏幕分辨率适配的问题,其实就是解决如何让游戏摄像机尺寸限定在给定范围的问题。

总结起来,步骤就是:首先,需要确定游戏的有效内容区域和实际内容区域;然后,游戏启动时,根据实际的屏幕宽高比将你的摄像机尺寸调整到合适你游戏的大小即可。

-----------------------------------------最后的分割线------------------------------------------

最近写了很多小游戏,用这个方案一劳永逸地解决了多分辨率适配特别是Android设备适配的问题。这种方法的好处一方面是只要理解了,操作起来很简单,另外一方面不同于缩放游戏内容的方案,这种方法保证了游戏内容的原汁原味。当然,缺点可能也是有的,暂时能想到的可能是对于一些需要依赖摄像机做效果或者操作的游戏,改变摄像机的大小可能会造成一些影响。目前这方面经验还比较少,希望以后可以不断地完善这个方案。

最后上一下自己写的一段简单的调整orthographicSize值的脚本,用于保证camera的width值不会小于游戏有效内容宽度,有效内容尺寸为6.4*9.6。这个脚本只要附加在游戏的Camera上就可以生效。

Unity2D多分辨率屏幕适配方案

<span> 1</span> <span>using</span><span> UnityEngine;
</span><span> 2</span> <span>using</span><span> System.Collections;
</span><span> 3</span> 
<span> 4</span> <span>public</span> <span>class</span><span> GameCamera : MonoBehaviour {
</span><span> 5</span> 
<span> 6</span>     <span>float</span> devHeight = <span>9.6f</span><span>;
</span><span> 7</span>     <span>float</span> devWidth = <span>6.4f</span><span>;
</span><span> 8</span> 
<span> 9</span>     <span>//</span><span> Use this for initialization</span>
<span>10</span>     <span>void</span><span> Start () {
</span><span>11</span>     
<span>12</span>         <span>float</span> screenHeight =<span> Screen.height;
</span><span>13</span> 
<span>14</span>         Debug.Log (<span>"</span><span>screenHeight = </span><span>"</span> +<span> screenHeight);
</span><span>15</span> 
<span>16</span>         <span>//</span><span>this.GetComponent<camera>().orthographicSize = screenHeight / 200.0f;</camera></span>
<span>17</span> 
<span>18</span>         <span>float</span> orthographicSize = <span>this</span>.GetComponent<camera><span>().orthographicSize;
</span><span>19</span> 
<span>20</span>         <span>float</span> aspectRatio = Screen.width * <span>1.0f</span> /<span> Screen.height;
</span><span>21</span> 
<span>22</span>         <span>float</span> cameraWidth = orthographicSize * <span>2</span> *<span> aspectRatio;
</span><span>23</span> 
<span>24</span>         Debug.Log (<span>"</span><span>cameraWidth = </span><span>"</span> +<span> cameraWidth);
</span><span>25</span> 
<span>26</span>         <span>if</span> (cameraWidth  devWidth)
<span>27</span> <span>        {
</span><span>28</span>             orthographicSize = devWidth / (<span>2</span> *<span> aspectRatio);
</span><span>29</span>             Debug.Log (<span>"</span><span>new orthographicSize = </span><span>"</span> +<span> orthographicSize);
</span><span>30</span>             <span>this</span>.GetComponent<camera>().orthographicSize =<span> orthographicSize;
</span><span>31</span> <span>        }
</span><span>32</span> 
<span>33</span> <span>    }
</span><span>34</span>     
<span>35</span>     <span>//</span><span> Update is called once per frame</span>
<span>36</span>     <span>void</span><span> Update () {
</span><span>37</span>     
<span>38</span> <span>    }
</span><span>39</span> }</camera></camera>
登入後複製

Unity2D多分辨率屏幕适配方案

好了,就先写这么多吧,有问题的朋友可以留言或者发短信给我。


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

又一款驍龍 8Gen3 平板 ~ OPPOPad3 曝光 又一款驍龍 8Gen3 平板 ~ OPPOPad3 曝光 Jul 29, 2024 pm 04:26 PM

上個月,一加發布了首款搭載驍龍8Gen3的平板電腦:一加平板Pro,現據最新消息,這款平板的"換娃"版本OPPOPad3也即將發布。上圖為OPPOPad2據數位閒聊站透露:OPPOPad3外觀配置與一加平板Pro完全一致配色:金色、藍色(區別於一加的綠色和深灰)存儲版本:8/12/16GB+512GB發布日期:今年第四季(10-12月)同期新品:FindX8系列旗艦ColorOS15EncoX3作為補充:一加平板Pro主要配置:螢幕:12.1英寸,3200*2120分辨率,

iPhone螢幕截圖不起作用:如何修復 iPhone螢幕截圖不起作用:如何修復 May 03, 2024 pm 09:16 PM

螢幕截圖功能在您的iPhone上不起作用嗎?截圖非常簡單,因為您只需同時按住「提高音量」按鈕和「電源」按鈕即可抓取手機螢幕。但是,還有其他方法可以在設備上捕獲幀。修復1–使用輔助觸控使用輔助觸控功能截取螢幕截圖。步驟1–轉到您的手機設定。步驟2–接下來,點選以開啟「輔助功能」設定。步驟3–開啟「觸摸」設定。步驟4–接下來,開啟「輔助觸控」設定。步驟5–打開手機上的「輔助觸控」。步驟6–打開“自訂頂級選單”以存取它。步驟7–現在,您只需將這些功能中的任何一個連結到螢幕擷取即可。因此,點擊那裡的首

如何在iPhone中撤銷從主畫面中刪除 如何在iPhone中撤銷從主畫面中刪除 Apr 17, 2024 pm 07:37 PM

從主畫面中刪除了重要內容並試圖將其取回?您可以透過多種方式將應用程式圖示放回螢幕。我們已經討論了您可以遵循的所有方法,並將應用程式圖示放回主畫面如何在iPhone中撤消從主畫面中刪除正如我們之前提到的,有幾種方法可以在iPhone上恢復此變更。方法1–替換應用程式庫中的應用程式圖示您可以直接從應用程式庫將應用程式圖示放置在主畫面上。步驟1–橫向滑動以尋找應用程式庫中的所有應用程式。步驟2–找到您先前刪除的應用程式圖示。步驟3–只需將應用程式圖示從主庫拖曳到主畫面上的正確位置即可。這是將應用程式圖

6000 毫安矽負極電池!小米 15Pro 升級再曝料 6000 毫安矽負極電池!小米 15Pro 升級再曝料 Jul 24, 2024 pm 12:45 PM

7月23日消息,部落客數位閒聊站爆料稱,小米15Pro電池容量增大至6000mAh,支援90W有線閃充,這將是小米數位系列電池最大的Pro機型。先前數位閒聊站透露,小米15Pro的電池擁有超高能量密度,矽含量遠高於競品。矽基電池在2023年大規模試水後,第二代矽負極電池被認定為產業未來發展方向,今年將迎來直接競爭的高峰。 1.矽的理論克容量可達4200mAh/g,是石墨克容量的10倍以上(石墨的理論克容量372mAh/g)。對於負極而言,當鋰離子嵌入量達到最大時的容量為理論克容量,這意味著在相同重量下

螢幕錄製變黑:這是修復 螢幕錄製變黑:這是修復 May 03, 2024 pm 09:13 PM

您是否正在嘗試在手機螢幕上錄製某些內容,並且它正在變黑?通常,您可以從控制中心啟動螢幕錄製。在某些情況下,您無法在螢幕上錄製項目。我們已經提到了所有方案以及可以幫助您正常錄製螢幕的可能解決方案清單。螢幕錄製變黑的原因–如果您在iPhone螢幕上播放時嘗試錄製任何受DRM(數位版權管理)保護的內容,您將無法得到任何東西。輸出將是一個漆黑的螢幕。所有領先的OTT平台,如Netflix、Disney+、Hulu和Peacock,都有這個DRM,可以阻止任何螢幕錄製功能。 2.有幾個網站禁止使用螢幕捕獲

驚喜來襲!優派 LX700-4K 雷射家庭劇院官補 1700 元,還送 4K 電視盒! 驚喜來襲!優派 LX700-4K 雷射家庭劇院官補 1700 元,還送 4K 電視盒! Apr 25, 2024 pm 05:49 PM

你正在考慮購買一台具有戲院素質的投影機,同時可以兼顧大螢幕遊戲,優派LX700-4K非常適合你。它不僅亮度高,同時具有4K分辨率,並且支援XBOX認證。目前它有很大的優惠,官方補貼1700元,也贈送4K電視盒。點擊進入購買:https://item.jd.com/100069910253.html優派LX700-4K採用了最新的第三代雷射光源技術,有效降低對眼睛的傷害,讓你可以放心享受視覺盛宴,無需擔心眼睛受損。擁有3500ANSI流明的高亮度和影院級的4K分辨率,每個細節都清晰可見,讓你

春日裡的精緻光影藝術,哈趣 H2 性價比之選 春日裡的精緻光影藝術,哈趣 H2 性價比之選 Apr 17, 2024 pm 05:07 PM

隨著春天的到來,萬物復甦,一切都充滿了生命與活力。在這個美好的季節裡,如何為居家生活增添一抹別樣的色彩?哈趣H2投影儀,以其精緻的設計和超高的性價比,成為了這個春天裡不可或缺的一道亮麗風景。這款H2投影機小巧玲瓏卻不失時尚。無論是放在客廳的電視櫃上,或是臥室的床頭櫃旁,都能成為一道明亮的風景線。它的機身採用了奶白色的磨砂質地,這種設計不僅讓投影機的外觀更顯高級,同時也增加了觸感的舒適度。米色仿皮紋材質,更為整體外觀增添了一抹溫馨與雅緻。這種色彩與材質的搭配,既符合現代家居的美感趨勢,又能融入

輕鬆拿捏 4K 高畫質影像理解!這個多模態大模型自動分析網頁海報內容,打工人簡直不要太方便 輕鬆拿捏 4K 高畫質影像理解!這個多模態大模型自動分析網頁海報內容,打工人簡直不要太方便 Apr 23, 2024 am 08:04 AM

一個可以自動分析PDF、網頁、海報、Excel圖表內容的大模型,對於打工人來說簡直不要太方便。上海AILab,香港中文大學等研究機構提出的InternLM-XComposer2-4KHD(簡寫為IXC2-4KHD)模型讓這一切成為了現實。相較於其他多模態大模型不超過1500x1500的分辨率限制,該工作將多模態大模型的最大輸入影像提升到超過4K(3840x1600)分辨率,並支援任意長寬比和336像素~4K動態解析度變化。發布三天,模型就登頂HuggingFace視覺問答模型熱度排行榜第一。輕鬆拿捏

See all articles