1. 程式人生 > >unity中的web player與webGL

unity中的web player與webGL

unity開發網頁遊戲,釋出的時候可以選擇web player跟webGL。unity5.4版本以後釋出只能選擇webGL,web player能用的最高版本是5.3.8。兩者比較如下:

Web Player

優點

  • 成熟:在開發過程中遇到問題,在論壇或其它地方可以找到答案
  • 穩定:bug更少,經過Unity不同版本的迭代更新,web player技術穩定
  • 輕量級:開啟網頁即可進行遊戲,不需要安裝客戶端

缺點

  • 外掛支援:瀏覽器需要安裝外掛來支援unity3d遊戲
  • 停止支援:chrome從2015年9月後的45版本停止支援NPAPI plugin 包括web player,後面的chrome版本執行不了web player
  • 檔案限制:出於安全原因,沒有本地databases或者其它Streaming Assets

http://www.gameflare.com/news/article/how-to-run-unity-games/

chrome歷史版本下載:http://www.chromedownloads.net/chrome64win/

檢視chrome版本:chrome://version/ 或者點選 幫助->關於google chrome 

chrome44版本及以下版本可以執行web player,設定:瀏覽器裡輸入 chrome://flags/#enable-npapi ,啟用NPAPI,重啟瀏覽器,安裝web player外掛,啟用web player外掛

WebGL

優點

  • 無外掛:firefox及chrome無需外掛即可支援
  • 新事物:技術在更新迭代,在未來也許webgl會替代web player
  • 美好的未來:在移動市場,google及mozilla大力支援webgl

缺點

  • Audio/瀏覽器:音訊方面目前僅僅支援mp3,IE不支援
  • 不穩定:目前bug和坑比較多,因技術新使用人群較少,這個平臺遇到的bug,論壇上比較難找到解答
  • 效能:和原生代碼相比,webgl在某些方面效能較低下,比如支援多執行緒的3D物理
  • 檔案大:打包檔案的size比web player更大
  • 打包慢:build時等待的時間長,使用新技術il2cpp

如果選擇webGl,那麼網路socket要選擇webSocket,unity中帶System.Net相關socket都不能用,只能用webSocket相關的庫(需下載),同時伺服器中需要相應的解析webSocket,先握手後才能用socket進行通訊。web player則沒有這個限制,socket正常使用。下面就web player的開發與釋出部署,說下相關內容。

1.在呼叫connect之前,先呼叫 Security.PrefetchSocketPolicy(ip, 843, 3000)。這是Unity WebPlayer Security SandBox機制,Unity3d為Web Player平臺搞了一個security SandBox機制,Only在Web Player的安全機制中,在使用Socket時需要伺服器配置一個服務安全策略。如果沒有這方面處理,Security SandBox會阻止程式的Socket連線,導致不能通訊。

Unity提供了一個“sockpol.exe”這麼一個工具,在“...\Unity\Editor\Data\Tools\SocketPolicyServer“路徑下有sockpol.exe和它的原始碼。如果你的伺服器端是Windows平臺的話,直接Copy一個sockpol.exe到伺服器端,在CMD中執行

 cd D:\softinstalled\unity5.3.8\Unity\Editor\Data\Tools\SocketPolicyServer

sockpol --all

即可為伺服器端配置好Security SandBox安全策略。

sockpol.exe乾的活就是監聽Web Player平臺獲取Security SandBox安全策略時需要連線伺服器端的843埠,監聽到843埠有請求時,傳送給請求的客戶端一個crossdomain.xml配置,內容為標準的crossdomain.xml檔案格式:

<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" to-ports="1-65536"/>
</cross-domain-policy>

這樣客戶端就能獲取到Security SandBox安全策略並進行網路活動了。其中,執行sockpol.exe的引數--all的意義就是設定伺服器的Security SandBox安全策略為允許任何IP訪問伺服器的任何埠。

如果是linux伺服器,寫一個指令碼:

#!/bin/sh
while true; do echo '<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" to-ports="1-65536"/>
</cross-domain-policy>' | nc -l 843; done

儲存為serverPolicy.sh。然後讓指令碼在後臺執行:

nohup shserverPolicy.sh

nohup命令會忽略SIGHUP訊號,從而終端退出時不會影響到後臺作業。然後啟動其他遊戲伺服器程序

2.搭建IIS,外部通過IP直接訪問。web服搭建在windows上,遊戲服在linux上。釋出的web player遊戲的html改為index.xml,增加MIME副檔名為.unity3d,型別為 application/octet-stream

3.網頁上檢視遊戲執行日誌。On Windows 7 the debug log is located at C:\Users*Your User Name Here*\AppData\Local\Temp\UnityWebPlayer\log

在瀏覽器中除錯Unity web player的方法:按住 ALT鍵,然後點選右鍵 - Release Channel - Dev

4.如果需求要是有POST請求返回資料,則要在IIS下web.config中新增

5.html中檢視瀏覽器版本的方法:

<script>

document.write("使用者代理: " + navigator.userAgent);

</script>

判斷chrome版本的方法:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-browser/0.0.8/jquery.browser.min.js"></script>
<script>
$(document).ready(function(){

	var ver = navigator.userAgent;//獲取使用者端的Web瀏覽器版本號  
	var a= ver.indexOf("Chrome");//檢測特殊字串"MSIE"的位置
	var versionNum = parseFloat(ver.substring(a+7,a+9));

	var isChrome = navigator.userAgent.toLowerCase().match(/chrome/) != null;
	if (isChrome && versionNum >= 45) { //detect Chrome 45+
				
	var myJsonString = JSON.stringify({ title: 'Three', file: 'http://192.168.6.107:8086/webplayer0710.unity3d', type: "unity", width: 800, height: 600 });
	try{ //IE8 does not support window.btoa   
		var insert_data = window.btoa(myJsonString); 
	}catch(e){ 
	functionToHandleError(e);
	}
				
					 
	document.write('<center><a href="gameload://' + insert_data + '/"><img alt="Play game with Gameload!" src="http://data.gameload.top/download/playgameload.png" /></a><br /><br />Install Gameload to play Unity games<br /><a href="http://data.gameload.top/download/gameload.exe" title="Install Gameload now!"><img alt="Install Gameload now!" src="http://data.gameload.top/download/getgameload.png" /></a></center>');
			}
		});
</script>


6.web player遊戲下載美術資源失敗,需要IIS中的 MIME型別新增相應字尾