데이터 베이스 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 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

또 다른 Snapdragon 8Gen3 태블릿 ~ OPPOPad3 노출 또 다른 Snapdragon 8Gen3 태블릿 ~ OPPOPad3 노출 Jul 29, 2024 pm 04:26 PM

지난달 OnePlus는 Snapdragon 8 Gen3이 탑재된 첫 번째 태블릿인 OnePlus Tablet Pro를 출시했습니다. 최신 뉴스에 따르면 이 태블릿의 "유아 교체" 버전인 OPPOPad3도 곧 출시될 예정입니다. 위 사진은 OPPOPad2를 보여줍니다. Digital Chat Station에 따르면 OPPOPad3의 모양과 구성은 OnePlus Tablet Pro와 완전히 동일합니다. 색상: 금색, 파란색(OnePlus의 녹색 및 어두운 회색과 다름) /12/16GB+512GB 출시일 : 올해 4분기(10~12월) 동기간 신제품 : 찾기

iPhone 스크린샷이 작동하지 않음: 해결 방법 iPhone 스크린샷이 작동하지 않음: 해결 방법 May 03, 2024 pm 09:16 PM

iPhone에서 스크린샷 기능이 작동하지 않나요? 스크린샷을 찍는 것은 매우 쉽습니다. 볼륨 높이기 버튼과 전원 버튼을 동시에 누르고 휴대폰 화면을 잡기만 하면 됩니다. 그러나 장치에서 프레임을 캡처하는 다른 방법이 있습니다. 수정 1 – 보조 터치 사용 보조 터치 기능을 사용하여 스크린샷을 찍습니다. 1단계 – 휴대폰 설정으로 이동합니다. 2단계 – 다음으로 탭하여 접근성 설정을 엽니다. 3단계 – 터치 설정을 엽니다. 4단계 – 다음으로 보조 터치 설정을 엽니다. 5단계 – 휴대폰에서 Assistive Touch를 켜세요. 6단계 – “상위 메뉴 사용자화”를 열어서 접근하세요. 7단계 – 이제 이러한 기능 중 하나를 화면 캡처에 연결하기만 하면 됩니다. 그러니 첫 번째를 클릭하세요.

iPhone 홈 화면에서 삭제를 취소하는 방법 iPhone 홈 화면에서 삭제를 취소하는 방법 Apr 17, 2024 pm 07:37 PM

홈 화면에서 중요한 항목을 삭제하고 다시 복구하려고 하시나요? 다양한 방법으로 앱 아이콘을 화면에 다시 표시할 수 있습니다. 우리는 당신이 따라갈 수 있는 모든 방법과 홈 화면에 앱 아이콘을 다시 넣을 수 있는 방법에 대해 논의했습니다. 방법 1 - 앱 라이브러리에서 앱 아이콘 바꾸기 앱 라이브러리에서 직접 홈 화면에 앱 아이콘을 배치할 수 있습니다. 1단계 – 옆으로 스와이프하여 앱 라이브러리의 모든 앱을 찾습니다. 2단계 – 이전에 삭제한 앱 아이콘을 찾습니다. 3단계 – 메인 라이브러리의 앱 아이콘을 홈 화면의 올바른 위치로 드래그하기만 하면 됩니다. 이것은 응용 다이어그램입니다

6000mAh 실리콘 음극 배터리! Xiaomi 15Pro 업그레이드가 다시 유출되었습니다. 6000mAh 실리콘 음극 배터리! Xiaomi 15Pro 업그레이드가 다시 유출되었습니다. Jul 24, 2024 pm 12:45 PM

7월 23일 뉴스에 따르면 블로거 Digital Chat Station은 Xiaomi 15 Pro의 배터리 용량이 6000mAh로 증가하고 90W 유선 플래시 충전을 지원한다는 소식을 전했습니다. 이는 Xiaomi 디지털 시리즈 중 가장 큰 배터리를 탑재한 Pro 모델이 될 것입니다. Digital Chat Station은 이전에 Xiaomi 15Pro의 배터리가 초고에너지 밀도를 가지며 실리콘 함량이 경쟁 제품보다 훨씬 높다고 밝혔습니다. 2023년 실리콘 기반 배터리가 대규모로 테스트된 후, 2세대 실리콘 양극 배터리가 업계의 미래 발전 방향으로 확인되어 올해 직접 경쟁의 정점을 맞이할 것입니다. 1. 실리콘의 이론적인 그램 용량은 4200mAh/g에 도달할 수 있으며 이는 흑연의 그램 용량의 10배 이상입니다(흑연의 이론적인 그램 용량은 372mAh/g입니다). 음극의 경우 리튬이온 삽입량이 최대에 도달했을 때의 용량이 이론 그램 용량으로 동일 중량 하에서

화면 녹화가 검게 변합니다. 해결 방법은 다음과 같습니다. 화면 녹화가 검게 변합니다. 해결 방법은 다음과 같습니다. May 03, 2024 pm 09:13 PM

휴대폰 화면에 무언가를 녹음하려고 하는데 화면이 검게 변합니까? 일반적으로 제어 센터에서 화면 녹화를 시작할 수 있습니다. 어떤 경우에는 화면의 항목을 녹화할 수 없습니다. 우리는 화면을 올바르게 녹화하는 데 도움이 될 수 있는 가능한 솔루션 목록과 함께 모든 시나리오를 언급했습니다. 화면 녹화가 검은색으로 나타나는 이유 – iPhone 화면에서 재생되는 동안 DRM(Digital Rights Management)으로 보호된 콘텐츠를 녹화하려고 하면 아무 것도 얻을 수 없습니다. 출력은 새까만 화면이 됩니다. Netflix, Disney+, Hulu 및 Peacock과 같은 모든 주요 OTT 플랫폼에는 모든 화면 녹화 기능을 차단하는 이 DRM이 있습니다. 2. 몇몇 웹사이트에서는 화면 캡처 사용을 금지하고 있습니다.

놀라운 일이 다가오고 있습니다! ViewSonic LX700-4K 레이저 홈 시어터에는 1,700위안의 공식 리베이트가 있으며 4K TV 박스도 포함되어 있습니다! 놀라운 일이 다가오고 있습니다! ViewSonic LX700-4K 레이저 홈 시어터에는 1,700위안의 공식 리베이트가 있으며 4K TV 박스도 포함되어 있습니다! Apr 25, 2024 pm 05:49 PM

대형 화면 게임도 수용할 수 있는 영화 품질의 프로젝터 구입을 고려하고 있다면 ViewSonic LX700-4K가 완벽한 선택입니다. 밝을 뿐만 아니라 4K 해상도를 갖추고 XBOX 인증을 지원합니다. 현재 1,700위안의 공식 보조금과 무료 4K TV 박스를 통해 큰 할인을 받고 있습니다. 구매하려면 클릭하세요: https://item.jd.com/100069910253.html ViewSonic LX700-4K는 최신 3세대 레이저 광원 기술을 채택하여 눈의 손상을 효과적으로 줄여 걱정 없이 시각적 향연을 즐길 수 있습니다. 당신의 눈이 손상되었습니다. 3500 ANSI 루멘의 높은 밝기와 영화 같은 4K 해상도로 모든 디테일을 선명하게 볼 수 있습니다.

봄의 절묘한 빛과 그림자 예술, Haqu H2는 비용 효율적인 선택입니다. 봄의 절묘한 빛과 그림자 예술, Haqu H2는 비용 효율적인 선택입니다. Apr 17, 2024 pm 05:07 PM

봄이 오면 모든 것이 되살아나고 모든 것이 활력과 활력으로 가득 차 있습니다. 이 아름다운 계절에 가정 생활에 색상을 추가하는 방법은 무엇입니까? 정교한 디자인과 뛰어난 비용 효율성을 갖춘 Haqu H2 프로젝터는 올 봄에 없어서는 안 될 아름다움이 되었습니다. 이 H2 프로젝터는 콤팩트하면서도 스타일리시합니다. 거실 TV장 위에 놓거나 침실 침대협탁 옆에 놓아도 아름다운 풍경이 될 수 있습니다. 본체는 유백색 무광택 질감으로 만들어져 있어 프로젝터가 더욱 고급스러워 보일 뿐만 아니라 촉감의 편안함도 향상됩니다. 베이지색 가죽 느낌의 소재가 전체적인 외관에 따뜻함과 우아함을 더해줍니다. 이러한 색상과 소재의 조합은 현대 주택의 미적 트렌드에 부합할 뿐만 아니라 다음과 같은 인테리어에도 통합될 수 있습니다.

4K HD 영상을 쉽게 이해해보세요! 이 대규모 다중 모드 모델은 웹 포스터의 내용을 자동으로 분석하여 작업자에게 매우 편리합니다. 4K HD 영상을 쉽게 이해해보세요! 이 대규모 다중 모드 모델은 웹 포스터의 내용을 자동으로 분석하여 작업자에게 매우 편리합니다. Apr 23, 2024 am 08:04 AM

PDF, 웹페이지, 포스터, 엑셀 차트의 내용을 자동으로 분석할 수 있는 대형 모델은 파트타임 근로자에게 그다지 편리하지 않습니다. Shanghai AILab, 홍콩 중문대학교 및 기타 연구 기관에서 제안한 InternLM-XComposer2-4KHD(약칭 IXC2-4KHD) 모델은 이를 현실로 만듭니다. 해상도 제한이 1500x1500 이하인 다른 다중 모드 대형 모델과 비교하여, 이 작업은 다중 모드 대형 모델의 최대 입력 이미지를 4K(3840x1600) 이상의 해상도로 높이고 모든 화면비와 336픽셀을 4K로 지원합니다. 동적 해상도가 변경됩니다. 모델은 출시 3일 만에 허깅페이스 비주얼 질문답변 모델 인기 순위 1위를 차지했다. 취급이 용이함

See all articles