踩坑:Unity導出WebGL發布到手機上豎屏時強制顯示橫屏

具體的適配問題

公司的項目需要將游戲導出WebGL 發布到Web平臺 本以為是個很簡單的事情 誰知道卻被個橫豎屏適配搞的頭暈 畢竟只有大學淺淺的學了下HTML這門語言 出來工作后基本上都是在跟C# Lua打交道 言歸正傳 看看具體問題吧

游戲如果從橫屏進入 基本上不會有什么適配問題

但是現在人大多數手機都是開著 鎖定屏幕方向 這就導致大部分人其實是以豎屏進入游戲的

像這樣:

這樣顯然是不符合用戶體驗的 要用戶先把屏幕鎖定關了 在旋轉成橫屏 這一操作在游戲引流里都可以直接勸退一波用戶了

解決方案

理論方案

理論上解決很簡單 只需在index里進入時判斷手機方向并監聽手機旋轉事件

<script>var orientation = window.orientation;if(orientation == 180 || orientation == 0 || orientation == -180){//豎屏}else{//橫屏 orientation = 90 或者 orientation = -90 }window.onorientationchange = function () {//監聽手機旋轉事件if(orientation == 180 || orientation == 0 || orientation == -180){//豎屏 旋轉-90度}else{//橫屏 旋轉90度}};
</script>

改變

<canvas id="unity-canvas"></canvas>

或者其他嵌套unity-container的標簽通過CSS的旋轉屬性旋轉90度就搞定了

transform: rotate(90deg)

但是實際上并沒有那么快樂 經過你不斷的努力調整標簽終于實現了你就會發現

先不說比例問題 最致命的問題是 旋轉后 按鈕的碰撞監聽并沒有旋轉?按鈕的實際監聽范圍還是紅框 這一下子就犯了難 研究許久后發現需要使用HTML中的<iframe>標簽來解決

<iframe src="game.html"></iframe>

實際解決

新建一個新的index.html ?將原本的index重命名為game 通過iframe標簽引入到新的index里面

同時在新的index里面監聽手機旋轉事件 通過添加刪除類來旋轉頁面

代碼如下

<style>.landscape-screen{transform-origin: top left;transform: rotate(90deg) translateY(-100%)}
</style>
<iframe id="Frame" style="Frame"  src="game.html"></iframe>
<script>var orientation = window.orientation;//開始時調用var Frame = document.getElementById("Frame");if(orientation == 180 || orientation == 0 || orientation == -180){//注意豎屏時要把 iframe的寬設置為當前窗口的高度 高設置為當前窗口的寬度Frame.height = window.innerWidth;Frame.width = window.innerHeight;//通過css樣式旋轉90度Frame.classList.add("landscape-screen");}else{//橫屏時則正常Frame.height = window.innerHeight;Frame.width = window.innerWidth;//通過移除類去掉css樣式Frame.classList.remove("landscape-screen");}//監聽手機旋轉事件 根據旋轉狀態設置旋轉的css樣式window.onorientationchange = function () {if(orientation == 180 || orientation == 0 || orientation == -180){Frame.classList.add("landscape-screen");}else{Frame.classList.remove("landscape-screen");}};
</script>

?而我們的game.html(原本U3D導出的index.html) 只需要做好全屏適配即可

運行效果如下

豎屏進入→轉橫屏

橫屏進入→轉豎屏

至此適配方案結束

演示DEMO鏈接

GitHub - Wyleee/UnityWebGLMobileAdapter: 演示Unity導出的WebGL項目在手機上的橫豎屏適配

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/41451.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/41451.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/41451.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++ 多進程多線程間通信

目錄 一、進程間通信 1、管道&#xff08;Pipe&#xff09; 2、消息隊列&#xff08;Message Queue&#xff09; 3、共享內存&#xff08;Shared Memory&#xff09; 4、信號量&#xff08;Semaphore&#xff09; 5、套接字&#xff08;Socket&#xff09; 6、信號&…

Finding Global Homophily in Graph Neural Networks When Meeting Heterophily

本文發表于:ICML22 推薦指數: #paper/??? 問題背景: 異配圖的鄰接矩陣難以確定,以及異配圖的計算復雜度開銷大 可行的解決辦法:高通濾波多跳鄰居,GPRGNN(pagerank一類&#xff0c;各階鄰居的權重不同,ACM-GCN&#xff08;高低通濾波,H2GCN&#xff08;應該復雜度很大&…

碳課堂|搞清楚碳足跡,只看這篇文章就夠了

碳足跡管理是碳達峰碳中和的重要政策工具&#xff0c;2023年12月&#xff0c;國家發展改革委、工信部、國家市場監管總局、住房城鄉建設部、交通運輸部等部門聯合印發《關于加快建立產品碳足跡管理體系的意見》&#xff0c;對產品碳足跡管理各項重點任務作出系統部署。 推動碳…

音樂播放器

目錄 一、設計目標二、實現流程1. 數據庫操作2. 后端功能實現3. 前端UI界面實現4. 程序入口 三、項目收獲 一、設計目標 1. 模擬網易云音樂&#xff0c;實現本地音樂盒。 2. 功能分析&#xff1a; 登錄功能窗口顯示加載本地音樂建立播放列表播放音樂刪除播放列表音樂 3.設計思…

通過Java調用OceanBase云平臺API

最近由于工作原因又開始搗鼓OceanBase&#xff0c;OceanBase云平臺(OCP)提供了強大的管理和監控功能&#xff0c;而且對外開放API接口&#xff0c;可以將部分監控整合到自己的平臺&#xff0c;所以寫了個Java調用OCP API的demo做為自己的技術儲備&#xff0c;也想分享給大家。也…

linux下mysql的定時備份

備份是容災的基礎&#xff0c;是指為了防止系統出現操作或系統故障導致數據丟失&#xff0c;而將全部或部分數據集合從應用主機的硬盤或陣列復制到其他的存儲介質的過程為什么備份 硬件故障軟件故障誤操作病毒入侵保留歷史記錄災難性事件 存儲介質 光盤磁帶硬盤磁盤陣列DAS:直接…

[leetcode]文件組合

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<vector<int>> fileCombination(int target) {vector<vector<int>> vec;vector<int> res;int sum 0, limit (target - 1) / 2; // (target - 1) / 2 等效于 target /…

一些你可能不知道的前端小優化- ??(?????)

前言 以前寫css和html和一些原生DOM操作&#xff0c;感覺寫完就完事了。從來沒有考慮過一些性能優化的問題&#xff0c;剛好最近學完了瀏覽器的事件循環和瀏覽器的工作流程。今天大家分享一些我剛學習到的前端小優化。 瀏覽器的工作流程 瀏覽器的渲染過程大致分為以下幾個階…

Windows 11內置一鍵系統備份與還原 輕松替代Ghost

面對系統崩潰、惡意軟件侵襲或其他不可預見因素導致的啟動失敗&#xff0c;Windows 7~Windows 11內置的系統映像功能能夠迅速將您的系統恢復至健康狀態&#xff0c;確保工作的連續性和數據的完整性。 Windows內置3種備份策略 U盤備份&#xff1a;便攜且安全 打開“創建一個恢…

Ubuntu20.04突然沒網的一種解決辦法

本來要學一下點云地圖處理&#xff0c;用octomap庫&#xff0c;但是提示少了octomap-server庫&#xff0c;然后通過下面命令安裝的時候&#xff1a; sudo apt install ros-noetic-octomap-server 提示&#xff1a;錯誤:7 https://mirrors.ustc.edu.cn/ubuntu focal-security …

MWC上海展 | 創新微MinewSemi攜ME54系列新品亮相Nordic展臺

6月28日&#xff0c; 2024MWC上海圓滿落幕&#xff0c;此次盛會吸引了來自全球124個國家及地區的近40,000名與會者。本屆大會以“未來先行&#xff08;Future First&#xff09;”為主題&#xff0c;聚焦“超越5G”“人工智能經濟”“數智制造”三大子主題&#xff0c;探索討論…

leetcode熱題HOT42. 接雨水

一、問題描述&#xff1a; 給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖&#xff0c;計算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 二、解題思路&#xff1a; 思路1&#xff1a;通過動態規劃的預處理方式&#xff0c;分別計算每個柱子左右兩側的最大高度&…

js數據庫多級分類按樹形結構打印

可以使用 JavaScript 來按層級打印 categories 數組。首先&#xff0c;需要將這個數組轉換成一個樹形結構&#xff0c;然后再進行遞歸或者迭代來打印每個層級的內容。 以下是一個示例代碼&#xff0c;用來實現這個功能&#xff1a; const categories [{ id: 2, name: "…

java如何刪除字符串內部分字符

java中&#xff0c;如果要刪除字符串內部分字符&#xff0c;需要用delete方法&#xff0c;前提字符串是可變字符串StringBuffer類型的。 delete方法的語法格式是sbf.delete(start,end) 其中&#xff0c;sbf是任意StringBuffer對象&#xff0c;start是起始索引&#xff0c;end…

AQ mode

算法原理概述 AQ即adaptive quantization(自適應量化),屬于宏塊級別碼流分配的范疇,在一幀的宏塊之間調整碼率分配,x264中AQ算法的核心內容是:復雜宏塊使用大的QP,簡單宏塊使用小的QP。x264如何定義復雜?x264是根據宏塊內像素值的方差來評價宏塊復雜性,方差越大,宏塊…

溶解氧(DO)理論指南(1)

轉載自梅特勒官網資料&#xff0c;僅用于學習交流&#xff0c;侵權則刪&#xff01; 溶解氧理論指南 1 溶解氧(DO)原理1.1 溶解氧和分壓1.2 氧氣在水中的溶解度1.3 溶解氧對生物的重要性1.4 溶解氧對工業的重要性 1 溶解氧(DO)原理 氧是宇宙中第三大常見元素&#xff0c;也是…

JavaScript(6)——數據類型轉換

為什么需要類型轉換&#xff1f; JavaScript是弱數據類型&#xff1a;JavaScript不知道變量到底屬于哪種數據類型&#xff0c;只有賦值了才清除 使用表單&#xff0c;prompt獲取的數據默認為字符串類型&#xff0c;此時不能直接進行算數運算 隱式轉換 某些運算符被執行時&am…

力扣hot100-鏈表

文章目錄 概要鏈表的類型 題目&#xff1a;相交鏈表題解 概要 鏈表&#xff08;Linked List&#xff09;是數據結構中的一種&#xff0c;用于存儲具有線性關系的數據。在鏈表中&#xff0c;每個元素稱為一個節點&#xff08;Node&#xff09;&#xff0c;每個節點包含兩個部分…

”極大似然估計“和”貝葉斯估計“思想對比

極大似然估計&#xff08;Maximum Likelihood Estimation, MLE&#xff09;和貝葉斯估計&#xff08;Bayesian Estimation&#xff09;是統計學中兩種重要的參數估計方法&#xff0c;它們在思想和應用上有著顯著的差異。下面我將詳細對比這兩種方法的思想&#xff0c;并分別舉出…

兩次叛國投敵,沒有禍及子孫反而家族長盛不衰的傳奇

這個人就是韓國國王韓王信&#xff0c;漢朝八大異姓王之一。 第一次叛國投敵&#xff0c;發生在楚漢爭霸時期。有一次他的軍隊被項羽包圍&#xff0c;于是選擇了投降。不過&#xff0c;這是權宜之計&#xff0c;不久就借機回到劉邦陣營。 第二次叛國投敵&#xff0c;發生在西…