zoukankan      html  css  js  c++  java
  • 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:UsersAdministratorAppDataLocalLowUnityWebPlayer
    

    loader(插件)

    路径:UnityWebPlayerloader

    功能:Unity为浏览器提供的插件

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

    mono(运行时)

    路径:UnityWebPlayermonoStable5.x.x

    功能:为mono提供运行时

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

    UnityWebPlayermonoStable5.x.xDatalib

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

    player(播放器)

    路径:UnityWebPlayerplayerStable5.x.x

    功能:网页播放器?真正的播放器,类似flash player?

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

    UnityWebPlayerplayerStable5.x.xData

    • lib
    • unity default resources

    UnityWebPlayerplayerStable5.x.xDatalib

    • 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*AppDataLocalTempUnityWebPlayerlog

    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是运行失败的。

  • 相关阅读:
    【题解】[USACO08DEC-Gold] Trick or Treat on the Farm
    【题解】[NOIP2015-TG] 信息传递
    【题解】[JLOI2011] 飞行路线
    平衡树
    斜率优化 dp 总结
    题解【P1833 樱花】
    题解【CodeForces 910A The Way to Home】
    三角恒等变换公式
    题解【洛谷 P1246 编码】
    生成函数(母函数)详解
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/5800817.html
Copyright © 2011-2022 走看看