精华内容
下载资源
问答
  • 自己的lua类引用  Event = require 'events'  然后要使用的地方添加事件AddListener(eventName,handler):  Event.AddListener("even",   function ()   print('onEvent')   end   )  ...

    2个文件下载请往:http://game.ceeger.com/forum/read.php?tid=16589&fid=2

    使用方式: 

    在自己的lua类中引用 
    Event = require 'events' 
    然后要在你使用的地方添加事件AddListener(eventName,handler): 

    Event.AddListener("even", 
     function () 
             print('onEvent') 
        end 
     ) 
    在需要广播事件的地方Brocast(eventName,...) 
    Event.Brocast('even','chiuan') 


    或者你需要移除这个监听者RemoveListener(eventName,handler) 
    Event.RemoveListener('even')全部信息 

    Event.RemoveListener('even',yourHandler)某个



    展开全文
  • Unity热更新ULua(一)

    2016-01-30 23:14:38
    1、Lua,and逻辑运算符如果第一个参数是false,则返回false,不会执行第二个参数的代码(即使第二个参数是一个错误的表达式,也能顺利运行);如果第一个参数是true,返回第二个参数的值。 同理,or逻辑运算符...
    0、Lua基础语法。
    1、在Lua中,and逻辑运算符如果第一个参数是false,则返回false,不会执行第二个参数的代码(即使第二个参数是一个错误的表达式,也能顺利运行);如果第一个参数是true,返回第二个参数的值。 同理,or逻辑运算符如果第一个参数不是false,则返回第一个参数的值(不会执行第二个参数的代码);否则返回第二个参数的值。这就是所谓的逻辑运算符短路求值。
    2、可以使用 type()函数判断变量的类型
    3、table类型可以当作数组使用。
    4、可以使用tonumber()函数和tostring()函数显式地进行字符与数字的转换
    5、string.char()函数根据传入的ASCII编码返回该编码对应的字符。如:string.char(10),表示字符换行符,10是换行符的ASCII编码。   
    string.len()函数求字符串的长度   
    string.sub(aString, start, end) 函数返回指定字符串的子串
    6、string.format()函数格式化输出指定字符串。%s表示字符串,%d表示所有数字,%D表示非数字,%a表示字母,%c表示控制字符,%l小写字母,%p标点符号,%s空格符号,%u大写字母,%w字母数字,%x十六进制数,%z用0表示的字符。加%前缀可以让特殊符号也能用在格式化中(如:().%+_*?[ ^ $ ]),如%%代表百分比符号。%.4f表示小数点后有4位的浮点数,%02d.表示至少有两个数字的整数,如果不足两个数字则用0补足。
    7、sting.find(sourceString, targetString) 函数在sourceString字符串中查找第一个符合targetString字符串的位置,如果找到则返回开始和结束的位置,没找到则返回nil。
    8、string.gsub(sourceString, pattern, replacementString) 函数返回一个字符串,sourceString字符中满足pattern格式的字符都会被替换成replacementString参数的值。
    9、string.gfind(sourceString, pattern) 函数遍历一个字符串,一旦查找到符合指定格式的字符串就返回该子串。
    10、table
    一般table可以当做数组使用,可以通过table[n]的索引形式访问任意数组中的某个成员。在Lua中,table还能被当做字典dictionary数据使用,并且数组跟字典的用法还能混合使用(实质上还是数组,只不过索引从数字变成其他属性值)。
    注意,上述循环中的pairs()函数可以遍历table中的每一对值(索引以及索引对应的value,有点类似字典,不是吗?)
          事实上,table的索引还可以是table本身,这样就组成了一个多维table或多维字典。跟其他语言的多维数组或字典比起来,使用真是超级方便,非常非常的灵活。


    展开全文
  • Lua的系统学习(杂)_使用uLua在Unity中创建一个Sphere小球 首先在桌面上创建一个ulua.txt,然后创建一个C#脚本挂摄像机上,C#脚本具体如下: using System.Collections; using System.Collections.Generic; using ...

    Lua的系统学习(杂)_使用uLua在Unity中创建一个Sphere小球<24/10/2017>

    首先在桌面上创建一个ulua.txt,然后创建一个C#脚本挂摄像机上,C#脚本具体如下:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using LuaInterface;
    
    public class TestUlua : MonoBehaviour
    {
        public TextAsset text;
        void Start()
        {
            LuaScriptMgr lua = new LuaScriptMgr();
            lua.DoString(text.text);
        }
    }
    
    将ulua.txt拖入Unity然后输入以下文本:

    luanet.load_assembly("UnityEngine")
    GameObject=luanet.import_type("UnityEngine.GameObject")
    PrimitiveType=luanet.import_type("UnityEngine.PrimitiveType")
    
    Util=luanet.import_type('Util')
    Vector3=luanet.import_type("UnityEngine.Vector3")
    g=GameObject.CreatePrimitive(PrimitiveType.Sphere)
    Util.AddComponent(g,"UnityEngine","Rigidbody")
    保存后将ulua.txt拖入脚本中,最后运行效果如下:


    展开全文
  • 版本:unity 5.4.1 语言:C#   刚进官网的时候就注意到了,这个框架是国人写的,使用的时候各种中文注释也是倍感亲切,作者还提供了视频、例子、各种提醒,生怕使用者不会用。   首先吐槽一番Lua吧,我觉得这...

    版本:unity 5.4.1  语言:C#

     

    刚进官网的时候就注意到了,这个框架是国人写的,使用的时候各种中文注释也是倍感亲切,作者还提供了视频、例子、各种提醒,生怕使用者不会用。

     

    首先吐槽一番Lua吧,我觉得这个语言是最逗逼的语言,index从1开始、:使用成员方法、.使用静态方法、 boolean的一个值传进去变成个table...当然在做手游的时候早就体验了它的坑爹之处。

     

    但是做热更新,它基本是不二的选择,然后我记录一下如何用github上作者提供的框架新建和销毁一个UI。

     

    如果使用的是5.4.1版本,一开始就会遇到一个错误:



    然后往上看:

    #if UNITY_5_3_x
    using UnityEngine.SceneManagement;
    #endif

    #if和#endif这两行删除就好,还是需要引入UnityEngine.SceneManagement才行。

     

    还有就是ToLua的第二个例子:


     

    里面文件的路径有点问题改一下就好。

     

    接下来我来介绍一下这个框架的操作思路:

    1.菜单栏Lua -> Generate All,将C# UnityEngine的一些系统类(GameObject、Camera、Light等)生成接口,提供给lua使用,这个步骤导入框架时应该会提醒你生成。生成的文件所在位置:ToLua/Source/Generate。



    2.自己的文件也想提供给lua的,在Editor文件夹下有个CustomSetting类,仿造里面写就好了。



    3.生成lua资源包,点开Scenes下的main场景,再点击菜单栏LuaFramework -> Build Windows Resource就能生成资源包,运行之后就可以看到该例子通过lua文件生成的UI了。



    4.自己用lua文件生成UI,其实照着例子去找关键的地方就好。我提一下关键的点,首先,在Builds下新建个文件夹,再在里面建立一个UGUI的prefab,要求以Panel结尾:



    其次,在Packager类中提供prefab的名字,以便资源打包:

    AddBuildMap("message" + AppConst.ExtName, "*.prefab", "Assets/LuaFramework/Examples/Builds/Message");
    AddBuildMap("image" + AppConst.ExtName, "*.prefab", "Assets/LuaFramework/Examples/Builds/Image");

    然后在Lua文件夹下新建Controller、View的lua文件:



    5.Lua框架中添加自己的Lua文件的注册信息。

    CtrlManager.lua文件:

    require "Controller/ImageCtrl"
    ctrlList[CtrlNames.Image] = ImageCtrl.New();

    define.lua文件:

    CtrlNames = {
    	Prompt = "PromptCtrl",
    	Message = "MessageCtrl",
    	Image = "ImageCtrl"
    }
    
    PanelNames = {
    	"PromptPanel",	
    	"MessagePanel",
    	"ImagePanel"
    }

    6.编写View和Controller,直接放代码吧:

    --ImagePanel.lua
    local transform;
    local gameObject;
    
    ImagePanel = {};
    local this = ImagePanel;
    
    function ImagePanel.Awake(obj)
    	gameObject = obj
    	transform = obj.transform
    	print("ImagePanel.Awake")
    end
    
    function ImagePanel.OnDestroy()
    	print("ImagePanel.OnDestroy")
    end
    
    --ImageCtrl
    require "Common/define"
    
    ImageCtrl = {};
    local this = ImageCtrl;
    
    local gameObject;
    local transform;
    
    function ImageCtrl.New()
    	print("ImageCtrl.New")
    	return this
    end
    
    function ImageCtrl.Awake()
    	print("ImageCtrl.Awake")
    	panelMgr:CreatePanel('Image', this.OnCreate)
    end
    
    function ImageCtrl.OnCreate(obj)
    	print("ImageCtrl.OnCreate")
    	gameObject = obj
    	transform = obj.transform
    end
    
    function ImageCtrl.Close()
    	print("ImageCtrl.Close")
    	panelMgr:ClosePanel(CtrlNames.Image)
    end

    7.此时生成资源包,再运行不会报错,但是也没有效果,因为程序中没有控制生成该UI,想要生成,去看一下Game.lua,我仿造了一发:

    local imageCtrl = CtrlManager.GetCtrl(CtrlNames.Image)
    if imageCtrl ~= nil then
        imageCtrl:Awake()
    end

    这样生成资源包再运行,就能看到自己的prefab出现在GuiCamera的下面了。

     

    8.不过有个错误的啦,你想销毁该UI,然后调用了imageCtrl:Close(),但是并没有什么卵用,这是应该是BUG,这里把ImageCtrl中的Close函数改成下面的写法就好:

    function ImageCtrl.Close()
    	print("ImageCtrl.Close")
    	panelMgr:ClosePanel("Image")
    end

    效果,按照下面Debug信息创建后销毁了自己的UI:



    9.最后提一个函数传递的小坑:

    function ImageCtrl.SetActive(act)
    	print(type(act))
    	gameObject:SetActive(act)
    end

    我写了以上方法,想使用一下代码控制UI的显示隐藏:

    local b = false
    print(type(b))
    imageCtrl:SetActive(b)

    大家也看到了我写的type(b)了,传递之前b是boolean,然后传递后就成了table型了。我有点印象,我去年也遇到过这个问题。

     

    改正方法就是改一下SetAcitve这个方法:

    function ImageCtrl.SetActive(act)
    	print(type(act))
    	gameObject:SetActive(act[0])
    end

    通过以上的学习和探索,我对ULua也有了个大体的把握,这个框架很棒,市面上要做热更新的手游基本上都用这个框架,所以深入学习一下Lua和该框架就很有必要。

     

    不过我暂时入个门,有需要再说。书也看得差不多了,接下来我准备学习Shader和数值分析。


    展开全文
  • ULuaUnity交互原理

    2020-12-15 19:38:02
    1.ulua为tolua原班人马开发,现已不维护,因为公司项目目前使用ulua实现,故写一篇博客记录所学,以期工作中使用ulua更加得心应手。 首先:附上ulua官网地址:http://www.ulua.org/download.html。 由于原班...
  • 1、HelloWorld using LuaInterface; public class HelloWorld : MonoBehaviour { void Start () { LuaState l = new LuaState();... // C#下使用Lua l.DoString("print('hello world 世界')"); } } 2、
  • Unity ulua ugui 获取 InputField 框

    千次阅读 2017-09-23 00:39:52
    ulua中直接获取是获取不到的 local input = GetComonent("InputField"); 按理说应该是好使的 但是忘了很关键的地方 CustomSettings进行注册 注册之后 Clear 一下 就可以的 这个文件 可以看到 Text 已经...
  • 1.SimpleFramework框架配置文件 ... AppConst.cs文件配置了很多项目开发过程,需要使用到的“公共常量信息”。脚本内的常量都有中文备注。所在位置是:Scripts/ConstDefine/AppConst.cs。 字段用“...
  • uLua Unity工作机制

    2016-06-03 16:40:00
     WrapFile.cs类,使用_GT(typeof(XXX)), 注册需要Wrap的C#类型  注册的C#类型被包装成BindType对象,BindType构造函数里获取注册类型的类名,注册给Lua的名称,基类名称,Wrap的文件名称等信息,并保存相应的...
  • 在Unity中使用ulua框架进行热更新时,有的时候需要在不更新整包的情况下增加一些小功能,而这期间会用到一些没有wrap到的Mono属性或者方法,此时可以用过调用tolua的反射获取。 C#代码: using UnityEngine; ...
  • ulua--lua中使用Update定时器

    千次阅读 2016-08-03 13:57:53
    首先介绍一下我现在做的项目,使用unity引擎,LuaFramework框架,用lua脚本实现UI上的逻辑。我负责项目的所有UI,开发的过程遇到很多定时器的需求,之前偷懒没去研究应该怎么做,就c#脚本的Update方法...
  • Lua_ uLua_C#中使用Lua_016

    2017-09-08 11:22:53
    前期工作,导入ulua_v1.25.unitypackage,然后工程引入LuaInterface命名空间。方法一:using LuaInterface; // 常见一个Lua解释器 LuaState lua = new LuaState();//创建全局变量 "num" and "str" lua["num"] = ...
  • 由于近期项目提出了热更新的需求,因此本周末Lua的陪伴下度过。对Lua与Unity3d的搭配使用,仅仅达到了一个初窥门径的程度,记录一二于此。水平有限,欢迎批评指正。网络上关于Lua脚本和Unity3d的配合使用的资料...
  • 由于近期项目提出了热更新的需求,因此本周末Lua的陪伴下度过。对Lua与Unity3d的搭配使用,仅仅达到了一个初窥门径的程度,记录一二于此。水平有限,欢迎批评指正。   网络上关于Lua脚本和Unity3d的配合...
  • uLua异常处理

    2017-07-24 21:04:50
    Unity热更新常采用uLua框架,这里首先分析uLua异常处理,在LuaState 类里存在DoFile函数,当使用DoFile调用lua程序时如果发现有语法错误时,将在Unity控制台打印出错误,接下来分析如何实现其异常功能,首先分析uLua...
  • 的用于编写Lua的插件:https://babelua.codeplex.com/或http://unknownworlds.com/decoda/ 下载了uLua_vX.XX.zip后解压得到一个XXX.unitypackage文件,将该文件导入到我们的工程即可使用uLua了。 我们先来一个...
  • uLua学习笔

    千次阅读 2016-03-15 14:03:50
    //转自 阿诚de窝 uLua下载:http://www.ulua.org/ VS2012/2013的用于编写Lua的插件:...   下载了uLua_vX.XX.zip后解压得到一个XXX.unitypackage文件,将该文件导入到我们的工程即可使用
  • ulua(一)上手

    千次阅读 2016-07-17 18:02:45
    在Unity中使用Lua脚本,各种解决方案很多,我选择较为热门的ulua来试试。 关于ulua的前世今生、各种奇奇怪怪的项目名字、分别包含哪些东西、可以用来做什么,我想首先是要搞清楚的。这些问题的答案在...
  • ulua整数溢出的BUG

    千次阅读 2016-05-14 23:26:05
    我们使用unity5.x开发的新游戏《江湖X》中使用ulua做一些业务逻辑。前期为了开发迅速,没有使用wrap,使用的动态反射(所以很慢)。这两天针对性优化,将lua wrap用了起来。发现一个诡异现象:editor中跑得很...
  • unity热更新

    2016-06-12 22:00:00
    Unity3D 学习笔记4 —— UGUI+uLua...在Unity中使用Lua脚本:语言层和游戏逻辑粘合层处理 Ulua_toLua_基本案例 Unity中使用SLua的一些注意事项 SLua 绑定 Protobuf Protobuf...
  • ulua、tolua原理解析

    2020-11-02 18:39:09
    ulua、tolua之前,我们先来看看Unity热更新相关知识。 什么是热更新 举例来说: 游戏上线后,玩家下载第一个版本(70M左右或者更大),运营的过程,如果需要更换UI显示,或者修改游戏的逻辑,这个时候,...
  • 然而,很多Unity项目选择热更新方案的时候,基本都会选择使用slua,ulua等lua解决方案,编写的lua代码运行C#搭建的解释器上,两者之间可以相互调用,但是性能消耗也是极大的,为了减少C#和lua之间的相互调用,...

空空如也

空空如也

1 2 3 4
收藏数 63
精华内容 25
关键字:

在unity中使用ulua