U3D-頁游-檢測機制-webplayer-調試方法


前言

頁游目前有兩個客戶端入口:

  1. 網頁端 (unity webplayer)
  2. 游戲微端 (unity standalone)

關於微端的技術,可參考我之前的文章:

dotNet開發游戲微端

游戲微端的多渠道思路和簡易的自動化打包工具

總體思想

近日為提高頁游的轉化率,在做頁游的檢測機制,現把這個檢測機制的思想及相關知識分享一下。大概就是瀏覽器-webplayer插件-操作系統-瀏覽器的一些信息檢測和處理。

總體思想是,如果玩家不能通過網頁啟動游戲,根據操作系統區分,WIN7及以上優先安裝微端,XP或其它操作系統建議下載webplayer插件

PS:關於webplayer 技術是否過時,官方是否不支持之類話題,此處不過多的討論,如果是新的網頁游戲項目建議使用webgl開發。

檢測腳本:https://github.com/zhaoqingqing/blog_samplecode/blob/master/web-w3c/detect-for-webplayer.js

大致的原型檢測流程圖如下:

機制流程圖

測試環境

  • windows 10 x64
    • ie 11 ,edge ,firefox 48 , 360極速瀏覽器8.7-chrome50
    • ie Test
  • windows 7 x64(SP1)
  • ie 11 ,firefox 48, chrome 52, 360極速瀏覽器8.7-chrome50
  • windows xp x86(官方原版)
  • ie 6 ,firefox 48, chrome 52

Unity Webplayer

Player Plugin Mono

網頁播放器是由3個組件所構成的,分別是插件,播放器和Mono。播放器是執行你的游戲並為你加載資源的Unity運行時。它是和你制作Standalone游戲的時候所使用的運行時是一樣的(或多或少)。

這個運行時需要Mono運行正確。(因為你的游戲使用的JavaScript、C#或者Boo腳本是需要依賴於Mono的)。

最后,這個插件是連接網頁瀏覽器和運行時的中間件。該插件在Windows系統下對於IE瀏覽器下是ActiveX控件(OCX)的形式,對於其他類型的瀏覽器則是NPAPI-style動態連接庫,而Mac下則是一個.plugin。

摘自:http://www.ceeger.com/Manual/TroubleShootingWebplayer.html

安裝unity webplayer插件之后,在以下路徑可以看到webplayer插件的一些文件

c:\Users\Administrator\AppData\LocalLow\Unity\WebPlayer\

loader(插件)

路徑:Unity\WebPlayer\loader\

功能:Unity為瀏覽器提供的插件

  • UnityWebPluginAX.ocx
  • npUnity3D32.dll
  • UnityWebPlayerNP.map
  • info.plist

mono(運行時)

路徑:Unity\WebPlayer\mono\Stable5.x.x\

功能:為mono提供運行時

  • Data\
  • mono-1-vc.dll
  • info.plist

Unity\WebPlayer\mono\Stable5.x.x\Data\lib\

  • System.Core.dll
  • System.dll
  • mscorlib.dll
  • Mono.Security.dll

player(播放器)

路徑:Unity\WebPlayer\player\Stable5.x.x\

功能:網頁播放器?真正的播放器,類似flash player?

  • Data\
  • wrap_oal.dll
  • webplayer_win.dll
  • info.plist

Unity\WebPlayer\player\Stable5.x.x\Data\

  • lib\
  • unity default resources

Unity\WebPlayer\player\Stable5.x.x\Data\lib\

  • UnityEngine.dll
  • CrossDomainPolicyParser.dll

CrossDomainPolicyParser(跨域政策解析器)

檢測操作系統和瀏覽器

檢測操作系統和瀏覽器信息

開源JS腳本:https://github.com/bestiejs/platform.js

使用方法:(建議在瀏覽器的控制台中運行)

  • 檢測操作系統
    • platform.os.family(家族): Windows XP,7,NT,版本:Server R2 10等
  • 檢測瀏覽器
    • platform.name; platform.version,比如chrome 54,IE 11,Firefox 48 等

瀏覽器是否安裝webplayer

對於chrome 52(不支持webplayer),假如你的操作系統上安裝了webplayer插件,那么可以檢測出安裝了webplayer,但如何檢測是否可以運行呢?

方法一
IE內核使用ActiveX,其它內核使用插件檢測,mimeType
資料:http://docs.unity3d.ru/Manual/Detecting the Unity Web Player using browser scripting.html

//just install in os , not detect support
function HasInstallWebPlayer() {
    var tInstalled = false;
    if (navigator.appVersion.indexOf("MSIE") != -1 &&
        navigator.appVersion.toLowerCase().indexOf("win") != -1) {
        tInstalled = detectUnityWebPlayerActiveX();
    } else if (navigator.mimeTypes && navigator.mimeTypes["application/vnd.unity"]) {
        if (navigator.mimeTypes["application/vnd.unity"].enabledPlugin &&
            navigator.plugins && navigator.plugins["Unity Player"]) {
            tInstalled = true;
        }
    }
    return tInstalled;
}

方法二

function GetUnity() {
        if (typeof unityObject != "undefined") {
            return unityObject.getObjectById("unityPlayer");
        }
        return null;
    }

WebPlayer是否運行成功

參考資料:http://www.ceeger.com/Manual/Working_with_UnityObject.html

通過unity提供的UnityObject.js來檢測,UnityObject簡化了Unity的內容嵌入到HTML中。它具有檢測Unity網絡播放器插件的功能,初始化網絡播放器的安裝和嵌入Unity的內容

注意事項

  • 在WIN 10 + IE 11 安裝了web player,但運行失敗
  • 360極速瀏覽器 使用chrome50的內核,但依然可以運行webplayer(win 10 x64)
function UnityRunCallback(result) {
    var unityDiv = document.getElementById('unityPlayer');
    if (!result.success) {
        alert("webplayer 啟動失敗");
    }
    alert("webplayer 啟動成功");
}

function RunUnity(){
    var width = document.documentElement.clientWidth;
    var height = document.documentElement.clientHeight;
    var params = {
        disableContextMenu: true,
        disableExternalCall: false,

        backgroundcolor: '000000',
        bordercolor: "000000",
        textcolor: "FFFFFF"
    }
    unityObject.embedUnity("unityPlayer", "WebPlayer.unity3d", width, height, params, null, UnityRunCallback);
 }

JS技術知識

  • string 轉int
  • Number 或 parseInt(建議)
  • 判斷 object是否為null
  • typeof xxobj == "undefined"

JS全局函數,比window.onload 還更早執行,如下所示:

if (typeof unityObject != "undefined") {
    var width = document.documentElement.clientWidth;
    var height = document.documentElement.clientHeight;
    var params = {
        disableContextMenu: true,
        disableExternalCall: false,
    };
    unityObject.setBaseDownloadUrl("http://webplayer.unity3d.com/download_webplayer-3.x");
    //通過webplayer自啟動,在callback中處理
    unityObject.embedUnity("unityPlayer", "WebPlayer.unity3d", width, height, params, null, unityLoaded);
}

webplayer調試

瀏覽器是否可運行webplayer

  1. 瀏覽器訪問 http://unity3d.com/cn/webplayer/setup

如果當前使用的瀏覽器支可運行web player,則可以看到webplayer的版本號和緩存的文件信息,否則運行失敗。

查看游戲的運行日志

On Windows 7 the debug log is located at C:\Users*Your User Name Here*\AppData\Local\Temp\UnityWebPlayer\log

webplayer調試模式

在瀏覽器中調試Unity web player的方法:按住 ALT鍵,然后點擊右鍵 - Release Channel - Dev

調用瀏覽器的控制台打印日志

在unity的腳本中(C#)調用下列方法,可以將日志打印在瀏覽器的console

Application.ExternalCall( "console.log", "my log message" );

參考:http://stackoverflow.com/questions/25860597/unity-web-how-to-show-debug-log-in-browser-inspector-rather-then-library-lo

擴展資料

IE6倒計時

查看IE6在各國家的占用率
https://developer.microsoft.com/en-us/microsoft-edge/ie6countdown/

瀏覽器官網下載

Firefox 火狐
https://www.mozilla.org/zh-CN/firefox/new/

Chrome 離線版

https://support.google.com/chrome/answer/126299?hl=zh-Hans

https://www.google.com/chrome/browser/desktop/index.html?platform=win&extra=stablechannel&standalone=1

https://www.zhihu.com/question/19981495

====== 如安裝遇到錯誤碼:0x80004002 ,請自行科普

擴展閱讀

unity3d webplayer UnityObject 你不知道的秘密

瀏覽器運行webplayer測試

下面以各個瀏覽器在安裝webplayer插件之后,運行webplayer的測試,因操作系統環境,或瀏覽器是否官網版 等原因,存在一定的局限性,歡迎各位指正。

微軟

  • xp

    • IE 6.7 運行失敗
  • win 7

    • IE 9,10,11 運行成功
  • win10

    • IE 11 運行成功
    • edge 不支持

firefox

firefox 全系列運行成功

PS: firefox 是否存在部分版本可以運行?

google

chrome45及以上運行失敗,之前的版本則可以運行

chrome 45 移除了NPAPI

chrome地址欄輸入 chrome://plugins/ 查看chrome啟用的插件

PS:國產基於chrome內核的瀏覽器是否有做過修改?比如基於chrome 50但也可以運行webplayer成功,但google官方下載的chrome是運行失敗的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM