2018-12-31 15:38:28 weixin_44158418 阅读数 89
  • lua热更新技术基础篇

     本套课程分为基础与中级两部分,分别就lua语言的各方面知识点进行探讨,学习完本套课程,对于后续Xlua(Tolua等框架)技术的学习提供强大的语言技术保证。        本套lua课程采用入门与商业级两种开发IDE进行教学:入门级的SciTE内置IDE与商业级的IDEA lua插件。本套课程学习完毕,对于除了传统手游外,在VR、AR、商业级大型应用程序、嵌入式设备开发等领域都有较强的指导作用。 一、热更新系列(技术含量:中高级): A:《lua热更新技术中级篇》 https://edu.csdn.net/course/detail/27087 B:《热更新框架设计之Xlua基础视频课程》 https://edu.csdn.net/course/detail/27110 C:《热更新框架设计之热更流程与热补丁技术》 https://edu.csdn.net/course/detail/27118 D:《热更新框架设计之客户端热更框架(上)》 https://edu.csdn.net/course/detail/27132 E:《热更新框架设计之客户端热更框架(中)》 https://edu.csdn.net/course/detail/27135 F:《热更新框架设计之客户端热更框架(下)》 https://edu.csdn.net/course/detail/27136 二:框架设计系列(技术含量:中级):  A:《游戏UI界面框架设计系列视频课程》 https://edu.csdn.net/course/detail/27142 B:《Unity客户端框架设计PureMVC篇视频课程(上)》 https://edu.csdn.net/course/detail/27172 C:《Unity客户端框架设计PureMVC篇视频课程(下)》 https://edu.csdn.net/course/detail/27173 D:《AssetBundle框架设计_框架篇视频课程》 https://edu.csdn.net/course/detail/27169 三、Unity脚本从入门到精通(技术含量:初级) A:《C# For Unity系列之入门篇》 https://edu.csdn.net/course/detail/4560 B:《C# For Unity系列之基础篇》 https://edu.csdn.net/course/detail/4595 C: 《C# For Unity系列之中级篇》 https://edu.csdn.net/course/detail/24422 D:《C# For Unity系列之进阶篇》 https://edu.csdn.net/course/detail/24465 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级) A:《虚拟现实之汽车仿真模拟系统 》 https://edu.csdn.net/course/detail/26618 五、Unity基础课程系列(技术含量:初级)  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》   https://edu.csdn.net/course/detail/24643 B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》 https://edu.csdn.net/course/detail/24645  C:《Unity ECS(二) 小试牛刀》 https://edu.csdn.net/course/detail/27096 六、Unity ARPG课程(技术含量:初中级): A:《MMOARPG地下守护神_单机版实战视频课程(上部)》 https://edu.csdn.net/course/detail/24965 B:《MMOARPG地下守护神_单机版实战视频课程(中部)》 https://edu.csdn.net/course/detail/24968 C:《MMOARPG地下守护神_单机版实战视频课程(下部)》 https://edu.csdn.net/course/detail/24979

    725 人正在学习 去看看 刘国柱

toLua的第三个案例是关于如何在c#中调用Lua函数的
一、LuaTable.GetLuaFunction()与LuaState.GetFunction()
具体地调用方法如下:

	LuaTable table = new LuaTable();
	LuaFunction func = table.GetLuaFunction("Function_Name");
	
	LuaState lua = new LuaState();
	LuaFunction func = lua.GetFunction("Function_Name");

二、GetFunction的执行流程
1.首先该方法会从funcMap这个字典中查找对应的方法,获取该方法的弱引用,并检查其状态(是否为游离态)。如果是非游离状态,则获取该函数的强引用,并再次检查函数的状态。若再次为true,则从GC列表中删除该方法并返回该函数,否则从funcMap中删除该方法。
在这里插入图片描述

2.若并未从funcMap中获取到函数,则执行PushLuaFunction方法,该方法会检测对应的持有者是否存在,并检测该方法是否为lua的function,然后进行压堆栈。
在这里插入图片描述

3.完成PushLuaFunction,再执行和1相同的步骤,只是在funcRefMap中查找。如果都没查找到该方法,则重新生成一个方法并向funcMap和funcRefMap中添加该方法,然后从GC列表中删除。
在这里插入图片描述

三、c#调用Lua函数的方法(*注:lua代表LuaState变量,luaFunc表示LuaFunction变量,并全部进行了基本的初始化)
1.LuaFunction.Invoke()
该函数有多个重载形式,比较常用的两个简单形式有

	R1 luaFunc.Invoke<R1>();
	R1 luaFunc.Invoke<T1, R1>(T1 param);

2.LuaFunction.Call()
该函数同样有多个重载形式,比较常用的形式有

	void luaFunc.Call();
	void luaFunc.Call<T1>(T1 param);
	void luaFunc.Call<T1, T2>(T1 param1, T2 param2);

3.LuaFunction.ToDelegate()
该方法实现了一个委托,使用委托来实现函数调用

	Func<T1, R1> func = luaFunc.ToDelegate<Func<T1, R1>>();
	R1 func(T1 param);

4.PCall
LuaFunction.Call()其实就是对PCall方法的封装,自己同样可以实现一个扩展的方法

	LuaFunction luaFunc = new LuaFunction();
	int CallFunc(p1, p2)
	{
        luaFunc.BeginPCall();                
    	luaFunc.Push(p1);
    	luaFunc.Push(p2);
    	luaFunc.PCall();        
    	int num = (int)luaFunc.CheckNumber();
    	luaFunc.EndPCall();
    	return num;
	}
	CallFunc(param1, param2);

5.LuaState.Invoke()
可以使用LuaState的对象直接调用方法,常用的形式有,其中beLogMiss为是否打印函数不存在的信息。

	R1 lua.Invoke<R1>(string "tableName.functionName", bool beLogMiss)
	R1 lua.Invoke<T1, R1>(string "tableName.functionName", T1 param, bool beLogMiss)
2018-08-21 10:33:52 nicepainkiller 阅读数 722
  • lua热更新技术基础篇

     本套课程分为基础与中级两部分,分别就lua语言的各方面知识点进行探讨,学习完本套课程,对于后续Xlua(Tolua等框架)技术的学习提供强大的语言技术保证。        本套lua课程采用入门与商业级两种开发IDE进行教学:入门级的SciTE内置IDE与商业级的IDEA lua插件。本套课程学习完毕,对于除了传统手游外,在VR、AR、商业级大型应用程序、嵌入式设备开发等领域都有较强的指导作用。 一、热更新系列(技术含量:中高级): A:《lua热更新技术中级篇》 https://edu.csdn.net/course/detail/27087 B:《热更新框架设计之Xlua基础视频课程》 https://edu.csdn.net/course/detail/27110 C:《热更新框架设计之热更流程与热补丁技术》 https://edu.csdn.net/course/detail/27118 D:《热更新框架设计之客户端热更框架(上)》 https://edu.csdn.net/course/detail/27132 E:《热更新框架设计之客户端热更框架(中)》 https://edu.csdn.net/course/detail/27135 F:《热更新框架设计之客户端热更框架(下)》 https://edu.csdn.net/course/detail/27136 二:框架设计系列(技术含量:中级):  A:《游戏UI界面框架设计系列视频课程》 https://edu.csdn.net/course/detail/27142 B:《Unity客户端框架设计PureMVC篇视频课程(上)》 https://edu.csdn.net/course/detail/27172 C:《Unity客户端框架设计PureMVC篇视频课程(下)》 https://edu.csdn.net/course/detail/27173 D:《AssetBundle框架设计_框架篇视频课程》 https://edu.csdn.net/course/detail/27169 三、Unity脚本从入门到精通(技术含量:初级) A:《C# For Unity系列之入门篇》 https://edu.csdn.net/course/detail/4560 B:《C# For Unity系列之基础篇》 https://edu.csdn.net/course/detail/4595 C: 《C# For Unity系列之中级篇》 https://edu.csdn.net/course/detail/24422 D:《C# For Unity系列之进阶篇》 https://edu.csdn.net/course/detail/24465 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级) A:《虚拟现实之汽车仿真模拟系统 》 https://edu.csdn.net/course/detail/26618 五、Unity基础课程系列(技术含量:初级)  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》   https://edu.csdn.net/course/detail/24643 B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》 https://edu.csdn.net/course/detail/24645  C:《Unity ECS(二) 小试牛刀》 https://edu.csdn.net/course/detail/27096 六、Unity ARPG课程(技术含量:初中级): A:《MMOARPG地下守护神_单机版实战视频课程(上部)》 https://edu.csdn.net/course/detail/24965 B:《MMOARPG地下守护神_单机版实战视频课程(中部)》 https://edu.csdn.net/course/detail/24968 C:《MMOARPG地下守护神_单机版实战视频课程(下部)》 https://edu.csdn.net/course/detail/24979

    725 人正在学习 去看看 刘国柱

想必折腾过Tolua的都知道, 为了最简化对Lua文件的支持。最优方案就是  把Lua文件 以文件的形式载入。而不是用 AssetBundle 的方式。这样会最优化的使用 Lua本身的一些文件 机制。

那么既然是 以lua文件的形式 载入肯定不能以 明文的形式了。 Tolua已经为我们 提供了 字节码加密的机制。

 

Tolua github


以上就是 Tolua 为我们集成 编译字节码的 工具。 对于 Tolua 加载 文本的.lua 文件和 字节码的.lua  文件是没有区别的。应为Tolua底层已经为我们实现了。

目前来看只是有一点不太友好,就是在 IOS 平台 armv7 和 arm64 的 字节码不能共用。言外之意就是 要么你编译两种字节码。要么你 你直接用明文的 lua 文件。要么 你只支持一种 CPU类型。

显然编译两种字节码是最优的方案; 对于编译细节在   LuaFramework_UGUI  已经详细介绍了

 

 


    /// <summary>
    /// 适用于 IOS arm64
    /// </summary>
    /// <param name="srcFile"></param>
    /// <param name="outFile"></param>
    private void EncodeLuaFile_64(string srcFile, string outFile)
    {
        string luaexe   = string.Empty;
        string exedir   = string.Empty;
        bool   isWin    = true;
        string args     = string.Format("-b -g {0} {1}",srcFile, outFile);
        string currDir  = Directory.GetCurrentDirectory();
        if (Application.platform == RuntimePlatform.WindowsEditor)
        {
            isWin   = true;
            luaexe  = "luajit64.exe";
            exedir  = Path.Combine(BundleConst.LuaEncoder, "luajit64/");
        }
        else if (Application.platform == RuntimePlatform.OSXEditor)
        {
            isWin   = false;
            luaexe  = "./luajit";
            exedir  = Path.Combine(BundleConst.LuaEncoder, "luajit_mac/");
        }
        Directory.SetCurrentDirectory(exedir);
        System.Diagnostics.ProcessStartInfo info    = new System.Diagnostics.ProcessStartInfo();
        info.FileName                               = luaexe;
        info.Arguments                              = args;
        info.WindowStyle                            = System.Diagnostics.ProcessWindowStyle.Hidden;
        info.UseShellExecute                        = isWin;
        info.ErrorDialog                            = true;
        System.Diagnostics.Process pro              = System.Diagnostics.Process.Start(info);
        pro.WaitForExit();
        Directory.SetCurrentDirectory(currDir);
    }

    /// <summary>
    /// 适用于 ios armv7 所有  android 
    /// </summary>
    /// <param name="srcFile"></param>
    /// <param name="outFile"></param>
    private void EncodeLuaFile_32(string srcFile, string outFile)
    {
        string luaexe           = string.Empty;
        string exedir           = string.Empty;
        bool isWin              = true;
        string args             = string.Format("-b -g {0} {1}", srcFile, outFile);
        string currDir          = Directory.GetCurrentDirectory();
        if (Application.platform == RuntimePlatform.WindowsEditor)
        {
            isWin   = true;
            luaexe  = "luajit32.exe";
            exedir  = Path.Combine(BundleConst.LuaEncoder, "Luajit32/");
        }
        else if (Application.platform == RuntimePlatform.OSXEditor)
        {
            isWin   = false;
            luaexe  = "./luajit";
            exedir  = Path.Combine(BundleConst.LuaEncoder, "luajit_mac/");
        }
        Directory.SetCurrentDirectory(exedir);
        System.Diagnostics.ProcessStartInfo info    = new System.Diagnostics.ProcessStartInfo();
        info.FileName                               = luaexe;
        info.Arguments                              = args;
        info.WindowStyle                            = System.Diagnostics.ProcessWindowStyle.Hidden;
        info.UseShellExecute                        = isWin;
        info.ErrorDialog                            = true;
        System.Diagnostics.Process pro              = System.Diagnostics.Process.Start(info);
        pro.WaitForExit();
        Directory.SetCurrentDirectory(currDir);
    }

对于编译的 更多细节 大家可以下载  https://github.com/jarjin/LuaFramework_UGUI    

获取跟多的细节

 


现在我们已经编译出来了 不同的 lua 字节码: 经过反复测试我得到 一下结论

用 luajit64.exe  编译出来的字节码 只适用于 IOS arm64,

用 luajit32.exe 编译出来的字节码  只适用于 其他( IOS armv7,   android )

有意思的 Android 目前 不管 armv7 还是 arm64 都只能使用  luajit32.exe 编译出来的字节码

 


别人总结的:

 

 

2018年8月22日 补充:


 其实对于字节码的理解应该是这样的:  32位和64位的 字节码是对应的  目标机器,即 32位机器和64位机器。 很显然Tolua 已经为我们实现了 32位和64的 不同字节码的支持!。

所以呢我们只要为 相应的目标平台提供 对应的字节码就好了!

 

这是我最初的方案! 统计所有的机型 来判断 是32还是64! 现在看来 很漏记!

往下看:

        private static List<DeviceType> deviceTypes = new List<DeviceType>()
    {
        #region Iphone

        new DeviceType( "iPhone3,1","iPhone 4",         false),
        new DeviceType( "iPhone3,2","iPhone 4",         false),
        new DeviceType( "iPhone3,3","iPhone 4",         false),

        new DeviceType( "iPhone4,1","iPhone 4S",        false),

        new DeviceType( "iPhone5,1","iPhone 5",         false),
        new DeviceType( "iPhone5,2","iPhone 5",         false),
        new DeviceType( "iPhone5,3","iPhone 5c",        false),
        new DeviceType( "iPhone5,4","iPhone 5c",        false),

        new DeviceType( "iPhone6,1","iPhone 5S",        true),///////arm64
        new DeviceType( "iPhone6,2","iPhone 5S",        true),


        new DeviceType( "iPhone7,1","iPhone 6 Plus",    true),
        new DeviceType( "iPhone7,2","iPhone 6",         true),

        new DeviceType( "iPhone8,1","iPhone 6s",        true),
        new DeviceType( "iPhone8,2","iPhone 6s Plus",   true),
        new DeviceType( "iPhone8,4","iPhone SE",        true),



        new DeviceType( "iPhone9,1","iPhone 7",         true),
        new DeviceType( "iPhone9,2","iPhone 7 Plus",    true),
        new DeviceType( "iPhone9,3","iPhone 7",         true),
        new DeviceType( "iPhone9,4","iPhone 7 Plus",    true),

        new DeviceType( "iPhone10,1","iPhone 8",        true),
        new DeviceType( "iPhone10,2","iPhone 8 Plus",   true),
        new DeviceType( "iPhone10,4","iPhone 8",        true),
        new DeviceType( "iPhone10,5","iPhone 8 Plus",   true),
        new DeviceType( "iPhone10,3","iPhone X",        true),
        new DeviceType( "iPhone10,6","iPhone X",        true),

        #endregion


        #region Ipad

        new DeviceType( "iPad1,1",      "iPad",         false),
        new DeviceType( "iPad1,2",      "iPad 3G",      false),

        new DeviceType( "iPad2,1",      "iPad 2",       false),
        new DeviceType( "iPad2,2",      "iPad 2",       false),
        new DeviceType( "iPad2,3",      "iPad 2",       false),
        new DeviceType( "iPad2,4",      "iPad 2",       false),
        new DeviceType( "iPad2,5",      "iPad Mini",    false),
        new DeviceType( "iPad2,6",      "iPad Mini",    false),
        new DeviceType( "iPad2,7",      "iPad Mini",    false),

        new DeviceType( "iPad3,1",      "iPad 3",       false),
        new DeviceType( "iPad3,2",      "iPad 3",       false),
        new DeviceType( "iPad3,3",      "iPad 3",       false),
        new DeviceType( "iPad3,4",      "iPad 4",       false),
        new DeviceType( "iPad3,5",      "iPad 4",       false),
        new DeviceType( "iPad3,6",      "iPad 4",       false),


        new DeviceType( "iPad4,1",      "iPad Air",     true),///arm 64
        new DeviceType( "iPad4,2",      "iPad Air",     true),
        new DeviceType( "iPad4,4",      "iPad Mini 2",  true),
        new DeviceType( "iPad4,5",      "iPad Mini 2",  true),
        new DeviceType( "iPad4,6",      "iPad Mini 2",  true),
        new DeviceType( "iPad4,7",      "iPad Mini 3",  true),
        new DeviceType( "iPad4,8",      "iPad Mini 3",  true),
        new DeviceType( "iPad4,9",      "iPad Mini 3",  true),



        new DeviceType( "iPad5,1",      "iPad Mini 4",  true),
        new DeviceType( "iPad5,2",      "iPad Mini 4",  true),
        new DeviceType( "iPad5,3",      "iPad Air 2",   true),
        new DeviceType( "iPad5,4",      "iPad Air 2",   true),


        new DeviceType( "iPad6,3",      "iPad Pro 9.7", true),
        new DeviceType( "iPad6,4",      "iPad Pro 9.7", true),
        new DeviceType( "iPad6,7",      "iPad Pro 12.9",true),
        new DeviceType( "iPad6,8",      "iPad Pro 12.9",true),
        new DeviceType( "iPad6,11",     "iPad 5",       true),
        new DeviceType( "iPad6,12",     "iPad 5",       true),


        new DeviceType( "iPad7,1",     "iPad Pro 12.9 inch 2nd gen",true),
        new DeviceType( "iPad7,2",     "iPad Pro 12.9 inch 2nd gen",true),
        new DeviceType( "iPad7,3",     "iPad Pro 10.5 inch",        true),
        new DeviceType( "iPad7,4",     "iPad Pro 10.5 inch",        true),


        #endregion


        new DeviceType( "i386",     "Simulator", false), //Mac指令集  i386是针对intel通用微处理器32位处理器
        new DeviceType( "x86_64",   "Simulator", true),  //Mac指令集  x86_64是针对x86架构的64位处理器
    };


    public class DeviceType
    {
        public string modelType;
        public string modelName;
        public bool isArm64;//armv7  or  arm64

        public DeviceType(string type, string name, bool arm64)
        {
            this.modelType = type;
            this.modelName = name;
            this.isArm64 = arm64;
        }
    }

这个是是我找到的 最新的方案

 

        /// <summary>
        /// 判断当然 运行 品台是 x86 还是 x68_x64
        /// </summary>
        public static bool isX86_X64
        {
            get
            {
                if (System.IntPtr.Size == 4)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
        }

我已经在各个平台上测试了,都能准确分析出当前的 CPU结构!包括在编辑器 模式下

所以呢 我们就理所当然的 为我们的 目标平台提供对应的 字节码了

 

2017-05-18 15:08:34 a958832776 阅读数 2485
  • lua热更新技术基础篇

     本套课程分为基础与中级两部分,分别就lua语言的各方面知识点进行探讨,学习完本套课程,对于后续Xlua(Tolua等框架)技术的学习提供强大的语言技术保证。        本套lua课程采用入门与商业级两种开发IDE进行教学:入门级的SciTE内置IDE与商业级的IDEA lua插件。本套课程学习完毕,对于除了传统手游外,在VR、AR、商业级大型应用程序、嵌入式设备开发等领域都有较强的指导作用。 一、热更新系列(技术含量:中高级): A:《lua热更新技术中级篇》 https://edu.csdn.net/course/detail/27087 B:《热更新框架设计之Xlua基础视频课程》 https://edu.csdn.net/course/detail/27110 C:《热更新框架设计之热更流程与热补丁技术》 https://edu.csdn.net/course/detail/27118 D:《热更新框架设计之客户端热更框架(上)》 https://edu.csdn.net/course/detail/27132 E:《热更新框架设计之客户端热更框架(中)》 https://edu.csdn.net/course/detail/27135 F:《热更新框架设计之客户端热更框架(下)》 https://edu.csdn.net/course/detail/27136 二:框架设计系列(技术含量:中级):  A:《游戏UI界面框架设计系列视频课程》 https://edu.csdn.net/course/detail/27142 B:《Unity客户端框架设计PureMVC篇视频课程(上)》 https://edu.csdn.net/course/detail/27172 C:《Unity客户端框架设计PureMVC篇视频课程(下)》 https://edu.csdn.net/course/detail/27173 D:《AssetBundle框架设计_框架篇视频课程》 https://edu.csdn.net/course/detail/27169 三、Unity脚本从入门到精通(技术含量:初级) A:《C# For Unity系列之入门篇》 https://edu.csdn.net/course/detail/4560 B:《C# For Unity系列之基础篇》 https://edu.csdn.net/course/detail/4595 C: 《C# For Unity系列之中级篇》 https://edu.csdn.net/course/detail/24422 D:《C# For Unity系列之进阶篇》 https://edu.csdn.net/course/detail/24465 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级) A:《虚拟现实之汽车仿真模拟系统 》 https://edu.csdn.net/course/detail/26618 五、Unity基础课程系列(技术含量:初级)  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》   https://edu.csdn.net/course/detail/24643 B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》 https://edu.csdn.net/course/detail/24645  C:《Unity ECS(二) 小试牛刀》 https://edu.csdn.net/course/detail/27096 六、Unity ARPG课程(技术含量:初中级): A:《MMOARPG地下守护神_单机版实战视频课程(上部)》 https://edu.csdn.net/course/detail/24965 B:《MMOARPG地下守护神_单机版实战视频课程(中部)》 https://edu.csdn.net/course/detail/24968 C:《MMOARPG地下守护神_单机版实战视频课程(下部)》 https://edu.csdn.net/course/detail/24979

    725 人正在学习 去看看 刘国柱

unity版本从5.3升级到5.4之后问题不是很大,只需要修改写命名空间即可。升级到5.5版本之后就需要修改些:

1.ToLuaExport类中 public static List memberFilter = new List 中增加

    "MonoBehaviour.runInEditMode",
    "Light.lightmappingMode",
    "Light.lightmapBakeType",

5.5版本之后奇怪的问题

2.把工程中的使用宏定义 UNITY_5_4 修改为UNITY_5_4_OR_NEWER

2016-10-11 00:03:16 xyzzf 阅读数 3392
  • lua热更新技术基础篇

     本套课程分为基础与中级两部分,分别就lua语言的各方面知识点进行探讨,学习完本套课程,对于后续Xlua(Tolua等框架)技术的学习提供强大的语言技术保证。        本套lua课程采用入门与商业级两种开发IDE进行教学:入门级的SciTE内置IDE与商业级的IDEA lua插件。本套课程学习完毕,对于除了传统手游外,在VR、AR、商业级大型应用程序、嵌入式设备开发等领域都有较强的指导作用。 一、热更新系列(技术含量:中高级): A:《lua热更新技术中级篇》 https://edu.csdn.net/course/detail/27087 B:《热更新框架设计之Xlua基础视频课程》 https://edu.csdn.net/course/detail/27110 C:《热更新框架设计之热更流程与热补丁技术》 https://edu.csdn.net/course/detail/27118 D:《热更新框架设计之客户端热更框架(上)》 https://edu.csdn.net/course/detail/27132 E:《热更新框架设计之客户端热更框架(中)》 https://edu.csdn.net/course/detail/27135 F:《热更新框架设计之客户端热更框架(下)》 https://edu.csdn.net/course/detail/27136 二:框架设计系列(技术含量:中级):  A:《游戏UI界面框架设计系列视频课程》 https://edu.csdn.net/course/detail/27142 B:《Unity客户端框架设计PureMVC篇视频课程(上)》 https://edu.csdn.net/course/detail/27172 C:《Unity客户端框架设计PureMVC篇视频课程(下)》 https://edu.csdn.net/course/detail/27173 D:《AssetBundle框架设计_框架篇视频课程》 https://edu.csdn.net/course/detail/27169 三、Unity脚本从入门到精通(技术含量:初级) A:《C# For Unity系列之入门篇》 https://edu.csdn.net/course/detail/4560 B:《C# For Unity系列之基础篇》 https://edu.csdn.net/course/detail/4595 C: 《C# For Unity系列之中级篇》 https://edu.csdn.net/course/detail/24422 D:《C# For Unity系列之进阶篇》 https://edu.csdn.net/course/detail/24465 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级) A:《虚拟现实之汽车仿真模拟系统 》 https://edu.csdn.net/course/detail/26618 五、Unity基础课程系列(技术含量:初级)  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》   https://edu.csdn.net/course/detail/24643 B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》 https://edu.csdn.net/course/detail/24645  C:《Unity ECS(二) 小试牛刀》 https://edu.csdn.net/course/detail/27096 六、Unity ARPG课程(技术含量:初中级): A:《MMOARPG地下守护神_单机版实战视频课程(上部)》 https://edu.csdn.net/course/detail/24965 B:《MMOARPG地下守护神_单机版实战视频课程(中部)》 https://edu.csdn.net/course/detail/24968 C:《MMOARPG地下守护神_单机版实战视频课程(下部)》 https://edu.csdn.net/course/detail/24979

    725 人正在学习 去看看 刘国柱

#UnityLua_DebugTutorial
请查看最新官方文档: https://docs.x-studio.net/zh_CN/latest/lua-dbg/01_unity3d.html

2016-11-16 21:47:14 ecidevilin 阅读数 2296
  • lua热更新技术基础篇

     本套课程分为基础与中级两部分,分别就lua语言的各方面知识点进行探讨,学习完本套课程,对于后续Xlua(Tolua等框架)技术的学习提供强大的语言技术保证。        本套lua课程采用入门与商业级两种开发IDE进行教学:入门级的SciTE内置IDE与商业级的IDEA lua插件。本套课程学习完毕,对于除了传统手游外,在VR、AR、商业级大型应用程序、嵌入式设备开发等领域都有较强的指导作用。 一、热更新系列(技术含量:中高级): A:《lua热更新技术中级篇》 https://edu.csdn.net/course/detail/27087 B:《热更新框架设计之Xlua基础视频课程》 https://edu.csdn.net/course/detail/27110 C:《热更新框架设计之热更流程与热补丁技术》 https://edu.csdn.net/course/detail/27118 D:《热更新框架设计之客户端热更框架(上)》 https://edu.csdn.net/course/detail/27132 E:《热更新框架设计之客户端热更框架(中)》 https://edu.csdn.net/course/detail/27135 F:《热更新框架设计之客户端热更框架(下)》 https://edu.csdn.net/course/detail/27136 二:框架设计系列(技术含量:中级):  A:《游戏UI界面框架设计系列视频课程》 https://edu.csdn.net/course/detail/27142 B:《Unity客户端框架设计PureMVC篇视频课程(上)》 https://edu.csdn.net/course/detail/27172 C:《Unity客户端框架设计PureMVC篇视频课程(下)》 https://edu.csdn.net/course/detail/27173 D:《AssetBundle框架设计_框架篇视频课程》 https://edu.csdn.net/course/detail/27169 三、Unity脚本从入门到精通(技术含量:初级) A:《C# For Unity系列之入门篇》 https://edu.csdn.net/course/detail/4560 B:《C# For Unity系列之基础篇》 https://edu.csdn.net/course/detail/4595 C: 《C# For Unity系列之中级篇》 https://edu.csdn.net/course/detail/24422 D:《C# For Unity系列之进阶篇》 https://edu.csdn.net/course/detail/24465 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级) A:《虚拟现实之汽车仿真模拟系统 》 https://edu.csdn.net/course/detail/26618 五、Unity基础课程系列(技术含量:初级)  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》   https://edu.csdn.net/course/detail/24643 B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》 https://edu.csdn.net/course/detail/24645  C:《Unity ECS(二) 小试牛刀》 https://edu.csdn.net/course/detail/27096 六、Unity ARPG课程(技术含量:初中级): A:《MMOARPG地下守护神_单机版实战视频课程(上部)》 https://edu.csdn.net/course/detail/24965 B:《MMOARPG地下守护神_单机版实战视频课程(中部)》 https://edu.csdn.net/course/detail/24968 C:《MMOARPG地下守护神_单机版实战视频课程(下部)》 https://edu.csdn.net/course/detail/24979

    725 人正在学习 去看看 刘国柱

Unity3D开发小贴士(二)协程(Coroutine)中介绍了在Unity3D中使用协同程序(C#),Lua语法小贴士(八)协同程序中介绍了使用Lua的协同程序。Lua的协同程序功能相对有限,所以ToLua(参考Unity3D开发小贴士(三)愉快的使用Lua开发)帮我们对Lua的协同程序进行了扩展。

具体的文件是ToLua/Lua/System/coroutine.lua。

它对Lua原生的coroutine进行了扩展。

coroutine.start(f, ...)

输入f为函数,...为f所需的参数,返回协程的句柄。与原生的coroutine.create方法相比,为协程增加了一个定时器,使得协程在当前帧的LateUpdate里执行。

coroutine.wait(t, co, ...)

t为秒数,co为协同程序句柄,...为等待结束继续执行时所需要的参数。

coroutine.step(t, co, ...)

t为帧数,co为协同程序句柄,...为等待结束继续执行时所需要的参数。

coroutine.www(www, co)

www为WWW的对象,co为协同程序句柄(为什么没有参数???),会在WWW下载完毕之后继续协程。

coroutine.stop(co)

co为协同程序。会停止协同程序相关的计时器(wait\step\www)。

示例:

local co
co = coroutine.start(function()
    print("coroutine")
    coroutine.wait(1,co)
    print("wait")
end)


没有更多推荐了,返回首页