Unity3D-關(guān)于項(xiàng)目的屏幕適配(看我就夠了)

1、游戲屏幕適配

屏幕適配是為了讓我們的項(xiàng)目能夠跑在各種電子設(shè)備上(手機(jī),平板,電腦)

那么了解是適配之前首先要了解兩個(gè)知識(shí)點(diǎn):

1-1、什么是像素?

單位面積中構(gòu)成圖像的點(diǎn)的個(gè)數(shù)。

特點(diǎn):?jiǎn)挝幻娣e內(nèi)的像素越多,分辨率越高,圖像的效果就越好。

1-2、什么是分辨率?

分辨率可以從顯示分辨率與圖像分辨率兩個(gè)方向來(lái)分類。

示分辨率(屏幕分辨率)是屏幕圖像的精密度,是指顯示器所能顯示的像素有多少.分辨率的單位有:(dpi點(diǎn)每英寸)、lpi(線每英寸)和ppi(像素每英寸)。

特點(diǎn):

圖像的分辨率越高,所包含的像素就越多,圖像就越清晰,印刷的質(zhì)量也就越好。

同時(shí),它也會(huì)增加文件占用的存儲(chǔ)空間。

1-3、移動(dòng)設(shè)備分辨率 –以iphone 為例

Paste_Image.png

2、什么是適配?

什么是適配?

適應(yīng)、兼容各種不同的情況

游戲開(kāi)發(fā)中,適配的常見(jiàn)種類

¤系統(tǒng)適配

針對(duì)不同版本的操作系統(tǒng)進(jìn)行適配,例如Unity3D 5.4系統(tǒng)

¤屏幕適配

針對(duì)不同大小的屏幕尺寸進(jìn)行適配,例如Iphone5s,iphone7

iPhone的尺寸

3.5inch、4.0inch、4.7inch、5.5inch

iPad的尺寸

7.9inch、9.7inch

屏幕方向

豎屏

橫屏

3、Unity3D 中的屏幕分辨

3-1.

屏幕的寬高比(Aspect Ratio) = 屏幕寬度/屏幕高度

3-2.

Unity2D中攝像機(jī)鏡頭的尺寸決定了我們實(shí)際看到游戲內(nèi)容的多少,在編輯器中我們可以通過(guò)調(diào)整攝像機(jī)Camera的orthographicSize屬性值來(lái)調(diào)整攝像機(jī)的大小

Paste_Image.png

注:Unity3D中這個(gè)比例的默認(rèn)值是100,即100像素等于1單位。

如果我們的游戲屏幕有640像素高,那么實(shí)際換算成單位高度則是6.4個(gè)單位,

當(dāng)我們攝像機(jī)的orthographicSize值是3.2時(shí),攝像機(jī)大小剛好與屏幕大小相等

4、Unity3D中的屏幕適配設(shè)置

4-1:像素適配設(shè)置(固定分辨率)

Paste_Image.png

2、屏幕寬高比

屏幕的寬高比Aspect Ratio = 屏幕寬度/屏幕高度

Paste_Image.png

5、Unity3D中的攝像機(jī)設(shè)置

Unity編輯器中只能直接調(diào)整攝像機(jī)的高度,那攝像機(jī)的寬度是如何確定的呢?

答案就是我們最前面提到的屏幕寬高比。Unity會(huì)根據(jù)當(dāng)前屏幕實(shí)際的寬高比和攝像機(jī)的orthographicSize值來(lái)計(jì)算出攝像機(jī)的寬度值,即:

攝像機(jī)實(shí)際寬度 = 攝像機(jī)orthographicSize * 2 * 屏幕寬高比

即是

攝像機(jī)實(shí)際寬度 = 攝像機(jī)高度 * 屏幕寬高比

我舉個(gè)例子說(shuō)明一下,iPhone4的屏幕像素為640*960,寬高比為2:3,假設(shè)Pixels To Units值為100,那么如果設(shè)攝像機(jī)高度size值為4.8,那么攝像機(jī)實(shí)際寬度按照公式算出6.4,剛好就是屏幕的單位寬度。

6、Unity3D中的圖片像素比設(shè)置

Paste_Image.png

6、Unity3D:關(guān)于適配的一些UI問(wèn)題解決

這里就是重中之重,也是坑點(diǎn)較多的地方

調(diào)整相機(jī)為設(shè)計(jì)尺寸,添加Canvas到場(chǎng)景中進(jìn)行UI設(shè)計(jì),但是Canvas默認(rèn)大小和相機(jī)并不重合。

怎么辦?

6-1:辦法1:

調(diào)整Canvas的Render Mode屬性為Screen Space - Camera:

將映射游戲內(nèi)容的Camera拖入Render Camera中,下一個(gè)屬性Plane Distance表示UI

與Camera的在Z軸距離(其實(shí)就是變相反映了UI的Z軸位置)。

接著在Canvas Scaler屬性里將Ui Scale Mode屬性設(shè)置為Scale With Screen Size,

表示Canvas會(huì)根據(jù)屏幕比例縮放。

下面的Reference Resolution,表示UI寬和高一半的大小。例如設(shè)計(jì)尺寸為640x960,

則x應(yīng)為640 / 2 = 320,寬應(yīng)為960 / 2 = 480。

下面的Screen Match Mode屬性選中Match Width Or Height,表示采用寬度(上文有提到過(guò))

或高度(Unity自帶適配方式)適配。然后Match調(diào)整為0或1,0表示完全寬度適配,

1表示完全高度適配,其他值表示介于兩者之間采用比例適配

Paste_Image.png

6-2:辦法2:

調(diào)整Canvas的Render Mode屬性為World Space

1、將Event Camera設(shè)置為映射游戲內(nèi)容的Camera。

2、然后調(diào)整Rect Transform組件中的Width和Height為設(shè)計(jì)尺寸的寬和高,同時(shí)將Scale屬性的X和Y都調(diào)整為0.01(對(duì)應(yīng)unity2d默認(rèn)情況下像素Pixels與引擎單位Unit對(duì)應(yīng)比例100)。這時(shí),Canvas的寬高正好與攝像機(jī)相同。

這兩種方法都可以將UI調(diào)整為與設(shè)計(jì)尺寸一致,并且在編輯器中運(yùn)行與真機(jī)中運(yùn)行效果保持一致。

Paste_Image.png

6-3:辦法3:

給攝像機(jī)掛下圖腳本就可以搞定比例問(wèn)題:

Paste_Image.png

6-4:設(shè)定好就如下圖所示

Paste_Image.png

解決屏幕分辨率適配的問(wèn)題,其實(shí)就是解決如何讓游戲攝像機(jī)尺寸限定在給定范圍的問(wèn)題。

usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassLeoPlayerSetting:MonoBehaviour {voidUpdate(){//? 按ESC退出全屏? if(Input.GetKey(KeyCode.Escape))? ? ? ? {? ? ? ? ? ? Screen.fullScreen =false;//退出全屏? ? ? ? ? }//設(shè)置7680*1080的全屏? if(Input.GetKey(KeyCode.B))? ? ? ? {? ? ? ? ? ? Screen.SetResolution(1920,1080,true);? ? ? ? }if(Input.GetKey(KeyCode.C))? ? ? ? {? ? ? ? ? ? Screen.SetResolution(Screen.width, Screen.height,true);? ? ? ? }//按A全屏? if(Input.GetKey(KeyCode.A))? ? ? ? {//獲取設(shè)置當(dāng)前屏幕分辯率? Resolution[] resolutions = Screen.resolutions;//設(shè)置當(dāng)前分辨率? Screen.SetResolution(resolutions[resolutions.Length -1].width, resolutions[resolutions.Length -1].height,true);? ? ? ? ? ? Screen.fullScreen =true;//設(shè)置成全屏,? }? ? }}

7、適配總結(jié)

1.游戲有效內(nèi)容,指游戲中一定需要完整顯示在屏幕上的內(nèi)容;

2.游戲?qū)嶋H內(nèi)容,指全部的游戲內(nèi)容,包括有效內(nèi)容和主要是為了適配多分辨率的或其他不重要的目的而增加的內(nèi)容。

實(shí)際的分辨率適配問(wèn)題與三個(gè)尺寸相關(guān),他們分別是:攝像機(jī)尺寸,游戲內(nèi)容尺寸(包括有效內(nèi)容尺寸和無(wú)效內(nèi)容尺寸)和實(shí)際屏幕尺寸。

8、了解游戲中的攝像機(jī)

相機(jī)(Camera)

是向玩家捕獲和顯示世界的設(shè)備。通過(guò)自定義和操縱攝像機(jī),

你可以使你的游戲表現(xiàn)得真正獨(dú)特。您在場(chǎng)景中攝像機(jī)的數(shù)量不受限制。

他們可以以任何順序設(shè)定放置在屏幕上的任何地方,或在屏幕的某些部分。

Paste_Image.png

8-1、攝像機(jī)屬性:

Paste_Image.png

Clear Flags 清除標(biāo)識(shí)

確定了屏幕哪些部分將被清除,方便多個(gè)攝像機(jī)畫(huà)不同的游戲元素

Paste_Image.png

Skybox 天空盒:這是默認(rèn)設(shè)置。屏幕上的任何空的部分將顯示當(dāng)前相機(jī)的天空盒。

如果當(dāng)前的相機(jī)沒(méi)有設(shè)置天空盒,它會(huì)默認(rèn)在渲染設(shè)置(Render Settings )選擇天空盒

Solid Color 純色

任何空部分,屏幕顯示為當(dāng)前相機(jī)的背景色。

Depth Only 僅深度

如果你想繪制一個(gè)玩家的槍,又不讓它內(nèi)部環(huán)境被裁剪,你會(huì)設(shè)置深度為0的相機(jī)繪制環(huán)境,

和另一個(gè)深度為1的相機(jī)單獨(dú)繪制武器。武器相機(jī)的清除標(biāo)志(Clear Flags )應(yīng)設(shè)置 為depth only。

Don't Clear 不清除

此模式不清除顏色或深度緩存。每一幀在下一幀結(jié)束后繪制,看上去像是涂抹(smear-looking)的效果。

這在游戲中不常用,最好是在自定義著色器(custom shader)上使用。

Rendering Path-渲染路徑

定義什么繪制方法被用于相機(jī)的選項(xiàng)

Paste_Image.png

Use Player Settings 使用玩家設(shè)置:在玩家設(shè)置(Player Settings.)相機(jī)使用哪個(gè)渲染路徑。

Vertex Lit 頂點(diǎn)光照 :所有被這個(gè)相機(jī)渲染的物體都將渲染成Vertex-Lit物體。

Forward 正向渲染:所有對(duì)象每材質(zhì)渲染只渲染一次,和Unity 2.x中的標(biāo)準(zhǔn)一樣

Deferred 延遲照明:所有物體將在無(wú)光照的環(huán)境渲染一次,然后在渲染隊(duì)列尾部將物體的光照一起渲染出來(lái)。

Traget Texture-目標(biāo)紋理:

Paste_Image.png

渲染紋理 (Render Texture)包含相機(jī)視圖輸出。這會(huì)使相機(jī)渲染在屏幕上的能力被禁止。

補(bǔ)充:Vertex Lit:頂點(diǎn)光照

這個(gè)Shader是Vertex-Lit,是最簡(jiǎn)單的Shader之一。這個(gè)Shader渲染代價(jià)是非常小的

所有照射在該物體上的光源通過(guò)一次光能傳遞渲染完成并且只計(jì)算頂點(diǎn)光源。

因?yàn)槭荲ertex-Lit,所以不會(huì)有任何基于像素渲染的效果,例如:Light Cookies,Normal Mapping

和Shadows。這個(gè)Shader對(duì)模型的細(xì)分同樣更加敏感,假如在很靠近立方體的地方放置一個(gè)

點(diǎn)光源,并且應(yīng)用這個(gè)Shader,這個(gè)光源只會(huì)在此角落進(jìn)行計(jì)算

General shader performance 通常的著色器性能

Unlit. This is just a texture, not affected by any lighting.?不發(fā)光。這只是一個(gè)紋理,不被任何光照影響

VertexLit. 頂點(diǎn)光照

Diffuse. 漫反射

Normal mapped. ?法線貼圖,比漫反射更昂貴:增加了一個(gè)或更多紋理(法線貼圖)和幾個(gè)著色器結(jié)構(gòu)

Specular. This adds specular highlight calculation. ?高光。這增加了特殊的高光計(jì)算

Normal Mapped Specular. Again, this is a bit more expensive than Specular. ?高光法線貼圖。這比高光更昂貴一點(diǎn)

Parallax Normal mapped. This adds parallax normal-mapping calculation. ?視差法線貼圖。這增加了視差法線貼圖計(jì)算

Parallax Normal Mapped Specular..?視差高光法線貼圖。這增加了視差法線貼圖和鏡面高光計(jì)算

http://www.ceeger.com/Components/shader-NormalVertexLit.html

http://www.ceeger.com/Components/shader-Performance.html

作者:雷潮

鏈接:http://www.itdecent.cn/p/95cb4621206e

來(lái)源:簡(jiǎn)書(shū)

簡(jiǎn)書(shū)著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容