筆者按:使用Unity版本為2021.3LTS,與其他版本或有異同。請(qǐng)僅做參考
一、前言。
本文是筆者在學(xué)習(xí)使用Unity引擎的過程中,產(chǎn)學(xué)研的一個(gè)筆記。由筆者根據(jù)官方文檔Unity User Manual 2021.3 (LTS)/Create user interfaces (UI)/Unity UI/UI 操作方法/設(shè)計(jì)用于多種分辨率的 UI相關(guān)部分結(jié)合自身經(jīng)驗(yàn)所做,有不足之處,還請(qǐng)指正。
二、導(dǎo)讀。
1.現(xiàn)代游戲通常需要支持各種不同的屏幕分辨率,以適配尺寸不一的電子設(shè)備。所以官方在設(shè)計(jì)UI系統(tǒng)時(shí),提供了各種各樣的工具。將這些工具組合起來使用,就能夠達(dá)到多分辨率適配的目的。
2.屏幕(Screen)
3.畫布(Canvas)
4.矩形變換(Rect Transform)
三、屏幕(Screen)。
1.這個(gè)靜態(tài)類為開發(fā)者提供對(duì)顯示信息的訪問??梢蕴峁┇@得當(dāng)前設(shè)備支持的屏幕分辨率列表,切換當(dāng)前分辨率,顯示/隱藏系統(tǒng)鼠標(biāo)點(diǎn)等功能。
2.Screen 靜態(tài)屬性。
[autorotateToLandscapeLeft]:自動(dòng)旋轉(zhuǎn)到橫屏,屏幕在Home鍵左邊(即Home鍵在右邊)。
[autorotateToLandscapeRight]:自動(dòng)旋轉(zhuǎn)到橫屏,屏幕在Home鍵右邊(即Home鍵在左邊)。
[autorotateToPortrait]:自動(dòng)旋轉(zhuǎn)到豎屏。
[autorotateToPortraitUpsideDown]:自動(dòng)旋轉(zhuǎn)到豎屏,上下翻轉(zhuǎn)。 [brightness]:當(dāng)前屏幕亮度。
[currentResolution]:當(dāng)前屏幕分辨率(只讀)。 [cutouts]:返回屏幕(安卓)上不可顯示(如攝像頭)的區(qū)域列表。
[dpi]:返回屏幕當(dāng)前的DPI(只讀),DPI(Dots Per Inch)每英寸像素?cái)?shù),一般情況下,DPI越大,屏幕越好。
[fullScreen]:是否設(shè)置為全屏。
[fullScreenMode]:全屏設(shè)置以下哪一種模式:(ExclusiveFullScreen/FullScreenWindow/MaximizedWindow/Windowed)
[height]:屏幕窗口的當(dāng)前高度。
[mainWindowDisplayInfo] :主窗口顯示信息。
[mainWindowPosition]:主窗口左上角相較于屏幕左上角的位置。
[orientation]:指定屏幕的邏輯方向。
[resolutions]:返回監(jiān)視器支持的所有全屏分辨率。
[safeArea]:屏幕的安全區(qū)域。
[sleepTimeout]:無用戶交互一段時(shí)間后休眠。
[width]:屏幕窗口的當(dāng)前寬度。
3.Screen靜態(tài)方法。
[GetDisplayLayout]:檢索當(dāng)前顯示器的布局信息。如名稱,分辨率,刷新頻率等。
[MoveMainWindowTo]:移動(dòng)主窗口到相對(duì)于屏幕左上角的某一位置。異步操作。
[SetResolution]:切換分辨率。
以上就是Screen的靜態(tài)類,可在代碼中進(jìn)行相關(guān)信息的獲取與設(shè)置
四、畫布(Canvas)
1.畫布(Canvas)組件是進(jìn)行UI布局的抽象空間。所有 UI 元素都必須是附加了畫布組件的游戲?qū)ο蟮淖訉?duì)象。創(chuàng)建 UI 元素對(duì)象時(shí),如果場(chǎng)景中沒有畫布 (Canvas) 對(duì)象,則會(huì)自動(dòng)創(chuàng)建該對(duì)象。
2.可以同時(shí)有多個(gè)畫布,可以使用畫布嵌套。
3.畫布組件的屬性面板。
[Render Mode]:畫布渲染模式,包括屏幕空間-覆蓋模式(Screen Space - Overlay)、屏幕空間-相機(jī)模式(Screen Space - Camera)和世界空間模式(World Space)。不同的模式有不同參數(shù)配置,適合不同的應(yīng)用場(chǎng)景。
4.畫布縮放器(Canvas Scaler)
此組件可以控制畫布尺寸和像素密度。
5.畫布組(Canvas Group)
可以集中控制UI元素整體的某些方面,比如不透明度、是否接受輸入、是否阻斷射線投射、是否忽視父畫布組的影響。
6.畫布渲染器(Canvas Renderer)
用于渲染畫布中包含的圖形UI對(duì)象。
以上是畫布相關(guān)的組件和功能,可以針對(duì)不同情況調(diào)整使用策略
五、矩形變換(Rect Transform)
1.這個(gè)組件是所有UI上的節(jié)點(diǎn)對(duì)象用以替換Transform組件的。
2.除了有常規(guī)變換上的位置、旋轉(zhuǎn)、縮放之外。還具有寬高,用于指定矩形的尺寸。
3.軸心(Pivot)是Unity的一個(gè)特有概念,有點(diǎn)類似Cocos引擎中的【錨點(diǎn)】。就是所有變換(旋轉(zhuǎn)、縮放、尺寸)都是圍繞著這個(gè)點(diǎn)的。
4.錨點(diǎn)組(Anchors)錨點(diǎn)的作用主要是用來錨定節(jié)點(diǎn)到父矩形變換上。與錨點(diǎn)預(yù)設(shè)(Anchor Preset)一起使用,來設(shè)置UI節(jié)點(diǎn)的分辨率適配策略。(錨點(diǎn)就是節(jié)點(diǎn)上的四個(gè)小三角形)
與Cocos引擎的區(qū)別是,Cocos直接使用父子節(jié)點(diǎn)錨點(diǎn)的相對(duì)位置來“表達(dá)”兩者之間的相對(duì)關(guān)系;Unity卻有點(diǎn)像是拆分成兩套屬性,軸心點(diǎn)和錨點(diǎn)。修改其他變換參數(shù)是圍繞軸心點(diǎn)來的,與父節(jié)點(diǎn)的關(guān)系是由錨點(diǎn)組錨定的。這點(diǎn)要注意區(qū)分。
5.錨點(diǎn)預(yù)設(shè)(Anchor Preset)這個(gè)組件在節(jié)點(diǎn)的屬性面板(RectTransform組件部分)上都可以看到。
你可以點(diǎn)開之后任選一種恰當(dāng)?shù)念A(yù)設(shè)選項(xiàng)。
產(chǎn)生固定尺寸:錨點(diǎn)在一起。
節(jié)點(diǎn)尺寸隨父節(jié)點(diǎn)變換拉伸:錨點(diǎn)是分開的。
注意:同時(shí)按著Shift會(huì)在設(shè)置錨點(diǎn)的同時(shí)也修改軸心;同時(shí)按著Alt會(huì)在設(shè)置錨點(diǎn)的同時(shí)也修改位置。
六、其他布局組件。
如Layout布局相關(guān)的組件,內(nèi)容大小適配器(ContentSizeFilter)組件。都能夠幫助開發(fā)者去更合理便捷地去布局。
六、適配策略。
有了以上幾個(gè)部分的了解之后,再來處理適配問題,就有了抓手了。
1.切換分辨率。如果有分辨率切換的需求,則可以調(diào)用此相關(guān)接口。
2.如果是固定分辨率設(shè)計(jì),則可以跳過1,考慮畫布渲染模式。
Screen Space - Overlay (UI放置于場(chǎng)景之上渲染的屏幕上)
Screen Space - Camera (畫布放在指定UI相機(jī)的指定距離處,攝像機(jī)的設(shè)置會(huì)影響UI的外觀。一般做UI系統(tǒng)適合此畫布模式)
World Space(畫布行為與場(chǎng)景中其他對(duì)象相同,做偽3D,或者場(chǎng)景上的UI交互選項(xiàng)會(huì)非常有用。這種UI也有另外個(gè)名稱“敘事界面”)
3.調(diào)整好畫布,就可以利用矩形變換組件,來進(jìn)行UI界面上父子節(jié)點(diǎn)間的排布了。具體使用方法上面已經(jīng)講了。文章來源:http://www.zghlxwxcb.cn/news/detail-442819.html
以上就是常規(guī)的多分辨率適配的步驟與思路
七、異形屏適配。
做分辨率適配,難免遇到異形屏適配的問題。尤其是現(xiàn)在越來越流行劉海、靈動(dòng)島之類的設(shè)計(jì)。
做異形屏適配,也跟業(yè)務(wù)上設(shè)計(jì)有關(guān)。這里筆者給出的設(shè)計(jì)與思路是,在設(shè)置系統(tǒng)中增加異形屏適配的滑動(dòng)條,獲取非安全區(qū)域的位置與尺寸,對(duì)需做適配的UI進(jìn)行最大最小范圍的位移。
五、以上就是Unity多分辨率適配相關(guān)的部分。如果想了解更多,建議去官網(wǎng)文檔直接找【UI操作方法】篇。有什么想法,也可以和筆者討論。文章來源地址http://www.zghlxwxcb.cn/news/detail-442819.html
到了這里,關(guān)于【Unity】多分辨率適配的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!