Unity高級開發(fā)-項目與屏幕適配

1、游戲屏幕適配

屏幕適配是為了讓我們的項目能夠跑在各種電子設備上(手機,平板,電腦)
那么了解是適配之前首先要了解兩個知識點:

1-1、什么是像素?

單位面積中構成圖像的點的個數。
特點:單位面積內的像素越多,分辨率越高,圖像的效果就越好。

1-2、什么是分辨率?

分辨率可以從顯示分辨率與圖像分辨率兩個方向來分類。
示分辨率(屏幕分辨率)是屏幕圖像的精密度,是指顯示器所能顯示的像素有多少.分辨率的單位有:(dpi點每英寸)、lpi(線每英寸)和ppi(像素每英寸)。
特點:
圖像的分辨率越高,所包含的像素就越多,圖像就越清晰,印刷的質量也就越好。
同時,它也會增加文件占用的存儲空間。

1-3、移動設備分辨率 –以iphone 為例
Paste_Image.png

2、什么是適配?

什么是適配?

適應、兼容各種不同的情況

游戲開發(fā)中,適配的常見種類

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

¤屏幕適配
針對不同大小的屏幕尺寸進行適配,例如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中攝像機鏡頭的尺寸決定了我們實際看到游戲內容的多少,在編輯器中我們可以通過調整攝像機Camera的orthographicSize屬性值來調整攝像機的大小

Paste_Image.png

注:Unity3D中這個比例的默認值是100,即100像素等于1單位。
如果我們的游戲屏幕有640像素高,那么實際換算成單位高度則是6.4個單位,
當我們攝像機的orthographicSize值是3.2時,攝像機大小剛好與屏幕大小相等

4、Unity3D中的屏幕適配設置

4-1:像素適配設置(固定分辨率)
Paste_Image.png

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

Paste_Image.png

5、Unity3D中的攝像機設置

Unity編輯器中只能直接調整攝像機的高度,那攝像機的寬度是如何確定的呢?
答案就是我們最前面提到的屏幕寬高比。Unity會根據當前屏幕實際的寬高比和攝像機的orthographicSize值來計算出攝像機的寬度值,即:
攝像機實際寬度 = 攝像機orthographicSize * 2 * 屏幕寬高比
即是
攝像機實際寬度 = 攝像機高度 * 屏幕寬高比

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

6、Unity3D中的圖片像素比設置

Paste_Image.png

6、Unity3D:關于適配的一些UI問題解決

這里就是重中之重,也是坑點較多的地方

調整相機為設計尺寸,添加Canvas到場景中進行UI設計,但是Canvas默認大小和相機并不重合。

怎么辦?

6-1:辦法1:

調整Canvas的Render Mode屬性為Screen Space - Camera:

將映射游戲內容的Camera拖入Render Camera中,下一個屬性Plane Distance表示UI
與Camera的在Z軸距離(其實就是變相反映了UI的Z軸位置)。

接著在Canvas Scaler屬性里將Ui Scale Mode屬性設置為Scale With Screen Size,
表示Canvas會根據屏幕比例縮放。
下面的Reference Resolution,表示UI寬和高一半的大小。例如設計尺寸為640x960,
則x應為640 / 2 = 320,寬應為960 / 2 = 480。
下面的Screen Match Mode屬性選中Match Width Or Height,表示采用寬度(上文有提到過)
或高度(Unity自帶適配方式)適配。然后Match調整為0或1,0表示完全寬度適配,
1表示完全高度適配,其他值表示介于兩者之間采用比例適配

Paste_Image.png
6-2:辦法2:

調整Canvas的Render Mode屬性為World Space
1、將Event Camera設置為映射游戲內容的Camera。
2、然后調整Rect Transform組件中的Width和Height為設計尺寸的寬和高,同時將Scale屬性的X和Y都調整為0.01(對應unity2d默認情況下像素Pixels與引擎單位Unit對應比例100)。這時,Canvas的寬高正好與攝像機相同。
這兩種方法都可以將UI調整為與設計尺寸一致,并且在編輯器中運行與真機中運行效果保持一致。

Paste_Image.png
6-3:辦法3:

給攝像機掛下圖腳本就可以搞定比例問題:

Paste_Image.png
6-4:設定好就如下圖所示
Paste_Image.png

解決屏幕分辨率適配的問題,其實就是解決如何讓游戲攝像機尺寸限定在給定范圍的問題。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LeoPlayerSetting : MonoBehaviour {
    void Update()
    {
        //  按ESC退出全屏  
        if (Input.GetKey(KeyCode.Escape))
        {
            Screen.fullScreen = false;  //退出全屏           
        }
        //設置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))
        {
            //獲取設置當前屏幕分辯率  
            Resolution[] resolutions = Screen.resolutions;
            //設置當前分辨率  
            Screen.SetResolution(resolutions[resolutions.Length - 1].width, resolutions[resolutions.Length - 1].height, true);
            Screen.fullScreen = true;  //設置成全屏,  
        }
    }
}

7、適配總結

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

2.游戲實際內容,指全部的游戲內容,包括有效內容和主要是為了適配多分辨率的或其他不重要的目的而增加的內容。

實際的分辨率適配問題與三個尺寸相關,他們分別是:攝像機尺寸,游戲內容尺寸(包括有效內容尺寸和無效內容尺寸)和實際屏幕尺寸。

8、了解游戲中的攝像機

相機(Camera)
是向玩家捕獲和顯示世界的設備。通過自定義和操縱攝像機,
你可以使你的游戲表現得真正獨特。您在場景中攝像機的數量不受限制。
他們可以以任何順序設定放置在屏幕上的任何地方,或在屏幕的某些部分。

Paste_Image.png
8-1、攝像機屬性:
Paste_Image.png

Clear Flags 清除標識
確定了屏幕哪些部分將被清除,方便多個攝像機畫不同的游戲元素

Paste_Image.png

Skybox 天空盒:這是默認設置。屏幕上的任何空的部分將顯示當前相機的天空盒。
如果當前的相機沒有設置天空盒,它會默認在渲染設置(Render Settings )選擇天空盒

Solid Color 純色
任何空部分,屏幕顯示為當前相機的背景色。
Depth Only 僅深度
如果你想繪制一個玩家的槍,又不讓它內部環(huán)境被裁剪,你會設置深度為0的相機繪制環(huán)境,
和另一個深度為1的相機單獨繪制武器。武器相機的清除標志(Clear Flags )應設置 為depth only。
Don't Clear 不清除
此模式不清除顏色或深度緩存。每一幀在下一幀結束后繪制,看上去像是涂抹(smear-looking)的效果。
這在游戲中不常用,最好是在自定義著色器(custom shader)上使用。

Rendering Path-渲染路徑
定義什么繪制方法被用于相機的選項

Paste_Image.png

Use Player Settings 使用玩家設置:在玩家設置(Player Settings.)相機使用哪個渲染路徑。
Vertex Lit 頂點光照 :所有被這個相機渲染的物體都將渲染成Vertex-Lit物體。
Forward 正向渲染:所有對象每材質渲染只渲染一次,和Unity 2.x中的標準一樣
Deferred 延遲照明:所有物體將在無光照的環(huán)境渲染一次,然后在渲染隊列尾部將物體的光照一起渲染出來。

Traget Texture-目標紋理:

Paste_Image.png

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

補充:Vertex Lit:頂點光照

這個Shader是Vertex-Lit,是最簡單的Shader之一。這個Shader渲染代價是非常小的
所有照射在該物體上的光源通過一次光能傳遞渲染完成并且只計算頂點光源。

因為是Vertex-Lit,所以不會有任何基于像素渲染的效果,例如:Light Cookies,Normal Mapping
和Shadows。這個Shader對模型的細分同樣更加敏感,假如在很靠近立方體的地方放置一個
點光源,并且應用這個Shader,這個光源只會在此角落進行計算

General shader performance 通常的著色器性能
Unlit. This is just a texture, not affected by any lighting.?不發(fā)光。這只是一個紋理,不被任何光照影響
VertexLit. 頂點光照
Diffuse. 漫反射
Normal mapped. ?法線貼圖,比漫反射更昂貴:增加了一個或更多紋理(法線貼圖)和幾個著色器結構
Specular. This adds specular highlight calculation. ?高光。這增加了特殊的高光計算
Normal Mapped Specular. Again, this is a bit more expensive than Specular. ?高光法線貼圖。這比高光更昂貴一點
Parallax Normal mapped. This adds parallax normal-mapping calculation. ?視差法線貼圖。這增加了視差法線貼圖計算
Parallax Normal Mapped Specular..?視差高光法線貼圖。這增加了視差法線貼圖和鏡面高光計算

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容