项目记录20-- 原来c#框架mediator改lua--01

项目记录-- 原来c#框架mediator改lua--01
最近没什么时间,公司项目就一直自己一个人抗着,下个星期就可以交付了,不是说项目有多难而是自己一个人说没压力那是骗人的。也算是过把独立开发的影了,这三个月的辛苦终于看到头了。希望真能把当时的承诺兑现吧,把团队建起来,不要再搞独立开发了,我希望的是稳定的开发。这都是题外话。
很久没写记录了,最近考虑把之前搭建的c#版框架改成lua,以后就lua开发。回想起来真奇怪,以前做quick-cocos2dx的时候用lua,转到了unity又回到这条路上了,难道真和lua这么有缘吗,奇妙。
ulua群里面的大神们都用purMVC这个框架,确实对unity这个脚本语言开发来说是很好,但是purMVC属于那种超强解耦的框架,学习成本还是需要的新人来说有点难接受,而且命令跳来跳去个人只是个人不怎么喜欢,但是里面的思想还是可以接受的。在写c#框架时候参考的就是purMVC,只是抽取了里面的Mediator和Module.
之前的c#框架:
项目记录14--框架年底总结和协议工具分享,UGUI图集管理
http://www.tudou.com/programs/view/dgN9kjzQODw/    密码:xing
要用lua开发首先要知道几个小东西:
1.setmetatable 元表
2.__index 这个小东西和setmetable一起使用威力实在强大。
3.就是lua里面的最强大武器table,使用table时候要注意它的下标从1开始,习惯c#,c++的真要小心,它强大只有用过才知道。
4.lua里面弱化了类型这说法,都可以使用local,注意local声明的都是本地的。
5.“.”和“:”这两个真要搞清楚,特别要注意self使用。
....
tolua:
1.lua脚本不要随意改变放脚本的文件夹,不信试试,我之前一直require找不到,呵呵了。
2.tolua里面的luaState默认只是开一个,最好就做个luaManager.cs统一管理。
3.在开发时候全部加载lua脚本,这个要看自己怎么实现了。还有就是开发时期加载的是dofile,是lua脚本,打包成AB必须是txt
....


luaManger里面加载所有lua脚本实现:
//测试:开发时期使用加载luaView下所有的file
public void LoadLuaScriptsByDeve()
{
        string sourceDir = Application.dataPath + "/Lua";
        string[] files = Directory.GetFiles(sourceDir, "*.lua", SearchOption.AllDirectories);
        
        for (int i = 0; i < files.Length; i++)
        {
            string str = files[i].Remove(0, sourceDir.Length);
            string fileName = StaticUtils.GetPathLastString(str).Trim();
            string filePath = files[i].Replace(fileName, "");


            _luaState.AddSearchPath(filePath);
            _luaState.DoFile(fileName);  //加载lua脚本
        }
}


    //发布:AB在资源加载完成之后调用加载所有的lua脚本(暂时待优化),file自动生成
    public void LoadAllLuaFile(TextAsset textAsset,LoaderParameter parms)
    {
        init();
        _luaState.DoString(textAsset.text); //加载luafile
        LuaFunction tempfun = _luaState.GetFunction("fileTable.GetLuaFilesName");  //注意需要看加载的file里面一致
        if (tempfun != null)
        {
            object[] objs =  tempfun.Call(0);                            //注意0是必须要的传参数
            LuaInterface.LuaTable tb = objs[0] as LuaInterface.LuaTable; //转换成luaTbale
            parms.parm = (int)parms.parm + tb.Length;                    //加上需要下载判断完成的标志
            for (int i = 1; i <= tb.Length; i++)
            {
                string tempStr = tb[i].ToString() ;
                string[] assets = tempStr.Split('@');
                if (assets.Length >= 3)
                {
                    Debug.Log("file 的写法不合法:AssetBundleName@AssetName :" + tempStr);
                }
                else
                {
                    BaseLoader.LoadAssetCallBack call = new BaseLoader.LoadAssetCallBack(LoadAllFileCallBack);
                    LoadLuaScript(assets[0], assets[1], call, parms);
                }
            }
            tempfun.Dispose(); //释放LunFunction
            tempfun = null;    //置空
        }
        else
        {
            Debug.LogError("LoadAllLuaFile----errro,查看file是否一致fileTable.GetLuaFilesName!");
        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值