LV. 32
GP 301

【心得】切換視窗模式:全螢幕、視窗化、無邊框視窗

樓主 弗洛斯特 gn00779703
GP18 BP-
Unity內建的解析度設定
預設的模式只有全螢幕跟視窗化兩種
因為目前的專案需求要用到無框視窗
所以花了一點時間研究

結果可以說是略有小成
不過也只是google 然後剪剪貼貼
所以有些問題可能沒辦法解答
當然 如果有遇到更好的方法
希望不吝指教

----
開始前提醒一下,
完成後,
切記不能在Unity中直接使用,
不然視窗會被切掉,
所以要測試,要建置成執行檔測試。
----
首先奉上 程式碼
因為控制的不是Unity原生的東西
需要以下的.dll

這兩個可以利用 檢視登錄 的方式
.NET Framework 的安裝資料夾內找到
將.dll檔放在
\Assets\Plugins 就可以開工了

----
使用命名空間跟一般的宣告
我就不多做說明 複製貼上即可
比較特殊的是下面的宣告
下面的變數與函式,是控制視窗模式時,會使用的變數與函式


詳細可以參考下面幾個網址:

----
Start()是元件的初始化設定,這邊也不多做贅述,依照自己所需調整即可。
CheckDropdown()是確認解析度後,變更解析度與視窗模式,也就是這次的主題。

----
變更解析度
這邊就是使用Screen.SetResolution()
CanvasScaler是使用Scale With Screen Size
m_Ratio是所有畫面元件的父物件(RectTransform)
切換解析度就會縮放Scale,讓畫面元件大小跟著縮放。

----
變更完解析度後,會根據目前選擇的模式調整視窗外框
全螢幕不需要另外設定,所以不解釋。

---
視窗化跟無框視窗的設定方式
除了細部設定不同以外,流程大致是相同的。
無框視窗只多了一個延遲設定,
這部分的原因是因為,
要等Screen.SetResolution() 將全螢幕/視窗化設定完畢,
再設定成無框視窗,才會顯示正常,否則都只會顯示有框視窗,
所以需要多一個延遲設定。
p.s. 延遲設定的時間可以自己斟酌,也可以使用其他方式達成。

視窗化

無框視窗

IEnumerator ChangeBorder()


----
GetScreenPosition()
視窗跟無框視窗設定前,都會先計算視窗的大小跟位置
我這邊的作法是,先檢查目前的桌面解析度,
算出視窗的大小與視窗的座標,
再根據計算出來的值,去設定視窗模式,
這部分是我個人的設定,各位也可以根據自己需求做變更。

----
這次主題就到這邊結束了,
如果有什麼問題或指教,
歡迎留言或回覆告訴我。
18
-
未登入的勇者,要加入討論嗎?
板務人員:

209 筆精華,10/02 更新
一個月內新增 2
歡迎加入共同維護。


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】