思想不退步,每天有進步。大傢好,我是Unity集結號,希望每次能給大傢帶來不一樣的知識幹貨。

什麼是全面屏適配?

自全面屏問世後,劉海屏,水滴屏,到現在的折疊屏,模糊概念裡這些都屬於全面屏,市面上的android手機分辨率,樣式層出不窮,這樣就衍生出一個問題,如何有一套統一的屏幕適配方案?


Unity適配華為折疊屏真的那麼難嗎?

小米mix2 全面屏


Unity適配華為折疊屏真的那麼難嗎?

iphonex 劉海屏

Unity適配華為折疊屏真的那麼難嗎?

meta20x-水滴屏

從三幅圖中,是否可以大致看出,頂部的位置是不可用的,這時一個很自然的想法是,我如果知道距離頂部的距離,那麼問題不就迎刃而解瞭,如下圖:


Unity適配華為折疊屏真的那麼難嗎?

劉海屏示意圖

頂部紅色區域是不可用的,或者說,頂部區域要謹慎使用,但是市面上的手機千奇百怪的,這麼多分辨率,這麼多樣式,不可能一一進行適配,那麼怎麼辦呢?這個時候就引入瞭一個新的概念,安全區域。

什麼是安全區域?

從上圖中我們可以看出,底部綠色區域就是我們所謂的安全區,這裡怎麼排佈界面元素都不會出現遮擋問題,那麼如何獲取這部分的信息呢?

Unity中內置瞭這麼一個api叫Screen.safeArea,也就是裡面能獲取安全區域的范圍

Unity適配華為折疊屏真的那麼難嗎?

Device Simulator示意圖

position和size構成瞭安全區的一個范圍,那麼我們就能針對不同分辨率有同一個入口

手遊開發如何設計基準分辨率?

為什麼要設計基準分辨率,一般手遊開發過程中,是小屏適配大屏,為什麼需要這樣?

1,如果我們使用目前市面上最大的屏幕去適配小屏幕的話,元素往中間擠壓,重疊。

想象一樣,一個壯漢要過一個宅門,得不斷地擠壓自己的身體,變形,才有可能穿過去,那麼這個壯漢滿臉通紅,提臀收腹的樣子,就形似界面的元素擠壓。

2,如果我們用很小的屏幕適配大屏幕不就行瞭,肯定不會擠壓,那麼會出現什麼問題呢?

屏幕上元素的初始尺寸很小,在大屏幕上,就會出現放大的效果,界面就會變得模糊。

3,那麼怎麼樣選取基準分辨率呢?

項目立項初期,就要調查市面上主流機型的分辨率, 16:9, 18:9, 13:6

16:9代表 1280 * 720(小米2s), 1920 * 1080 (iphone 6s plus), 750 * 1334 (iphone 6s)

18:9代表 2160 * 1080 (小米MIX)

13:6代表 2436 * 1125 (iphone x, iphone xs)

從上面可以看出,選擇16:9作為基礎分辨率是比較好的。

代碼如何實現適配?

1,設置一個和Canvas同等大小的panel, 可以命名為safePanel

Unity適配華為折疊屏真的那麼難嗎?

2, 設置錨點的位置

var safeArea = Screen.safeArea;var anchorMin = safeArea.position;var anchorMax = anchorMin + safeArea.size;anchorMin.x /= Screen.width;anchorMin.y /= Screen.height;anchorMax.x /= Screen.width;anchorMax.y /= Screen.height;m_safeRect.anchorMin = anchorMin;m_safeRect.anchorMax = anchorMax;

其實就是將anchor設置為安全區的左下和右上點

掀開折疊屏的神秘面紗

華為折疊屏,合起來的時候,是一部正常的手機,展開之後,就是一個類似pad的大小4:3,那麼顯而易見,我們要再折疊的時候適配手機,展開之後適配pad,如果項目已經成型之後,如何適配pad呢?

1,ipad的話,不會改變尺寸,而且可以通過SystemInfo.deviceModel,獲取設備名稱看是否是ipad, 本身是橫屏遊戲的話,這個時候可以使用豎屏遊戲或者 width-height一半的位置適配,根據自己的項目需要


Unity適配華為折疊屏真的那麼難嗎?

ipad適配策略

2,如果是華為折疊屏這種變化的,使用華為的EasyGo SDK提供的isFoldable(),getDisplayMode()判斷是否為折疊屏展開態,展開和關閉可以通過sdk層進行通知,然後刷新unity,重新適配。

總結

屏幕適配本質上就是在合適的區域放置ui元素。

最後希望喜歡我的小夥伴關註我,也可以評論,私信我,提出寶貴的意見,我會不斷改進,和大傢一起成長,也會挑選出一些小夥伴比較關心的主題,作為專題進行講解,希望大傢多多支持

創作者介紹
創作者 3C王者 的頭像
3C王者宇晨

3C王者

3C王者宇晨 發表在 痞客邦 留言(0) 人氣( 5 )