U3D-页游-检测机制-webplayer-调试方法
前言
页游目前有两个客户端入口:
- 网页端 (unity webplayer)
- 游戏微端 (unity standalone)
关于微端的技术,可参考我之前的文章:
总体思想
近日为提高页游的转化率,在做页游的检测机制,现把这个检测机制的思想及相关知识分享一下。大概就是浏览器-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
如果当前使用的浏览器支可运行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" );
扩展资料
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.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 是否存在部分版本可以运行?
chrome45及以上运行失败,之前的版本则可以运行
chrome 45 移除了NPAPI
chrome地址栏输入 chrome://plugins/ 查看chrome启用的插件
PS:国产基于chrome内核的浏览器是否有做过修改?比如基于chrome 50但也可以运行webplayer成功,但google官方下载的chrome是运行失败的。
U3D-页游-检测机制-webplayer-调试方法的更多相关文章
- Angular 4 变更检测机制 ChangeDetectorRef 使用方法
1.在angular 2中,回调函数的返回结果,不会自动更新视图层的显示,可以用 ChangeDetectorRef 来驱动angular更新视图. import {ChangeDetectorRef ...
- Perl的调试方法
来源: http://my.oschina.net/alphajay/blog/52172 http://www.cnblogs.com/baiyanhuang/archive/2009/11/09/ ...
- Linux内核调试方法总结
Linux内核调试方法总结 一 调试前的准备 二 内核中的bug 三 内核调试配置选项 1 内核配置 2 调试原子操作 四 引发bug并打印信息 1 BUG()和BUG_ON() 2 ...
- 页游安全攻与防,SWF加密和隐藏密匙
原文链接:http://netsecurity.51cto.com/art/201211/364775.htm 页游,最最核心的就是客户端(swf)与服务端的游戏通信了.游戏通信产生的封包,内容是否可 ...
- 基于Adobe Flash平台的3D页游技术剖析
写在前面 从黑暗之光,佛本是道,大战神的有插件3D页游.再到如今的魔龙之戒. 足以证明,3D无插件正在引领页游技术的潮流. 目前,要做到3D引擎,有以下几个选择. 说到这里,我们发现.这些都不重要. ...
- Linux内核调试方法总结【转】
转自:http://my.oschina.net/fgq611/blog/113249 内核开发比用户空间开发更难的一个因素就是内核调试艰难.内核错误往往会导致系统宕机,很难保留出错时的现场.调试内核 ...
- 【转】Linux内核调试方法总结
目录[-] 一 调试前的准备 二 内核中的bug 三 内核调试配置选项 1 内核配置 2 调试原子操作 四 引发bug并打印信息 1 BUG()和BUG_ON() 2 dump_sta ...
- Thermostat:双层存储结构的透明巨页内存管理机制
这是一篇由密歇根大学的Neha Agarwal 和 Thomas F. Wenisch,发表在计算机系统顶会ASLOS的论文,Thermostat: Application-transparent P ...
- Windows 下常见的反调试方法
稍稍总结一下在Crack或Rervese中比较常见的一些反调试方法,实现起来也比较简单,之后有写的Demo源码参考,没有太大的难度. ①最简单也是最基础的,Windows提供的API接口:IsDebu ...
随机推荐
- ABP使用及框架解析系列 - [Unit of Work part.1-概念及使用]
前言 ABP ABP是“ASP.NET Boilerplate Project”的简称. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开 ...
- ASP.NET MVC搭建项目后台UI框架—7、统计报表
ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NET M ...
- Html之 IFrame使用,注意几点
0x01 iframe的跳出框架 0x02 iframe样式设置 0x03 iframe重置高度 1.首先来一个,跳出iframe的好方法,直接可以在Login.aspx页面使用. if (windo ...
- iOS 文件下载
iOS 视频音乐类等应用会用到“文件下载”.文件下载在iOS中的实现如下: 1.小文件下载 @interface ViewController () <NSURLConnectionDataDe ...
- SharePoint 2013 图文开发系列之可视化WebPart
有了WebPart开发的基础,再进行可视化WebPart开发,就容易多了.创建和开发过程,两者非常相似,下面,我们简单介绍下可视化WebPart的开发. 1.添加新项目,选择SharePoint 20 ...
- Java中的常见面试题
1.sleep()和wait()的区别: 两者都可以控制线性进程,阻塞进程.区别是: -----|sleep():释放CPU,不释放资源(锁).可以通过指定时间来使它自动醒来,时间不到只能调用iter ...
- 从汇编角度分析C语言的过程调用
➠更多技术干货请戳:听云博客 基本术语定义 1.系统栈(system stack)是一个内存区,位于进程地址空间的末端. 2.在将数据压栈时,栈是自顶向下增长的,该内存区用于函数的局部变量提供内存.它 ...
- n个元素的入栈顺序有多少种出栈顺序?
问题:w1.w2.w3.w4.w5,5个元素将会按顺序入栈,求出栈顺序有多少种情况. 先写一下结论方便记忆: 1个元素:1种 2个元素:2种 3个元素:5种 4个元素:14种 5个元素:42种 简单的 ...
- Wireshark设置interface 时提示“There are no interfaces on which a capture can be done ”
Wireshark设置interface 时提示“There are no interfaces on which a capture can be done ” 解决方法: 今天在电脑上安装了WIR ...
- 关于web页面性能测量指标与建议
首先看一个图: 注:右图在我们工作中经常用到 我们专注的web性能指标有那些? 1.页面加载时间 从页面开始加载到页面onload事件触发的时间.一般来说onload触发代表着直接通过HTML引用的C ...