博客 / 詳情

返回

Unity 如何做屏幕適配

當目標平台包括多種分辨率和寬高比的設備時:

WebGL 屏幕適配

Unity打出的WebGL包,讓其打開後的顯示區域比例與標準比例一致

不同平台適合的模版使用

處理

  1. 機核 / 自己的服務:PWA
  2. itch:PWA + 開啓 FullScreen Button

重點項

1. 使用CanvasScaler組件

針對 UGUI 中的 UI元素,用 CanvasScaler 組件。
有幾種適配模式可選:

Scale With Screen Size: 允許UI根據預設的參考分辨率進行縮放。你需要設定一個參考分辨率以及縮放模式(如:Constant Pixel Size, Scale With Screen Size, Constant Physical Size)來控制UI元素如何響應屏幕尺寸變化。

Reference Resolution: 設定一個基準分辨率,Unity會根據當前屏幕的實際分辨率與參考分辨率的比例自動調整UI元素的大小。

Match Width Or Height: 在此模式下,你可以選擇匹配屏幕的寬度或高度,保證UI的一致性,尤其適合確保某些UI元素始終保持可見或保持特定比例。

2. 使用RectTransform

UI元素的RectTransform允許你通過錨點和偏移來靈活定位和調整元素大小。正確設置錨點是實現自適應佈局的關鍵。

Anchors(錨點): 調整錨點可以讓UI元素在屏幕的相對位置保持一致,無論屏幕尺寸如何變化。
Pivot(中心點): 改變UI元素的旋轉或縮放中心。

3. 相機適配

固定寬高比適配。
對於遊戲場景和相機,可以採用固定寬高比適配策略,保持遊戲內容的視覺比例一致。這通常涉及到調整相機的 Viewport Rect 及 aspect(需通過腳本) 來維持特定的寬高比。

Viewport Rect(視口矩形)
Viewport Rect 屬性決定了相機視圖在最終渲染畫面中的位置和大小。它是一個Rect類型的數據結構,由x, y, width, height四個值組成,這些值都是0到1之間的比例。具體來説:

  • xy 定義了視口的起始位置(左下角)在屏幕座標系中的比例。
  • widthheight 定義了視口的寬度和高度相對於屏幕的比例。

例如,如果你將Viewport Rect設置為(0, 0, 0.5, 0.5),那麼相機渲染的內容將會佔據屏幕左下角四分之一的區域。調整這些值可以實現分屏顯示、畫中畫效果等。

Camera Aspect Ratio(相機寬高比)
Aspect Ratio 指的是相機視圖的寬度與高度的比例。這個屬性對於保持圖形的自然外觀非常重要,確保圖像不會被拉伸或壓縮。Unity中的相機默認會嘗試匹配其渲染的Game窗口或目標渲染紋理的寬高比。手動設置Aspect Ratio可以強制相機使用特定的寬高比進行渲染,這對於確保不同分辨率的屏幕上內容的一致性特別有用。

例如,如果設置Aspect Ratio為16:9(即大約1.7778),那麼無論最終顯示的屏幕實際寬高比如何,相機視圖都將按照16:9的比例進行渲染,可能會導致渲染內容兩側有黑邊或進行裁剪以適應實際屏幕。

這兩個屬性結合起來,可以讓你靈活地控制遊戲畫面的佈局和適應不同的顯示設備。在多屏顯示、分屏遊戲、或需要精確控制渲染區域的應用場景中,調整Viewport Rect特別有效;而在需要維持特定視覺效果或兼容多種屏幕分辨率時,設置合適的Aspect Ratio就顯得尤為重要。

例子

使用如下組件

public class InitCameraAsepect : MonoBehaviour
{
    public Vector2 aspect = new Vector2();

    // Start is called before the first frame update
    void Start()
    {
        var cam = GetComponent<Camera>();
        if (aspect.y != 0f)
        {
            cam.aspect = aspect.x / aspect.y;
            var rectH = Screen.width / cam.aspect / Screen.height;
            cam.rect = new Rect(0, (1 - rectH) / 2, 1, rectH);
        }
    }

}

image.png

渲染結果:

  1. 在 1080x1080 的設備上
    image.png
  2. 在 1080x1920 的設備上
    image.png

拓展

多分辨率適配

Dynamic Resolution Scaling: 在質量設置中啓用動態分辨率,Unity可以根據硬件性能自動調整渲染分辨率,以保持流暢的幀率。

使用自定義腳本

在某些情況下,可能需要編寫自定義腳本來處理特定的適配邏輯,比如基於屏幕尺寸動態調整遊戲世界的大小、UI元素的佈局或特定圖形元素的位置。

圖像和紋理適配

確保紋理導入設置中的“Max Size”合適,避免在低分辨率設備上佔用過多內存。同時,使用九宮格(Sprite 9-Slicing)技術可以讓UI元素在拉伸時邊緣保持清晰。

結合以上策略,你可以有效地在Unity項目中實現屏幕適配,確保遊戲在各種設備上都能提供良好的用户體驗。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.