首页 > Unity3D频道 > 【CSLight研究院】 > CSLight研究院之学习笔记结合NGUI(一)
2014
08-12

CSLight研究院之学习笔记结合NGUI(一)


这两天一直在研究CSLight,目前Unity热更新的方式有两种,一种是ulua这个网上的例子已经很多了。还有一种就是CSLight。其实我更希望CSLight可以趋向成熟,因为它的语法就是C#,但是有些C#的标准语法用不了。这两天我学习的做了一个例子,也把我遇到的坑记录一下。

CSLight研究院之学习笔记结合NGUI(一) - 雨松MOMO程序研究院 - 1

1.在github上下载CSLight,当我把DLL拖进项目的时候会报错。原因是CSLight的dll和NGUI的冲突了,所以我直接把他的core文件夹代码全部拷贝在我的工程里面。

2.脚本可以直接就创建成.cs文件,这样可以利用unity的语法提示。李总真是太聪明了哈哈。

3.脚本与类之间传递参数。。如下脚本所示,调用脚本UIMain中的Start()方法,并且将名子作为参数传递了进去。

ScriptMagr是李总封装的脚本管理类,是一个静态类。因为我们在脚本中可能会用到一些数据对象,需要提前注册一下,每次打开界面都去注册一下显然不太好。LoadProject()等于就是开游戏的时候注册一下,以后直接就去用。

大家注意看RegTypes()里面的注册方法。把你的脚本中用到的类,可以是unity提供的类,可以是NGUI提供的类,也可以是你自己封装的类都在这里注册一下,只有注册了你的脚本里才能使用这些方法。

假如界面Prefab在Assetbundle里面热更新了,那么脚本也对应需要更新,比如之前的界面只有一个按钮,那么新更新一个界面有两个按钮了,那么需要给新增加的按钮加监听事件。先看看下面可以热更新的这条脚本。

代码写完你会发现几乎和C#的脚本万全一样,但是有几个比较恶心的地方。

1.不支持范型。

热更新的这样的代码就不能直接使用了。

Resources.Load<GameObject>

gameObject.GetComponent<UISprite>

2.不支持typeof()关键字

3.不支持代理事件。

用NGUI做界面,可能里面用了大量的UIEventListener ,比如按钮、精灵的位移动画等等。这种东西如果硬要在脚本里面写太蛋疼了。我觉得最好还是把代理相关的东西拿出来。

还有就是做界面的时候可能会用到一些定时器,如果用代理来做的话也需要改改,总之向这种delegate回调的地方应该都要封装成方法,然后在回调进脚本里面。

在上面的代码中,我在处理按钮的点击事件的时候。如下代码所示,我写了一条Unity的脚本,在热更新的脚本里面,通过类名.就可以直接访问方法并且传递参数。UIEventListener监听到事件以后,在回调一下热更新脚本中的方法。

注:我也不是CSLight的高手,也是最近开始学。感谢作者给我了很大帮助,他的游戏项目中大量的使用CSLight。据说效率还可以,这两天我在好好测试一下它的效率,希望有经验的朋友可以分享一些。谢谢啦。

最后本文下载:http://pan.baidu.com/s/1c0Ehn0G

雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!

--

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。

  1. ScriptMgr.Instance.Execute(“UIMain.Start(“”+name+””);”);可以执行服务器的脚本吗比如:ScriptMgr.Instance.Execute(“http://www.xuanyusong.com/UIMain.Start(“”+name+””);”);

  2. 可以具体做些什么事呢?好像demo中只是在对象上添加了NGUI的脚本。。可不可以添加服务器上自己写的脚本组件到游戏对象上呢?

  3. momo可以出一个游戏热更新,检查版本和检查要更新的资源的博客吗,网上很多都是从页游那边出来的方法,感觉很复杂,相信大家都期待有这样一篇文章作为引导!

  4. 最近要做热更新,打算用lua,momo一介绍CSLight,又纠结了。但是担心CSLight太新了,坑太多,不敢用。momo最好在弄个详细点的demo,介绍如何热更新复杂窗体,甚至逻辑更新。一定会造福广大u友的。毕竟c#敲着才顺手。