Unity3D技術之本地客戶端開發入門

歡迎來到unity學習unity培訓unity企業培訓教育專區,這裏有很多U3D資源U3D培訓視頻U3D教程U3D常見問題U3D項目源碼,我們致力於打造業內unity3d培訓、學習第一品牌。

本地客戶端開發入門

本地客戶端 (NaCl) 是 Google 提供的新技術,其允許您在 Web 頁面嵌入本地可執行代碼,以便您在無需安裝插件的情況下部署性能非常強的 web 應用程序。目前,NaCl 僅支持在 Windows、Mac OS X 和 Linux(含可用的 Chrome 操作系統支持)上使用 Google Chrome,但這是一項開源技術,我們以後可將此技術移植到其他瀏覽器平臺。

Unity 3.5 爲使用 NaCl 運行 Unity 網頁播放器 (Web Player) 目錄(.unity3d 文件)提供支持,這無需在 Chrome 上安裝插件的情況下運行目錄。這是早期版本 – 性能穩定,但不支持 Unity 網頁播放器 (Web Player) 支持的所有功能,因爲 NaCl 是一個不斷更新的平臺,不支持瀏覽器插件中支持的所有功能。

在 NaCl 上構建和測試遊戲

在 NaCl 上構建和測試遊戲非常簡單。您需要安裝 Google Chrome。只需在發佈設置 (Build Settings) 中選擇 “網頁播放器 (Web Player)”,然後選中 “啓用 (Enable) NaCl” 複選框。這將確保生成的 unity3d 文件可在 NaCl 上運行(通過添加 NaCl 所需的 GLSL ES 着色器和禁用 NaCl 不支持的動態字體),並安裝 NaCl runtime 和 html 文件,以在 NaCl 中運行遊戲。如果單擊構建並運行 (Build & Run),Unity 會將播放器作爲 Chrome 中的應用程序安裝起來,並自動運行播放器。

使用 NaCl 安裝遊戲

在當前狀態的默認情況下不會啓用 Chrome 通用網頁。將 NaCl 播放器嵌入至任何網頁並指導用戶在 chrome://flags 中手動啓用 NaCl,目前,安裝並立即運行 NaCl 遊戲的唯一方法是在 Chrome Web 商店 (Store)(默認情況下將啓用 NaCl)部署這些遊戲。請注意,Chrome Web 商店 (Store) 是公開且不受限制的,可供您託管嵌入至自己網站的內容,或使用自有的付款處理系統(如果需要)。根據計劃,Google 完成名爲可移植 NaCl (PNaCl) 的新技術的開發工作後,NaCl 的侷限性將得到改觀,此技術允許您將可執行文件作爲 LLVM 位碼安裝,從而讓 NaCl 應用程序擺脫任何特定 CPU 體系結構的影響。然後應在任意網站上啓用 NaCl。

構建尺寸注意事項

構建 NaCl 時,您可能會發現 “unity_nacl_files_3.x.x” 文件夾非常大,超過 100 MB。您可能想知道,每次運行 NaCl 目錄時是否需要下載所有這些數據,答案通常是“不需要”。Chrome Web 商店 (Store) 有兩種方式提供應用,一種是託管應用,一種是打包應用。如果以打包應用方式提供目錄,則將在安裝時將以壓縮的存檔文件形式下載所有數據,然後將所有數據存儲在用戶磁盤上。如果以託管應用方式提供內容,則每次將從 web 下載數據。但是,nacl runtime 將只從 “unity_nacl_files_3.x.x” 文件夾下載相關體系結構 (i686 or x86_64),正確配置 web 服務器後,系統將在傳輸時壓縮數據,待傳輸的實際數據大小應爲 10 MB 左右(使用物理剝離可縮減數據大小)。”unity_nacl_files_3.x.x” 文件夾包含可設置 Apache “.htaccess” 文件,以便在傳輸時壓縮數據。如果正在使用其他 web 服務器,可能需要自己進行設置。

NaCl 的侷限性

NaCl 並非支持常用 Unity 網頁播放器 (Web Player) 的所有功能。後續版本的 Chrome 和 Unity 將支持其中許多功能。目前,NaCl 不支持以下這些功能:

  • 網絡攝像頭紋理 (Webcam Textures)

  • 遊戲杆輸入 (Joystick Input)

  • 緩存 (Caching)

  • 物質 (Substances)

  • 動態字體 (Dynamic Fonts)

  • 除 WWW 類之外的其他類型組成的網絡

  • 分析器未運行,因爲它需要將網絡連接至編輯器 (Editor)。

  • 和標準網頁播放器插件一樣,NaCl 目前不支持本地 C/C++ 插件。

NaCl 支持以下功能,但存在一些侷限性:

  • 深度紋理:

深度紋理適用於製作實時陰影和其他效果。Unity NaCl 支持深度紋理,但 Chrome 的 OpenGL ES 2.0 實施不支持所需的 Windows 擴展,因此,深度紋理不適用於 OS X 和 Linux。

  • 其他圖形功能:

NaCl 使用 OpenGL ES 2.0,不支持普通 OpenGL 中的所有擴展。這表示有些功能受擴展影響,如 NaCl 目前不支持線性和 HDR 光照功能。另外,着色器 (Shaders) 需要編譯爲 GLSL 着色器。目前,並非所有內置 Unity 着色器都支持此功能,例如,GLSL 着色器不支持屏幕空間環境光遮蔽 (Screen Space Ambient Occlusion)。

  • 光標鎖定:

支持光標鎖定,但僅限於全屏模式。將來的 Chrome 版本計劃在窗口模式下支持光標鎖定。

  • NullReferenceExceptions(空引用異常):

NaCl 不支持硬件異常處理。這表示腳本代碼中的 NullReferenceException 導致 NaCl 崩潰。但是,您可以將 softexceptions=”1″ 傳送至嵌入的參數(構建開發播放器時由 Unity 自動設置),以告訴 mono 檢查軟件中是否存在 NullReferences(空引用),如有,則將減慢腳本的執行速度,但不會導致崩潰。

Google 未對使用 NaCl 設定任何系統要求,但 Mac 的操作系統至少應爲 OS X 10.6.7,我們發現其在舊系統中運行效果不佳 – 尤其是使用舊 GPU 或圖形驅動程序和主內存較小的系統。如需使用目標舊硬件,您會發現 網頁播放器 (Web Player) 可提供更好的性能。

全屏模式:

設置 Screen.fullScreen 屬性即支持全屏模式,您只可在用戶釋放鼠標按鈕的情況下進入全屏模式。NaCl 實際上不會更改硬件屏幕分辨率,所以 Screen.resolutions 將只返回當前的桌面分辨率。但是,Chrome 支持渲染更小的後臺緩衝區,然後將位圖放大至屏幕大小。因此,請求更小的分辨率,然後桌面分辨率通常將支持全屏模式,但會導致根據 GPU 縮放屏幕,而非改變全屏模式。

WWW 類:

WWW 類支持 NaCl,但需要遵循 Unity 網頁播放器 (Web Player) 的不同安全政策。Unity 網頁播放器 (Web Player) 使用與閃存相似的 crossdomain.xml 政策文件,但 Unity NaCl 必須遵循 NaCl 遵循的跨域安全機制。實際上,要訪問託管播放器的其他域中的 html 文檔,需要將 web 服務器配置爲傳送 Access-Control-Allow-Origin 響應請求頭,以便讓此域託管播放器。

在 NaCl 中與瀏覽器 javascript 通信

NaCl 支持使用 JavaScript 與網頁互動,並且這與使用 Unity 網頁播放器 (Web Player) 互動很相似。這和從 html javascript 發送消息至 Unity 的語法有所不同,它必須通過 NaCl 模塊。使用默認的 Unity 生成的 html 時,此代碼將可以運行:

document.getElementById(‘UnityEmbed’).postMessage(“GameObject.Message(parameter)”);

要從 NaCl 調用瀏覽器 JavaScript 代碼,可調用 Application.ExternalCall 或 Application.ExternalEval。但是,Google 已撤銷對 Chrome 應用 Eval 函數的支持,因此,將其發佈至 Chrome Web 商店也無法運行。爲解決此問題,您可以使用 Application.ExternalEval 發送您在 unity_nacl.js moduleMessage 類函數中截獲的字符串,或將應用設置爲您滿意的沙箱 (Sandbox)。

日誌

NaCl 不允許訪問用戶文件系統,所以不會編寫日誌文件。而會將所有日誌輸出到標準輸出流。要在 NaCl 中查看播放器日誌:

  • 在編輯器中執行一次構建並運行 (Build & Run),確保您的遊戲已作爲應用程序安裝到 Chrome。

  • 在 Mac OS X 上從終端啓動 Chrome,然後單擊其圖標啓動此應用程序。您應該可以在終端看到 Unity 播放器輸出的日誌。

  • Windows 系統也一樣,但您需要設置 NACL_EXE_STDOUT 和 NACL_EXE_STDERR 環境變量,並使用不帶沙箱的選項啓動 Chrome。

  • 更多精彩請點擊 http://www.gopedu.com/


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章