精华内容
下载资源
问答
  • Unity中使用ulua的个人经验总结 Lua代码都是运行时才编译的,不运行的时候就如同一张图片、一段音频一样,都是文件;所以更新逻辑只需要更新脚本,不需要再编译,因而Lua能轻松实现“热更新”。Ulua是一...

    Unity中使用ulua的个人经验总结


    Lua代码都是运行时才编译的,不运行的时候就如同一张图片、一段音频一样,都是文件;所以更新逻辑只需要更新脚本,不需要再编译,因而Lua能轻松实现“热更新”。Ulua是一款非常实用的unity插件,它能让unity支持Lua语言,而且运行效率还不错。下面就跟大家谈谈我用ulua的一些心得。

     

    Ulua的使用流程一般为:

    实例化LuaState对象(new LuaState())è加载Lua代码(LuaState. DoString(string))è调用Lua代码中的方法(GetFunction(string),LuaFunction.callFunction(string))。其中,加载Lua代码这一块,可以直接赋一段Lua代码字符串,也可以指定一个Lua脚本文件。为了热更新,应当采用第二种加载方法,即创建一个Lua脚本文件。由于Unity不支持扩展名为lua的文件,所以可将Lua脚本扩展名定为txt(纯文本文件),并用unity的TextAsset列表负责记录所有脚本文件。建议列表中给每个脚本搭配一个string类型的ID,这样凭此ID即可加载正确的lua脚本;另外在LuaState类中新增一个String类型的public成员,赋值为该ID。这样一旦某个Lua脚本在运行时报错,可根据输出的ID值判断是哪个Lua脚本有错误。

     

    关于Lua里的预处理:

    luanet.load_assembly("Assembly-CSharp")

    luanet.load_assembly('UnityEngine')

    Vector2 = luanet.import_type('UnityEngine.Vector2')

    Vector3 = luanet.import_type('UnityEngine.Vector3')

    GameObject = luanet.import_type('UnityEngine.GameObject')

    luanet.import_type('System.Collections.Generic.List')

    Debug = luanet.import_type('UnityEngine.Debug')

    这些都是常用的Lua预处理,建议单独写个Lua脚本记录这些,以后加载其他Lua脚本前都先加载一下这个脚本。自定义C#类也是可以import的,import操作是Lua调用C#的前提。当然在C#中实例化的LuaState也可以预定义一些Lua全局变量,这都是在C#里完成的,比如:

    [code]csharpcode:

    void SetLuaData(LuaState lua){       lua["transform"] = transform;       lua["gameObject"] = gameObject;}

    预定义了两个变量,一个是transform,一个是gameObject。

     

    关于Lua里的全局变量:

    Lua里所有的字符串,如果不是关键字或者运算符,就都是变量;这些变量中,凡是没用local关键字修饰的,就是全局变量,反之,则是局部变量。每个LuaState对象,当它加载过Lua代码以后,它里面定义的全局变量,在这个对象生命期内是一直存在的。如果两次调用这个LuaState的某方法,第一次将某全局变量进行了修改,那么第二次,这个全局变量会在第一次修改的基础上继续修改。

     

    关于Lua在Unity的适用范围:

    虽然Lua可以负责Unity工程的任何模块,但是出于对游戏性能的考虑,尽量少的低频率的调用Lua,比如尽量少在Update函数中调用Lua、循环利用已经实例化过的LuaState避免浪费资源。对于那些不需要高效运算的模块,比如UI部分,就可以放心大胆的使用Lua。

     

    关于Lua与NGUI的适配:

    调用Lua的主要方式就是callFunction,而对于NGUI来说,一般都是按钮触发某C#脚本的函数,那么如何用按钮触发Lua的函数呢?这就需要有个C#脚本作为“中介”,这个“中介”需要有自己的LuaState实例,当执行“中介”的某个方法时,由该方法调用callFunction。至于具体调用Lua脚本的哪个方法,可以通过传参的方式告诉这个“中介”——修改NGUI的ButtonMessage类,加入新的public string LuaFunctionName成员,以后由它来制定要调用的Lua方法名就好了。而通过NGUI的UIButton等调用C#的方法,也是同理的(NGUI3.5.6版以后,可以给UIButton等等组件的触发方法添加参数了)。

     

    关于Lua与SimpleJSON的适配:

    SimpleJSON是一个开源的JSON库,这个详见之前的博客。由于Lua语言无法理解C#里面的属性,所以凡是SimpleJSON里的public A{get,set}这种,要新写一些接口函数返回它们的取值,以供Lua调用。而且Lua调用C#里经过很多重载的函数,也经常判断错误(这是个bug?),所以干脆多弄一些函数名,避免调用错误。

     

    关于Lua与Lua之间的调用:

    在Unity中使用Ulua,想要让两个Lua脚本彼此调用是很难的,需要通过C#作为“中介”,而且Lua不支持C#的泛型,所以不能用GetComponnet<类名>()的形式,只能用GetComponnet (“类名”)的形式去获取组件。两个Lua脚本相互传参也很麻烦,因为有了C#脚本作为“中介”,所以不能传tabel类型的参数,我的做法是将若干参数拼成一个json字符串传递过去,另一方再解json包。感觉有点蛋疼。不过这种情况并不多见,都是可以避免的(比如一个模块只用一个大Lua脚本,各自独立减少沟通)。

     

    关于Lua编辑器:

    个人使用的是notepad++,也有很多人用sublime,代码折叠这块notepad++更好一些,而sublime在功能上貌似更强大一些。

     

    Unity编程的亲们,有没有在Unity运行状态下修改并保存了脚本,然后切回来Unity直接卡死的惨痛经历?使用Lua,你将告别这一现象,有木有心动呢?


    展开全文
  • Ulua是一款非常实用的unity插件,它能让unity支持Lua语言,而且运行效率还不错。下面就跟大家谈谈我用ulua的一些心得。   Ulua使用流程一般为: 实例化LuaState对象(new LuaState())è加载Lua代

    Lua代码都是运行时才编译的,不运行的时候就如同一张图片、一段音频一样,都是文件;所以更新逻辑只需要更新脚本,不需要再编译,因而Lua能轻松实现“热更新”。Ulua是一款非常实用的unity插件,它能让unity支持Lua语言,而且运行效率还不错。下面就跟大家谈谈我用ulua的一些心得。

     

    Ulua的使用流程一般为:

    实例化LuaState对象(new LuaState())è加载Lua代码(LuaState. DoString(string))è调用Lua代码中的方法(GetFunction(string),LuaFunction.callFunction(string))。其中,加载Lua代码这一块,可以直接赋一段Lua代码字符串,也可以指定一个Lua脚本文件。为了热更新,应当采用第二种加载方法,即创建一个Lua脚本文件。由于Unity不支持扩展名为lua的文件,所以可将Lua脚本扩展名定为txt(纯文本文件),并用unity的TextAsset列表负责记录所有脚本文件。建议列表中给每个脚本搭配一个string类型的ID,这样凭此ID即可加载正确的lua脚本;另外在LuaState类中新增一个String类型的public成员,赋值为该ID。这样一旦某个Lua脚本在运行时报错,可根据输出的ID值判断是哪个Lua脚本有错误。

     

    关于Lua里的预处理:

    luanet.load_assembly("Assembly-CSharp")

    luanet.load_assembly('UnityEngine')

    Vector2 = luanet.import_type('UnityEngine.Vector2')

    Vector3 = luanet.import_type('UnityEngine.Vector3')

    GameObject = luanet.import_type('UnityEngine.GameObject')

    luanet.import_type('System.Collections.Generic.List')

    Debug = luanet.import_type('UnityEngine.Debug')

    这些都是常用的Lua预处理,建议单独写个Lua脚本记录这些,以后加载其他Lua脚本前都先加载一下这个脚本。自定义C#类也是可以import的,import操作是Lua调用C#的前提。当然在C#中实例化的LuaState也可以预定义一些Lua全局变量,这都是在C#里完成的,比如:

    [code]csharpcode:

    void SetLuaData(LuaState lua){       lua["transform"] = transform;       lua["gameObject"] = gameObject;}

    预定义了两个变量,一个是transform,一个是gameObject。

     

    关于Lua里的全局变量:

    Lua里所有的字符串,如果不是关键字或者运算符,就都是变量;这些变量中,凡是没用local关键字修饰的,就是全局变量,反之,则是局部变量。每个LuaState对象,当它加载过Lua代码以后,它里面定义的全局变量,在这个对象生命期内是一直存在的。如果两次调用这个LuaState的某方法,第一次将某全局变量进行了修改,那么第二次,这个全局变量会在第一次修改的基础上继续修改。

     

    关于Lua在Unity的适用范围:

    虽然Lua可以负责Unity工程的任何模块,但是出于对游戏性能的考虑,尽量少的低频率的调用Lua,比如尽量少在Update函数中调用Lua、循环利用已经实例化过的LuaState避免浪费资源。对于那些不需要高效运算的模块,比如UI部分,就可以放心大胆的使用Lua。

     

    关于Lua与NGUI的适配:

    调用Lua的主要方式就是callFunction,而对于NGUI来说,一般都是按钮触发某C#脚本的函数,那么如何用按钮触发Lua的函数呢?这就需要有个C#脚本作为“中介”,这个“中介”需要有自己的LuaState实例,当执行“中介”的某个方法时,由该方法调用callFunction。至于具体调用Lua脚本的哪个方法,可以通过传参的方式告诉这个“中介”——修改NGUI的ButtonMessage类,加入新的public string LuaFunctionName成员,以后由它来制定要调用的Lua方法名就好了。而通过NGUI的UIButton等调用C#的方法,也是同理的(NGUI3.5.6版以后,可以给UIButton等等组件的触发方法添加参数了)。

     

    关于Lua与SimpleJSON的适配:

    SimpleJSON是一个开源的JSON库,这个详见之前的博客。由于Lua语言无法理解C#里面的属性,所以凡是SimpleJSON里的public A{get,set}这种,要新写一些接口函数返回它们的取值,以供Lua调用。而且Lua调用C#里经过很多重载的函数,也经常判断错误(这是个bug?),所以干脆多弄一些函数名,避免调用错误。

     

    关于Lua与Lua之间的调用:

    在Unity中使用Ulua,想要让两个Lua脚本彼此调用是很难的,需要通过C#作为“中介”,而且Lua不支持C#的泛型,所以不能用GetComponnet<类名>()的形式,只能用GetComponnet (“类名”)的形式去获取组件。两个Lua脚本相互传参也很麻烦,因为有了C#脚本作为“中介”,所以不能传tabel类型的参数,我的做法是将若干参数拼成一个json字符串传递过去,另一方再解json包。感觉有点蛋疼。不过这种情况并不多见,都是可以避免的(比如一个模块只用一个大Lua脚本,各自独立减少沟通)。

     

    关于Lua编辑器:

    个人使用的是notepad++,也有很多人用sublime,代码折叠这块notepad++更好一些,而sublime在功能上貌似更强大一些。

     

    Unity编程的亲们,有没有在Unity运行状态下修改并保存了脚本,然后切回来Unity直接卡死的惨痛经历?使用Lua,你将告别这一现象,有木有心动呢?

    展开全文
  • Unity 初次使用ulua,熟悉C#和Lua交互

    千次阅读 2019-04-17 14:24:30
    Unity 初次使用ulua,C#和Lua互相调用说明下载导入C#和Lua交互DostringDofile 说明 一直都想实现Unity的热更新,但因为种种原因搁置了。前段时间学习了一下Lua的基本语法,发现这门语言还真是简单易学。于是实现...

    说明

    一直都想实现Unity的热更新,但因为种种原因搁置了。前段时间学习了一下Lua的基本语法,发现这门语言还真是简单易学。于是实现Unity热更新的想法又开始蠢蠢欲动了…
    看了一些大佬们的博客,发现C#和Lua之间交互的框架还挺多,思来想去最后决定使用ulua框架。
    选择ulua框架的原因是它全平台支持,而且通过LuaJit进行加速,效率上不会太低,而且使用简单,导入package就可以编写代码了。不过ulua的作者只提供了ulua的插件包,并没有提供整套插件源码,但对于我这种新手来说也没什么影响…反正源码也看不懂,好用就行哈哈哈哈哈哈
    我主要参考的是这篇博客,整理得非常详细——[整理]Unity3D游戏开发之Lua

    下载

    首先,当然要先下载ulua包,我实在这个网站上下载的——链接
    这个网站里面的网盘链接已经失效了,我是通过GitHub下载的
    选择GitHub
    附上GitHub地址——链接
    不知道是不是网络的问题,download总是失败,所以最后我选择拷贝HTTPS链接然后Clone
    选择Clone
    Clone完成后,有这些东西:
    Clone完成

    导入

    新建或者打开一个Unity项目
    打开Unity项目文件夹所在位置,原封不动地将下载下来的所有文件拷贝到了项目目录下
    拷贝然后会弹出有同名文件的提示,基本都是一些ProjectSettings文件夹下的东西,我选择了跳过
    好了,切换到Unity下时发现正在加载导入的资源,过了一会儿之后导入成功
    可以在Unity窗口下的Assets下也看到LuaFramework和Plugins也导入了
    在这里插入图片描述
    嗯,接下来试一试能不能用

    C#和Lua交互

    参考了ulua的文档——链接
    在我在自己的Assets文件夹下的Scripts文件夹下新建了一个CSharpLuaTest.cs文件,将这个C#脚本绑在摄像头上,开始编写C#代码。
    看文档说是用LuaScriptMgr更加高效,因为使用了去反射机制(不懂2333),但是我自己写的时候发现没有这个LuaScriptMgr类了,于是用的是LuaState类创建lua虚拟机。

    Dostring

    通过Dostring函数可以直接执行string中的lua代码

    LuaState luaState = new LuaState(); // 创建lua虚拟机,要放到Start()函数里
    luaState.DoString("print('HelloWorld!')"); // 执行String形式的Lua代码
    

    报错:
    报错这是因为没有加上Start()函数,这在文档中没有写到…自己掉坑里了然后试着加上Start()函数就对了

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using LuaInterface;
    
    public class CSharpLuaTest : MonoBehaviour {
    
        private LuaState luaState;
    
    	// Use this for initialization
    	void Start ()
        {
            luaState = new LuaState(); // 创建lua虚拟机,要放到Start()函数里
            luaState.Start(); // 这一句要加上
            luaState.DoString("print('HelloWorld!')"); // 执行String形式的Lua代码
        }
    }
    

    OK,运行!HelloWorld!
    HelloWorld

    Dofile

    Dofile是执行文件中的lua代码
    想到可以通过先读取lua文件转化成string,然后是用上面的Dostring函数一样可以执行

    TextAsset scriptFile;
    // scriptFile读取文件
    luaState.DoString(scriptFile.text);
    

    不过直接有个Dofile函数,何乐而不为呢
    在Assets文件夹下建立了一个StreamingAssets文件夹,在StreamingAssets文件夹里面创建了一个Test.lua文件:
    Test.luaCSharpLuaTest.cs的Start()函数中增加:

    luaState.DoFile(Application.streamingAssetsPath + "/Test.lua");// 执行文件中的Lua代码
    

    OK!运行!
    HelloWorld

    C#访问Lua变量

    CSharpLuaTest.cs的Start()函数改动如下:

    // Use this for initialization
    void Start ()
    {
    	luaState = new LuaState(); // 创建lua虚拟机,要放到Start()函数里
    	luaState.Start(); // 这一句要加上
    	
    	luaState["luaVar"] = 10; // 设置luaVar的值为10
    	luaState.DoFile(Application.streamingAssetsPath + "/Test.lua"); // 执行文件中的Lua代码
    	Debug.Log("Read from lua:" + luaState["luaVar"].ToString()); // 读取Lua中的luaVar值
    }
    

    Test.lua改动如下:

    print('luaVar is '..luaVar)
    luaVar = 15
    

    上述代码的执行过程为:C#中先设置luaVar的变量值为10,然后执行lua代码;lua代码中打印luaVar的值并将其改变至15,;C#读取改变后的luaVar变量值并且打印
    OK!运行!
    C#访问Lua变量然后试试读取lua中的Table:
    C#代码:

    void Start ()
    {
        luaState = new LuaState(); // 创建lua虚拟机,要放到Start()函数里
        luaState.Start(); // 这一句要加上
        
        luaState["luaVar"] = 10; // 设置luaVar的值为10
        luaState.DoFile(Application.streamingAssetsPath + "/Test.lua"); // 执行文件中的Lua代码
        Debug.Log("Read from lua:" + luaState["luaVar"].ToString()); // 读取Lua中的luaVar值
    
        LuaTable luaTable = (LuaTable)luaState["luaTable"];
        LuaDictTable<string, string> luaDictTable =  luaTable.ToDictTable<string, string>();
        foreach(LuaDictEntry<string, string> lde in luaDictTable )
        {
            Debug.Log(lde.Key + ": " + lde.Value);
        }
    }
    

    lua代码:

    print('luaVar is '..luaVar)
    luaVar = 15
    
    luaTable = {['name'] = 'wawayu', ['age'] = 3}
    

    OK!运行!
    读取TableC#实际是引用了lua中的table,因此可以通过C#中直接修改或者增加table的变量,例如:

    luaDictTable["level"] = "1";
    

    对应的lua中的table也会增加这个level变量

    C#调用Lua function

    C#代码如下:

    // Use this for initialization
    void Start ()
    {
        luaState = new LuaState(); // 创建lua虚拟机,要放到Start()函数里
        luaState.Start(); // 这一句要加上
        
        luaState["luaVar"] = 10; // 设置luaVar的值为10
        luaState.DoFile(Application.streamingAssetsPath + "/Test.lua"); // 执行文件中的Lua代码
    
        LuaFunction f = luaState.GetFunction("luaFun");
        object[] obj = f.LazyCall("I called a lua function");
        print(obj[0]);
        print(obj[1]);
    }
    

    lua代码如下:

    function luaFun(str)
    	print(str)
    	return 'I am called', 'How are you?'
    end
    

    在lua代码中定义了一个函数,传入一个参数,返回两个string
    在C#代码中可以使用object[]数组获取lua函数的返回值,这里lua返回来两个string,所以object[]数组有两个值——(注意是C#自带的object数组,而不是UnityEngine的Object数组)
    使用f.Call()也可以调用函数,但是Call的返回值为void,所以这里使用的是f.LazyCall()
    OK!运行!
    call lua function

    lua协程

    注意是lua的协程,而不是Unity的协程!两者有区别!
    个人理解:
    Unity的协程更像是一个轻量级的线程,辅助调用它的主线程做事
    lua的协程更像是一种中断保存,它有运行态、挂起态、停止态,通过yield和resume在挂起和运行之间切换
    C#代码:

    void Start ()
    {
        luaState = new LuaState(); // 创建lua虚拟机,要放到Start()函数里
        luaState.Start(); // 这一句要加上
        
        luaState["luaVar"] = 10; // 设置luaVar的值为10
        luaState.DoFile(Application.streamingAssetsPath + "/Test.lua"); // 执行文件中的Lua代码
    
        LuaFunction f = luaState.GetFunction("luaFun");
        f.Call();
        f.Call();
    }
    

    lua代码:

    function corFun()
    	print("coroutine start")
    	for i = 1, 10 do
    		print(i)
    		coroutine.yield()
    	end
    	print("coroutine end")
    end
    
    local co = coroutine.create(corFun)
    
    function luaFun()
    	coroutine.resume(co)
    end
    

    上述代码的意思是:luaFun中启动协程,在被启动的协程函数corFun每次循环都会挂起自身;在C#中两次调用了luaFun
    结果如下:
    协程

    C#向lua传递数组作为参数

    C#代码:

    void Start ()
    {
        luaState = new LuaState(); // 创建lua虚拟机,要放到Start()函数里
        luaState.Start(); // 这一句要加上
        
        luaState["luaVar"] = 10; // 设置luaVar的值为10
        luaState.DoFile(Application.streamingAssetsPath + "/Test.lua"); // 执行文件中的Lua代码
    
        LuaFunction f = luaState.GetFunction("luaFun");
        string[] objs = { "aaa", "bbb", "ccc" };
        object[] r = f.LazyCall((object)objs);//注意这里需要将参数转成object,否则数组会被当成多参数传递
        for (int i = 0; i < r.Length; i++)
        {
            Debug.Log(r[i].ToString());
        }
    }
    

    lua代码

    function luaFun(array)
    	for i = 0, array.Length - 1 do
    		print(array[i])
    	end
    	return 1, '123', true
    end
    

    需要注意的地方有两点:

    1. C#中Call的时候需要(object)objs,将数组参数转化为object类型,不然会被当做多参数传递
    2. 在lua中,读取数组内容时不能使用ipairs和pairs操作,因为传递过去的类型为userdata而不是lua中的table

    结果如下:
    数组参数传递

    小结

    大致搞清楚了ulua的基本用法,文档中还有一些像C#类的重载、C#的委托机制等,这些我在自学C#的时候就有些懵,就先跳过了
    等搞清楚了再写篇博客
    加油!与君共勉!


    今天研究了一下,发现自己上面用的其实是基于tolua#的LuaFramework_UGUI
    看了官方的说明,大概各种区别如下:
    ulua:支持反射+warp方式;
    cstolua:基于ulua,更快;
    SimpleFramework_NGUI/UGUI:基于ulua的框架,是ulua如何使用的演示,分别支持NGUI和UGUI两种Unity的UI版本;
    tolua#:不支持反射(暂时)+warp方式,基于ulua,是ulua第三代超级热更新方案,效率比ulua还要高;
    LuaFramework_NGUI/UGUI:基于tolua的框架,新的引擎新的框架!

    因为自己也是初学者,找下载资源的时候也是懵懵的,下了个以为是ulua的东西。。。但就官方说法而言,tolua#效率比ulua还要高,哈哈哈哈误打误撞反而选了个更好的

    展开全文
  • 看这篇文章纯粹是为了跟随Siki老师的视频学习用的,现在5.6版本的Unity用的是toLua和luaFramework框架,我给大家地址: https://github.com/jarjin/LuaFramework_UGUI 因为这个插件从16年就已经停止更新了,当我...

     

    看这篇文章纯粹是为了跟随Siki老师的视频学习用的,现在5.6版本的Unity用的是toLua和luaFramework框架,我给大家地址:

    https://github.com/jarjin/LuaFramework_UGUI

    因为这个插件从16年就已经停止更新了,当我导入SimpleFrameWork插件之后,开始Gen Lua Wrap Files,然后就开始Build Windows Resource.

    但是问题来了,因为报错问题的代码我一上来看不是很明了。百度了一下报错的问题但是还是找不到根源。头一下就大了,说实话,看着一行行乱麻一样的代码想慢慢捋顺但是实在没那个心思。就怕花了很长时间不但解决不了问题还越看越懵。于是就试着从Siki老师的源码包里找出对应的代码做比较,看看为什么在他的电脑上可以运行的代码我这里不能, 是不是有什么不一样。

    接着发现问题果然找到了突破。

    Assets/Scripts/Utility/Util.cs(482,17): error CS0103: The name `EditorApplication' does not exist in the current context

    引起CS0103号错误的原因是你使用的变量名或者方法名并不存在于当前上下文中。

    这个报错代码修改之后

    其它的报错我就直接找出对应的脚本替换掉!

    最后我把那两个需要替换的脚本的地址给大家:https://pan.baidu.com/s/1djQvHJzyyFh9HplcZuUWGQ

    展开全文
  • Ulua热更新具体流程、使用说明 本文提供全流程,中文翻译。Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) 1 —— 未完 1 ...
  • Unity3d之ULua与XLua应用

    千次阅读 2018-02-26 11:17:02
    初学ULua与XLua,这里简单介绍一下各自特点与使用步骤,若有不当之处,欢迎指正。一:介绍 ULua与XLua都是用于Unity项目的热更新。 ULua的集成开发环境为SimpleFramework,分为NGUI版和UGUI版。实际上,ULua是对...
  • 自己的lua类引用  Event = require 'events'  然后要使用的地方添加事件AddListener(eventName,handler):  Event.AddListener("even",   function ()   print('onEvent')   end   )  ...
  • Unity3D + ulua simpleframework的问题汇总

    千次阅读 2016-02-14 14:30:45
    使用最新版本的(此时最新)的ulua, 生成wrapper文件时,对范型支持支持不是很好,如: {System.Collections.Generic.List`1[System.String]&} 的type类型,会生成出System.Collections.Generic.List`1[System....
  • Unity热更新ULua(一)

    2016-01-30 23:14:38
    1、Lua,and逻辑运算符如果第一个参数是false,则返回false,不会执行第二个参数的代码(即使第二个参数是一个错误的表达式,也能顺利运行);如果第一个参数是true,返回第二个参数的值。 同理,or逻辑运算符...
  • Unity3d为ulua提供更新的接口

    千次阅读 2014-12-27 16:21:36
    /// /// 写入资源. /// /// Filepath. /// Lua回调函数. public void WriteAssetBundleToLocal(string filepath,System.Object luafunc){ StartCoroutine (WriteToLocal (filepath,luafunc));...
  • unity ulua使用方法一

    千次阅读 2016-10-08 17:16:34
    概念热更新指的是不关闭服务器的前提下,对...Ulua是一款非常实用的unity插件,它能让unity支持Lua语言,而且运行效率还不错。Unity 的原生c#是无法移动端上进行热更新的,那么如果线上发布遇到重大闪退事故的话
  • Lua的系统学习(杂)_使用uLua在Unity中创建一个Sphere小球 首先桌面上创建一个ulua.txt,然后创建一个C#脚本挂摄像机上,C#脚本具体如下: using System.Collections; using System.Collections.Generic; using ...
  • 启动x-studio365最新版本10.0.3300.160(点击下载), 支持Unity ulua/tolua slua(32/64位) Lua调试 【文件】【打开文件夹(Unity或Cocos2d-x Lua】 弹出的文件夹选择对话框选择Unity工程根目录即可 打开后界面...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 894
精华内容 357
热门标签
关键字:

在unity中使用ulua