UnityD游戏开发之UniLua热更新完全解读.docxVIP

UnityD游戏开发之UniLua热更新完全解读.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
UnityD游戏开发之UniLua热更新完全解读

Unity3D游戏开发之UniLua热更新完全解读今天呢,我们来说说Unity3D配合AssetBundle和;Lua实现热更新。?首先,我们来了解一下什么是热更新吧!所谓热更新是指在不停机的状态下对系统进行更改,例如我们的Windows可以在不重启的状态下完成补丁的更新、Web服务器在 不重启的前提下完成对数据和文件的替换等都是热更新的经典实例。那么对于Unity3D而言,什么是热更新呢?如果我们最终发布的Unity3D游戏是一个Web游戏,那么每次游戏加载的过程中实现对资源代码的更新就是热更新。如果我们最终发布的Unity3D游戏是一个客户端游戏,那么我们在重重启客户端以后实现对资源代码的更新就是热更新。为什么这么说呢?因为Web游戏需要保证玩家能够及时快速地进入游戏,因此在游戏加载完之前,我们必须完成对游戏资源和代码的更新。可是对于客户端游戏而言,玩家可以在等待本次更新结束后再进入游戏,而且大部分的客户端程序在更新完后都会要求玩家重启客户端,所以对于客户端游戏而言,热更新并非是严格意义上的热更新。那么,我们为什么要进行热更新呢?答案是为了缩短用户获取新版本客户端的流程、改进用户体验。【/狗刨学习网】这其实就是博主在前文中提到的传统单机游戏依靠光盘载体进行发售所面临的问题,玩家为了获取最新版本的游戏,需要下载全新的客户端并将它安装到计算机或者手机设备上。在互联网产品开发中有一种称为快速迭代的理念,试想如果我们每次对客户端进行局部的调整,就需要玩家去下载新版本的客户端,试问这样的用户体验真得能让用户满意吗?所以现在为了方便用户、留住用户、进而从留住的用户身上赚到钱,我们总能在游戏产品中找到热更新的影子。我们知道在Unity3D中可以通过AssetBundle来实现对游戏中资源的更新。?我们首先需要将Unity API封装成一个C#类库,在这个类库中我们将会涉及动态加载场景和动态创建场景,因为我们更新游戏的逻辑的时候将会用到这些方法。这些方法通过封装后我们便可以在Lua脚本通过Require方式来引用,进而我们就可以通过Lua脚本来动态地进行设计。我们设计一个固定的位置来存储Lua脚本更新文件,这样我们只需要对比本地版本和服务器版本是否相同就可以知道我们是否需要更新。这里我们通过WWW来从远程服务器上下载最新的Lua脚本更新文件,下载下来的Lua脚本处于项目外部,我们无法使用Resource.Load()这样的方法来加载,可是我们可以通过WWW来加载一个本地文件,这样我们就实现了Lua脚本文件的更新。当然,我们可以使用AssetBundle来更新Lua脚本文件,可是博主的免费版不支持AssetBundle,所以博主想出了这样一个曲线救国的方法。当Lua脚本文件更新后,我们就可以在游戏主逻辑里通过DoString()方法来执行脚本文件中的代码。在游戏主逻辑里主要的任务是比较当前版本号和服务器版本号来判断是否需要更新,如果需要更新就下载Lua脚本更新文件然后执行脚本中的代码,这样我们就实现了客户端程序的更新。好了,下面我们继续以前一篇文章中的项目为例来将博主的这个设想变成现实。?首先,我们在CSharpLib.cs这个类中增加下面两个方法并完成方法的注册:///?summary?///?设置场景中物体的坐标?///?/summary?///?returns返回当前坐标/returns?///?param?name=luaLua./param?public?static?int?SetPosition(ILuaState?lua)??{???//物体的名称??string?mName=lua.L_CheckString(1);???//传入参数x,y,z??float?mX=(float)lua.L_CheckNumber(2);???float?mY=(float)lua.L_CheckNumber(3);???float?mZ=(float)lua.L_CheckNumber(4);???//获取物体??GameObject?go=GameObject.Find(mName);???//获取Transform??Transform?mTrans=go.transform;???//设置游戏体的位置??mTrans.position=new?Vector3(mX,mY,mZ);???//返回游戏体当前坐标??lua.PushNumber(mTrans.position.x);???lua.PushNumber(mTrans.position.y);???lua.PushNumber(mTrans.position.z);???return?3;??}???///?summary?///?使用本地预设创建一个物体?///?/summ

文档评论(0)

wj38429 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档