为什么unity3d 语音聊天实现没有实现iOS平台代码热更新

unity 热更新 c# 实战经验分享(一) - 推酷
unity 热更新 c# 实战经验分享(一)
demo 工程地址 :
我们接上篇 内容继续讲
什么叫工程分离呢,就是要把你的游戏包(后面简称 #主工程#),和你的热更新工程(后面简称 #热更新工程#) 分离开。首先我先说一下 ,我为什么要这么做:
原因:从github 上更新下来的 jsb的工程,把所有的热更新代码写在了unity 里面了,然后在 热更新工程里面 去引用这些cs 文件。在我看来 不是真正的解耦,有些潜在的风险(直觉 ~~!)
怎么做: 很简单,我以我的demo 工程为例子,我新建了一个工程(demo里面 使用的jsb ,是我自己改过的,jsbsetting.cs 配置里面有很多东西用起来不顺手),我添加玩热更新工程之后 ,如图:
那我热更新工程怎么去引用原来的已经绑定的cs 类呢,ok,我编译一下unity 主工程 ,然后用热更新工程
就可以了 如图
这时候在就可以放心的在热更新工程里面写代码了
请记住你在是用vs (宇宙第一编辑器,写热更新代码,我各种语法提示,高亮,很方便),我只想说,你喜欢用luastudio,记事本, 写热更新脚本,我不拦你,我丑 我用vs
(2) 命名空间保护
原因 :jsbsetting 里面有各种目录配置,指明 这写目录里面的 类,导出或者不导出,记住这些东西 太累啦,太不安全了。你想象吧 ,程序员写代码的时候,要记住我要导出的类,在那个文件夹里面.....
什么意思,我所有的导出类,都有特定的命名空间 前缀,我为什么要这样做呢,还记得 第一条经验吗,我引用主工程生成的dll 之后,我就可以用dll 特定的命名空间的里面的类了,其他的命名空间里面的类不允许,
是不安全的,是不被导出的,是非常危险的,是肯定会出错的。所以说 总结一下 让热更新工程里面的 只可以引用主工程里面特定的 命名空间,代码非常安全。
接一下 ,我会分享jsb 如何使用protobuff 作为网络协议,及其具体用法,最后欢迎大家加入jsb 群:。
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致unity在ios平台不支持热更新?
[问题点数:40分]
unity在ios平台不支持热更新?
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。为什么Unity没有实现iOS平台代码热更新_百度知道
为什么Unity没有实现iOS平台代码热更新
提问者采纳
1、通过iTunes 恢复固件会导致清空iOS设备上所有的资料,建议先备份好重要资料。  2、已经越狱iPhone \ iPad \ iTouch使用iTunes升级 \ 恢复会可能报未知错误,请放心!iPhone \ iPad \ iTouch升级 \ 恢复失败会自动进入恢复模式,请连接iTunes俯订碘寡鄢干碉吮冬经 再恢复iOS8固件一次就可以。  3、如果你没有越狱,可以通过OTA升级至iOS8.3  1. 打开PP助手电脑版(下载),根据机型下载好上面所对应的固件版本。    2. 将iPhone \ iPad \ iTouch 连接电脑打开iTunes    3. 按住键盘上Shift(上档键)+鼠标左键点击iTunes 的更新 \ 恢复功能    4.iTunes会弹出对话窗--请选择已经下载好的固件--点击更新--等待iTunes运行。    5. 成功升级 \ 恢复iOS8后需要先激活设备才可以正常使用!(请系统提示步骤完成)
来自团队:
其他类似问题
为您推荐:
ios的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁(转载)李剑英的CSLight入门指南结合NGUI热更新
原地址:/archives/3075
李剑英的CSLight入门指南文档撰写者:GraphicQQ:
一. CSLIGHT 作者简介
CSLight的作者是李剑英,一个有着美丽心灵的游戏圈程序员,群中人称李总,他的技术群是:【低端编程高端研究&】。
二. CSLIGHT 为何而生
CSLight 最初出现的目的是为了解决Unity3D在IOS平台上的代码热更新的问题。 因为IOS平台上的代码热更新问题无法通过Mono Reflection机制来解决,故而只能引入脚本。目前市面上的U3D脚本解决方案不多,被听说过的大致有三种: CSLight UniLua SSharp,三者中CSLight的优点较为出众:1. 脚本执行性能最佳, 这个是因为李总的CSLight脚本解释器实现的非常轻量, 不刻意追求语言基础设施的完善性,在保证充分可用性的前提下,完全的走实用主义道路,故而执行性能最佳。2. 脚本语法兼容U3D项目开发中的标配C# 语言的大多数常用语法,借助李总的CSLightFramework,可以在源文件级别上一定程度的做到 原生C# 和 脚本C# 文件的无缝切换。3. CSLight有商业严肃项目的考验经历。
故,CSLight是Unity3D脚本解决方案的充分可行之选。
三. CSLIGHT 框架说明CSLight从宏观上来看,只有两个部分,一个是CSLight解释器,另一个是CSLight框架。对于刚接触CSLight的新人来说,CSLight最重要的是CSLight框架& CSLightFramework,这个轻量级的框架设计的很漂亮, 这里先大致扫一眼该框架的结构和类图:
这个框架简洁优雅的实现了如下的两个目的:1. 开发者可以快速的上手开发,通过框架的封装,使得开发者不需要关心底层解释器的机制。2. 借助框架,一个C# 脚本文件,可以选择以【原生模式(Mono虚拟机)】 或 【CSLight脚本模式(CSLight解释器)】这两种不同的执行模式来运行。那么为何需要两种运行模式呢?这是为了方便在IDE中调试脚本代码,因为只有在【原生模式】下运行才能借用IDE的断点调试等功能。可等代码稳定之后再切换到【CSLight脚本模式】。参照上面的类结构图:【原生模式的执行】是通过CodeFile_Debug类 的包装来达成的,其借助了反射机制来做到本地化运行。【CSLight脚本模式的执行】是通过 CodeFile_CLScript类 的包装来达成的,其调用了CSLight底层解释器的接口来做到解释型的运行。
嗯,是时候需要一个典型的HelloWorld的例子,来进一步的理解这个框架了,这里就用经常有人问到的【CSLight如何与NGUI交互】来作为例子。嗯,One more thing,在进入入门示例章节之前,有个非常重要的问题必须要先提一下,就是【脚本】与【宿主环境】如何交互的问题!熟悉Lua的朋友会知道,Lua是通过【设置Lua虚拟机堆栈】的这种方式来和C/C++的【宿主环境】进行交互的。那CSLight的【脚本】是如何与Unity3D原生C#的【宿主环境】进行交互的呢?嗯,答案是:在宿主环境中的自定义接口!看一下CSLightFramework框架中 ICodeFile 的定义如下:
其中的泛型T 就是【脚本】与【宿主环境】之间交互的关键所在,也正是上文强调过的【在宿主环境中的自定义接口】!下面开始进行【CSLight如何与NGUI进行交互】的实例演示。
四. CSLIGHT 入门示例 & CSLIGHT 如何与 NGUI 进行交互
一个有意义的,同时又简洁的示例不太好找。这里随便选的一个示例是:【如何用CSLight脚本来控制NGUI中一个元素的缩放。】虽然这个例子本身没有实际的意义,但通过这个例子搞懂框架的原理后,就可以很容易的做出一大堆有意义的事情来。
1. 新建一个Unity3D工程和场景,并把CSLight和CSLightFramework 这两份工程代码拷贝进去。2. 新建一个NGUI_Root,并在 默认的Panel 节点下新建一个UISprite,然后随便弄个图片显示。此时的大概情形如下所示:
3. 在项目中新建一个代码接口文件,作为【在宿主环境中的自定义接口】,大致如下面所示的样子:
其中第一个接口:SetNGUIElementScale(float scale); 设置NGUI某个元素的缩放,这个就没什么好说的了,届时CSLight脚本会调用这个宿主环境中的接口,传入想要缩放的数值。其中第二个接口:IScript对象的getter方法,这个也没什么好说的,这个接口是框架约定必须要实现的,因为CSLight脚本方法之间的互相调用需要用到这个。
4. 回到Unity3D中,在NGUI默认生成的那个Panel 对象上绑定一个控制脚本(继承自MonoBehaviour),比如叫 TestController .cs,大体情形如下图所示:(记得要给那个 UISprite 对象赋上引用)
5. 通过继承框架中的 ScriptMgr类来创建自己的脚本管理器,代码大致如下图所示:
注意这一步需要继承并实现 ICLS_Logger 的三个接口(Log, Log_Warn, Log_Error),因为在 ScriptMgr 脚本管理器 实例化的时候,构造函数需要一个实现了ICLS_Logger 的对象作为参数。
6. 开始编写CSLight 真.脚本文件 :Script_Test .cs,如下图所示,注意这个脚本文件要放到 Assets/StreamingAssets 目录中,以方便后面使用WWW来加载,用于模拟热更新时的远程脚本加载机制。
这个 真.脚本文件 的写法有几处地方要特别注意:6.1 所有的方法必须是静态方法,否则无法切换到【原生模式】来运行,也就无法用IDE来Debug了,这是框架内用反射模拟原生模式时的约定。6.2 必须有一个静态方法名叫:_new,类似 int main() { } 。6.3 每个静态方法之间不能直接互相调用,需要通过图片中注释的说明方法来调用.6.4 所有方法的第一个参数,必须是 【宿主环境中的接口】& Interface_Test 对象.7. 最后一步: 在TestController .cs 中继承并实现 【宿主环境中的接口】,然后加载上面的那个脚本并执行。7.1 实现【宿主环境中的接口】& Interface_Test,代码如下所示:7.2 加载脚本并执行,代码如下所示:至此,这个例子就结束了。
本文固定链接:&
转载请注明:&&日&于&&发表
(转载)李剑英的CSLight入门指南结合NGUI热更新
针对新手程序员的文字,是一节语文课。然后来做一下说文解字,也就是何谓热更新热更新,每个程序员一听就明白,但是它语出何处,究竟表达了什么含义,到底代表了什么,对技术有什么要求,对经验相对较少的程序员来说
出错怎么查有统一的Dump机制,在Unity3D热更新全书-脚本(三)有介绍7.C#Light的代码放在StreamingAssets里是什么意思,真的能热更新么真的可以热更新,你把例子生成exe,改了
。还有以下其他的资源是符合加载的,需要多个文件联合才能加载出来,我们把这种文件放到加载篇里去研究。好了,你现在已经拥有热更新最重要的更新模块了,而且他完全ForFree。
;&绑定(bingding)6,入门指南&&枚举(enumerables)参考文献:1,2,3,4,版权声明:本文为博主原创文章,未经博主允许不得转载。
乱七八糟的文字中迷失,特整理目录一份无分类《》这一篇是写给对热更新完全没概念的人下载系列《》介绍我们的基本下载加载模块加载系列《》这一篇是探讨使用AssetBundle来做资源更新的问题,希望能让更
什么是热更新所谓的热更新,指的是客户端的更新。大致的流程是,客户端在启动后访问更新的URL接口,根据更新接口的反馈,下载更新资源,然后使用新的资源启动客户端,或者直接使用新资源不重启客户端。热更新
正则表达式在线测试工具
FaceYe @ 2015 &&&&
ICP备案号:粤ICP备1500070查看: 235|回复: 1
最后登录注册时间阅读权限90积分19357
资深设计师, 积分 19357, 距离下一级还需 30643 积分
纳金币9031 精华34
& & & & 1.整个安装包更新,客户端和服务端各种有规定一个版本号,客户端登录时候重服务端下载进行匹配,需要更新时候整个更新。(手游里面一般不这样做,每个版本更新都会丢失用户),如果真要使用就必须测试好游戏,保证没有bug,才更新上去。(算不上热更新,只能叫更新)
& & & & 2.资源的更新,不支持代码更新。同理在客户端和服务端约定好一个版本,里面包含用assetBundle打包生产的资源MD5,同理客户端登录也下载进行对比,发现不同再从服务端下载下来更新。(缺点:代码逻辑无法更改)
& & & & 3.使用反射,这个也是多数人使用方法。但是只支持android热更新,IOS不支持。IOS上不支持System.Reflection.Assembly等反射。实现原理在代码里判断平台,如果是IOS就直接AddCompont , android就使用反射加载TextAsset txt = bundle.Load(&myBinaryAsText&, typeof(TextAsset)) as TextAvar assembly = System.Reflection.Assembly.Load(txt.bytes);var type = assembly.GetType(&MyClassDerivedFromMonoBehaviour&);注意的是不能是大版本的更新涉及底层就使用完整包更新。
& & & & 4.完整的热更新,使用ulua ,JSB ,L#等技术。使用ulua就必须重写之前的逻辑代码,JSB现在还不是很成熟,支持不高有错需要靠自己解决最主要是里面有些语法还不支持,但是如果发展成熟起来是首选,使用c#开发一键导出js做热跟新太爽。
& & & & 一般是优先发布android版本,有问题随时热更新代码调试。待版本稳定后,发布ios越狱版本。全部稳定后,最后才发布app store。
& & & & 5.在ios官方审核中有个技巧,就是不通的功能可以暂时隐藏,等通过就更新一个版本推一个资源过去,检查到资源存在就打开功能。
& & & & 现在可以选择的方案:1.使用第三种&&2.使用第四种 ulua+c# 就是底层框架还是使用c#写,部分功能使用ulua.接下来就是把这两种方法都封装到自己的框架里面。(其实有个设想就是用c#开发,使用自己写文件工具将c#转成lua文件,当然这后面等研究过ulua才试试,这也算是框架一部分尽量简单,先给自己留个设想)
最后登录注册时间阅读权限50积分1306
助理设计师, 积分 1306, 距离下一级还需 694 积分
纳金币604 精华0
好好好好好好好好好好好好
站长推荐 /1
纳金名模第97期儿童玩具3d模型:数量100个,大小为371MB。完全免费下载哦!这样的福利我和我的小伙伴们都惊呆了!!下载地址:
400-067-3919
Powered by - X2.5
Narkii Inc.

我要回帖

更多关于 unity3d 语音聊天实现 的文章

 

随机推荐