-
[Unity3D]uLua中类似Unity3D C# Messager的Event System
2014-04-25 11:17:26在自己的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:381、在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小球
2017-10-24 15:27:14Lua的系统学习(杂)_使用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#脚本具体如下:
将ulua.txt拖入Unity然后输入以下文本: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拖入脚本中,最后运行效果如下: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")
-
Unity 3D ULua 基于UGUI 初次使用的心得与体会
2017-03-16 15:52:02版本: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和数值分析。
-
ULua与Unity交互原理
2020-12-15 19:38:021.ulua为tolua原班人马开发,现已不在维护,因为公司项目目前使用ulua实现,故写一篇博客记录所学,以期在工作中使用ulua更加得心应手。 首先:附上ulua官网地址:http://www.ulua.org/download.html。 由于原班... -
菜鸟学习 - Unity中的热更新 - uLua官方 案例
2014-10-18 17:09:371、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 已经... -
unity游戏开发之ULua框架介绍(二)
2018-06-28 19:56:001.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的文件名称等信息,并保存在相应的... -
uLua通过反射获取类成员
2018-10-31 15:47:26在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按钮unity_在Unity3d中解析Lua脚本的方法
2021-01-14 16:34:35由于近期项目中提出了热更新的需求,因此本周末在Lua的陪伴下度过。对Lua与Unity3d的搭配使用,仅仅达到了一个初窥门径的程度,记录一二于此。水平有限,欢迎批评指正。网络上关于Lua脚本和Unity3d的配合使用的资料... -
在Unity3d中解析Lua脚本的方法
2014-09-23 17:56:12由于近期项目中提出了热更新的需求,因此本周末在Lua的陪伴下度过。对Lua与Unity3d的搭配使用,仅仅达到了一个初窥门径的程度,记录一二于此。水平有限,欢迎批评指正。 网络上关于Lua脚本和Unity3d的配合... -
uLua异常处理
2017-07-24 21:04:50Unity热更新常采用uLua框架,这里首先分析uLua异常处理,在LuaState 类里存在DoFile函数,当使用DoFile调用lua程序时如果发现有语法错误时,将在Unity控制台打印出错误,接下来分析如何实现其异常功能,首先分析uLua... -
uLua学习笔记(一):uLua安装及上手
2018-03-29 10:23:28的用于编写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:00Unity3D 学习笔记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] Unity的lua项目中模拟每帧运行一次的协程
2017-07-12 20:59:39然而,很多Unity项目在选择热更新方案的时候,基本都会选择使用slua,ulua等lua解决方案,编写的lua代码运行在C#搭建的解释器上,两者之间可以相互调用,但是性能消耗也是极大的,为了减少C#和lua之间的相互调用,...
-
使用 Linux 平台充当 Router 路由器
-
MySQL 高可用(DRBD + heartbeat)
-
【工具使用篇】Sublime Text 3 全程详细图文使用教程
-
龙芯生态应用开发基础:C语言精要
-
百瓦级全光纤线偏振激光振荡器
-
工程制图 AutoCAD 2012 从二维到三维
-
OpenCV-学习历程21- 霍夫变换2-圆检测(HoughCircles)
-
网页元素轻设计–尊重用户产品体验
-
数据库设计StepbyStep
-
消毒液家居家用品消毒液详情页设计模板.zip
-
PHP SOCKET编程
-
NFS 网络文件系统
-
MySQL 高可用工具 heartbeat 实战部署详解
-
jquery的插件有哪些
-
Employee_Tracker_ManageYourCompany:BCS家庭作业周12-源码
-
敏捷个人:内容框架之执行力
-
编程和游戏
-
实现 MySQL 读写分离的利器 mysql-proxy
-
python-递归-Product_sum-“乘积的和“
-
很多朋友都是从此绝交的,故事很短,却说穿了人性!