Unity网页游戏
Unity网页游戏是跑在浏览器的UnityWebPlayer插件中的,运行的模式是webplayer.unity3d+html
在嵌入UnityWebPlayer的网页中会调用UnityObject2的initPlugin函数,将webplayer.unity3d作为参数传入来初始化Unity网页游戏的运行环境
注:游戏dll及其他托管dll在构建Web版本时都会写入到webplayer.unity3d文件中
拥有检测 Unity Web Player插件、初始化其安装和嵌入 Unity 内容的函数。可以将 UnityObject2.js 文件与 HTML 文件一起部署到网络服务器,
但最好是从 Unity 服务器中直接加载,地址为:http://webplayer.unity3d.com/download_webplayer-3.x/3.0/uo/UnityObject2.js 或 https://ssl-webplayer.unity3d.com/download_webplayer-3.x/3.0/uo/UnityObject2.js(以获得 https 支持)。
这样,您将始终使用到UnityObject2 最新版本。而且托管在 Unity 服务器上的 UnityObject2.js 文件被压缩了,使其变小,节约流量。
在Windows 系统Unity编辑器的Data\Resources 文件夹和 Mac OS X 中的Contents/Resources文件夹中可找到UnityObject2.js 源文件。
浏览器支持情况
由于各大浏览器厂商开始逐渐不支持浏览器插件,Unity5.4及之后的版本,UntiyWebPlayer被移除,只提供WebGL导出方式来支持网页游戏。UnityWebPlayer Road Map
支持UnityWebPlayer的浏览器有:
windows平台浏览器 -- IE系列(注:最新为IE11。win10开始使用Edge作为缺省浏览器,Edge是不支持插件的。另外为了访问需要插件的网站,win10也提供了IE浏览器)
mac os x平台浏览器 -- Safari
跨平台浏览器 -- Chrome 45前的版本、Firefox 52.0前的版本、Opera 37前的版本
国产浏览器 -- 如:QQ浏览器、360浏览器等 一般有2个模式:兼容模式(IE)和极速模式(Chrome内核)
尽管集成的Chrome内核版本高于45,这些国产浏览器一般都会对集成的Chrome内核做修改,让其能支持NPAPI插件的运行
注1:除了IE是使用ActiveX插件外,其他浏览器都是NPAPI插件
注2:Chrome 42版本开始缺省禁止NPAPI插件,但允许用户手动开启;到45版本则强制禁止了;但flashplayer仍然可以运行:chrome://settings/content/flash
注3:Firefox 52.0版本强制禁止除flashplayer外的所有NPAPI插件
注4:PPAPI和NPAPI说明
PPAPI是专为chrome内核而开发的,能够在各种浏览器、操作系统和移动设备上使用,软件短小精悍,功能强大,兼容性高。
NPAPI是当今最流行的插件架构,由Netscape开发后Mozilla维护,几乎支持所有的浏览器,不过它存在很大的安全隐患,插件可以窃取系统底层权限,发起恶意攻击。
2010年,Google在原有NPAPI(Netscape Plugin API)基础上开发了新的PPAPI(Pepper Plugin API),将外挂插件全部放到沙盒里运行,
2012年Windows、Mac版本的Chrome浏览器先后升级了PPAPI Flash Player。
PPAPI的flash相较于NPAPI来讲,内存占用更大,因为全在沙盒里面运行,而且flash每次更新基本上都是修补安全漏洞。
PPAPI:Opera 15、Chrome
NPAPI:适用于FireFox、Safari、Opera 12.17版以下
UnityWebPlayer插件
下载地址:https://unity3d.com/cn/webplayer/
https://unity3d.com/cn/webplayer/setup
http://webplayer.unity3d.com/download_webplayer-3.x/UnityWebPlayer.exe
http://webplayer.unity3d.com/download_webplayer-3.x/UnityWebPlayerFull.exe
如果需要特定版本的UntiyWebPlayer,可以安装对应的Unity编辑器,在编辑器目录下有对应的UnityWebPlayer.exe安装文件
形如:D:\Program Files (x86)\Unity\Editor\UnityWebPlayer.exe
Directory键值记录是UnityWebPlayer的安装目录:%homepath%\AppData\LocalLow\Unity\WebPlayer
un.Directory键值记录是UnityWebPlayer卸载程序Uninstall.exe所在的目录
在IE中查询UnityWebPlayer插件的信息与运行状态:
win7 64bit Internet Explorer9:主菜单 -- 管理加载项
从控制面板中卸载UnityWebPlayer插件:
安装后的UnityWebPlayer目录结构 -- 安装在%homepath%\AppData\LocalLow\Unity\WebPlayer
player为Unity运行时框架,提供游戏运行的基本环境
mono虚拟机负责解释执行游戏脚本逻辑
loader为浏览器插件:IE下为ActiveX控件(ocx),其他浏览器为NPAPI的dll,Mac为.plugin文件
player\Beta-4.63.x.x\Data\lib及mono\Beta-4.63.x.x\Data\lib中的dll均为托管dll
player\Beta-4.63.x.x\Data\unity default resources及mono\Beta-4.63.x.x\Data\unity_web_old为webplayer资源文件(ui贴图,shader等等)
以下为UnityWebPlayer初始化过程中所访问的url链接(使用finddler捕捉到的)
http://10.123.102.142/resources/Client/junhongwang/NZWebTGame.unity3d
http://autoupdate-revision.unity3d.com/revisions.plist?content=http%3a%2f%2f10.123.102.142%2fresources%2fClient%2fjunhongwang%2fNZWebTGame.unity3d&page=http%3a%2f%2f10.123.102.142%2fresources%2fClient%2fjunhongwang%2fNZWebTGame_InnerNew.html&runtime=3.x.x&
http://webplayer.unity3d.com//Channels/a7fe7b7f3d1f/UnityPlayer3.x.x-win32.zip // 会下载到%homepath%\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\COFOLVJA\UnityPlayer3.x.x-win32.zip
http://webplayer.unity3d.com//Channels/a7fe7b7f3d1f/Mono3.x.x-win32.zip // 会下载到%homepath%\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\C3AYLT70\Mono3.x.x-win32.zip
注:UnityWebPlayer.exe仅仅包含loader目录、UnityBugReporter.exe和UnityWebPlayerUpdate.exe文件
UnityWebPlayerFull.exe除了UnityWebPlayer.exe包含的内容外,还包含mono目录和player目录
UnityWebPlayer插件在初始化,会根据当前游戏用的runtime版本号,去安装目录中找是否已经存在对应版本的mono和player,若不存在则下载它们
运行时临时目录 -- %Temp%\UnityWebPlayer
+---UnityWebPlayer
+---log
| log_bb370ff473d10349836025afd6e6808f.txt //日志文件
| manager_77b9ab931e2f344884b164d4660a0d19.txt
|
\---temp
\---bb370ff473d10349836025afd6e6808f // 为了防止多个浏览器实例占用同一份dll,以下3个dll在运行每个实例前都会从UnityWebPlayer安装目录下拷贝
mono-1-vc.dll
webplayer_win.dll
wrap_oal.dll
IE临时目录
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Cache
下图为:win7 64bit Internet Explorer9的缓存目录
由于UnityWebPlayer沙盒安全限制,Unity网页游戏除了能读取浏览器缓存目录下的文件外,没有任何权限访问用户其他目录及文件
清除IE缓存命令:
rundll32.exe InetCpl.cpl,ClearMyTracksByProcess 8
开发调试技巧
在脚本中打印log到浏览器的console窗口中:
Application.ExternalCall( "BrowserLog", "my log message" );
然后在页面的Js脚本中增加函数:
<script type="text/javascript" language="javascript">
function BrowserLog( msg)
{
// log the message
try
{
if (console != null)
{
//控制台没有打开过时,该代码执行时会异常(注:控制台打开后又关闭则不会有问题),所以需要放在try-catch块中
//否则会导致后面alert语句不会执行
console.log(msg);
}
}
catch (ex)
{ } alert(msg);
}
</script>
或者直接使用以下语句:
Application.ExternalCall( "console.log", "my log message" );
使用Development模式运行游戏:
1. 需要在html页面中不要禁止右键菜单
2. 按住Alt键,在UnityWebPlayer插件上右键弹出如下快捷菜单(会多出一个Release Channel的菜单项)
3. 会下载%homepath%\AppData\LocalLow\Unity\WebPlayer\player\Beta-4.63.x.x-Development版本的UnityWebPlayer来运行游戏
输出的日志会包含堆栈信息
[2017-06-06 11:04:44 416]PublishLog:Device info:
DeviceId:d8c0a2227ec766787d43edbbba9fbd7a8d687a74
deviceType:Desktop
deviceModel:Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz (16313 MB)
deviceName:NICOCHEN-PC0
operatingSystem:Windows 7 Service Pack 1 (6.1.7601) 64bit
systemMemorySize:16313
graphicsDeviceName:NVIDIA GeForce GTX 660
graphicsDeviceVersion:Direct3D 9.0c [nvd3dum.dll 9.18.13.3788]
graphicsMemorySize:1989
graphicsShaderLevel:30
Screen Size:1440x900
DPI:96
ProcessorType: Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz
ProcessorCoreCount: 8 UnityEngine.Debug:Internal_Log(Int32, String, Object)
UnityEngine.Debug:Log(Object)
WNEngine.Logger:GeneralLog(ELogType, String, Object[])
WNEngine.Logger:PublishLog(String, Object[])
WNEngine.Logger:PrintIdentifyLog()
WNEngine.Logger:Init()
WNGameBase.GameFramework:Awake() (Filename: C:/buildslave/unity/build/artifacts/WebPlayerGenerated/UnityEngineDebug.cpp Line: 56)
Attach调试游戏
1. 需要在html页面中打开调试开关
2. 打开游戏项目工程,“调试” -- “Attach Unity Debugger”
UnityWebPlayer Security Sandbox(安全沙盒)
受UnityWebPlayer沙盒限制,在网页游戏逻辑里面访问web player级别不支持的方法或外部Native模块中方法,会抛出以下异常:
MethodAccessException: Attempt to access a private/protected method failed.
如果想在UntiyWebPlayer中使用Natvie模块中的功能,可通过间接绕行的方式来实现:
(1)写一个浏览器Plugin,在Plugin中调用Native模块
(2)在UntiyWebPlayer中通过ExternalCall调用js函数,在js函数中再调用Plugin中对应的函数,最终实现对Native模块的调用
参考
Unity网页游戏的更多相关文章
- 解决unity3d发布的网页游戏放到服务器上无法使用的问题
http://www.unity蛮牛.com/blog-2429-1226.html 第一次把unity3d发布的网页游戏放到服务器上(Win2003),发现无法使用.可以尝试以下办法. ...
- 【Unity】1.0 第1章 Unity—3D游戏开发和虚拟现实应用开发的首选
分类:Unity.C#.VS2015 创建日期:2016-03-23 一.简介 Unity是跨平台2D.3D游戏和虚拟现实高级应用程序的专业开发引擎,是由Unity Technologies公司研制的 ...
- 推荐21款最佳 HTML5 网页游戏
尽管 HTML5 的完全实现还有很长的路要走,但 HTML5 正在改变 Web,未来 HTML5 将把 Web 带入一个更加成熟和开放的应用平台.现在,越来越多的人尝试用 HTML5 来制作网页游戏等 ...
- [生活日记]参与unity非游戏行业开发者大会小结
今天下午花了半天时间公司全体都去人民广场参与了一个unity非游戏行业开发者大会,主要了解到unity这款全球顶尖之一的游戏引擎的一个发展史,从05年三个美国人技术研发开始,一直到12年开始引进中国, ...
- 自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药
自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm ...
- 自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析
自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm ...
- 自制Unity小游戏TankHero-2D(3)开始玩起来
自制Unity小游戏TankHero-2D(3)开始玩起来 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的.仅 ...
- 自制Unity小游戏TankHero-2D(2)制作敌方坦克
自制Unity小游戏TankHero-2D(2)制作敌方坦克 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的. ...
- 自制Unity小游戏TankHero-2D(1)制作主角坦克
自制Unity小游戏TankHero-2D(1)制作主角坦克 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的. ...
随机推荐
- 全网最全最详细的Windows下安装Anaconda2 / Anaconda3(图文详解)
不多说,直接上干货! 说明: Anaconda2-5.0.0-Windows-x86_64.exe安装下来,默认的Python2.7 Anaconda3-4.2.0-Windows-x86_64.ex ...
- Salesforce Sales Cloud 零基础学习(四) Chatter
Chatter是一个Salesforce实时协作应用程序,它允许你的用户一起工作.互相交谈和共享信息,不管用户角色或位置如何,连接.并激励用户在整个组织内高效工作. Chatter 让用户们在 Opp ...
- 监控报I/O问题,怎么办?
Linux系统出现了性能问题,一般我们可以通过top.iostat.free.vmstat等命令来查看初步定位问题.其中iostat可以给我们提供丰富的IO状态数据. 一.查询命令基本使用 1.命令介 ...
- Oracle 如何开启归档模式
Oracle开启归档 场景:某所的数据库没有开启归档,如何开启归档模式的文档. 1.查看oracle归档状态 SQL> archive log list; 数据库日志模式 非存档模式 //目前不 ...
- 闪电侠 Netty 小册里的骚操作
前言 即使这是一本小册,但基于"不提笔不读书"的理念,仍然有必要总结一下.此小册对于那些"硬杠 Netty 源码 却不曾在千万级生产环境上使用实操"的用户非常有 ...
- React Fiber源码分析 第二篇(同步模式)
先附上两张流程图 1.scheduleRootUpdate 这个函数主要执行了两个操作 1个是创建更新createUpdate并放到更新队列enqueueUpdate, 1个是执行sheculeW ...
- 用python实现红包机制
方法一,逻辑是后一个红包的范围是[0.01,剩下的钱*2/剩下的红包数,如果最后钱不足分配给每个人,就把后几个每人分配0.01元. 主要思想就是,每个人至少能领取到0.01元. import rand ...
- 响应者链UIResponder-扩大UIButton的点击范围
在开发中,我们经常看到有按钮等的点击,会出现响应事件.按钮->view->ViewController->UIWindow->UIApplication,这就形成了一个响应链. ...
- [转]PHP时区/MySql时区/Linux时区
本文转自:https://blog.csdn.net/watermelonmk/article/details/82669062 问题背景:手头上有个国外的项目,为了所谓的国际化,得将时区修改至[美国 ...
- [转]innodb的锁时间
本文转自:https://www.cnblogs.com/sunss/p/3170132.html 观察innodb的锁时间,需要关注: mysqladmin extended-status -r - ...