Skip to content
Sign out
Watch
269Star1,533
Fork
555Code Issues 3 Pull requests 1 Projects 0 Wiki Insights
The fastest unity lua binding solution
unityluabindluajittolua
C#LuaBatchfile
Branch: master
New pull request
Create new file
Upload filesFind file
Clone or download
topameng 更新下群信息
Latest commit 7a4fe1c 5 days ago
Type | Name | Latest commit message | Commit time |
---|---|---|---|
Assets | 1.0.8.536 dofile 加载文件出错。返回异常 | 7 days ago | |
Luajit | 1.0.7.328 加入luajit64在pc64位和ios上编译64位bytecode | 2 years ago | |
Luajit64 | 1.0.7.328 加入luajit64在pc64位和ios上编译64位bytecode | 2 years ago | |
ProjectSettings | 1.0.5.173 LuaLooper update略早于默认时序 | 3 years ago | |
Unity5.x/Assets/Plugins | 1.0.6.235 去掉5.x分支,增加unity5.x目录 | 3 years ago | |
.gitignore | 1.0 | 3 years ago | |
LICENSE | Initial commit | 3 years ago | |
README.md | 更新下群信息 | 5 days ago |
tolua# is a Unity lua static binder solution. the first solution that analyzes code by reflection and generates wrapper classes.
It is a Unity plugin that greatly simplifies the integration of C# code with Lua. which can automatically generate the binding code to access Unity from Lua and map c# constants, variables, functions, properties, classes, and enums to Lua.
tolua# grows up from cstolua. it's goal is to be a powerful development environment for Unity.
Support unity4.6.x and Unity5.x all(copy /Unity5.x/Assets to /Assets)
If you want to test examples(example 1 is excluded)in mobile, first click menu Lua/Copy lua files to Resources. then build it
如果你想在手机上测试例子(例子1除外),首先点击菜单Lua/Copy lua files to Resources, 之后再build.
欢迎大家点星支持,谢谢^_^
有bug 可以到QQ群286510803反馈。 可以加讨论群:
ulua&tolua技术交流群① 341746602(已满)
ulua&tolua技术讨论群② 469941220(已满)
tolua#技术讨论群④ 543826216(已满)
tolua#技术群 286510803
tolua_runtime
https://github.com/topameng/tolua_runtime
Debugger
https://github.com/topameng/Debugger
CString
https://github.com/topameng/CString
protoc-gen-lua
https://github.com/topameng/protoc-gen-lua
LuaFrameWork
https://github.com/jarjin/LuaFramework_NGUI
https://github.com/jarjin/LuaFramework_UGUI
XlsxToLua
https://github.com/zhangqi-ulua/XlsxToLua
UnityHello
https://github.com/woshihuo12/UnityHello
UWA-ToLua
http://uwa-download.oss-cn-beijing.aliyuncs.com/plugins%2FiOS%2FUWA-iOS-ToLua.zip
EmmyLua
https://github.com/tangzx/IntelliJ-EmmyLua
unity_tolua-_zerobrane_api
https://github.com/LabOfHoward/unity_tolua-_zerobrane_api
Basics Math Data Structures
luabitop Quaternion list
struct Vector3 event
int64 Vector4 slot
Time Vector2
Networking Ray
luasocket Color
Parsing Bounds
lpeg Mathf
Protol Touch
pblua RaycastHit
在CustomSetting.cs中添加需要导出的类或者委托,类加入到customTypeList列表,委托加入到customDelegateList列表
通过设置saveDir变量更改导出目录,默认生成在Assets/Source/Generate/下,点击菜单Lua->Generate All,生成绑定文件
在LuaConst.cs中配置开发lua文件目录luaDir以及tolua lua文件目录toluaDir
//例子1 LuaState lua = new LuaState(); lua.Start(); lua.DoString("print('hello world')"); lua.Dispose(); //例子2 LuaState luaState = null; void Awake() { luaState = LuaClient.GetMainState(); try { luaState.Call("UIShop.Awake", false); } catch (Exception e) { //Awake中必须这样特殊处理异常 luaState.ThrowLuaException(e); } } void Start() { luaState.Call("UIShop.Start", false); }
local go = GameObject('go') go:AddComponent(typeof(UnityEngine.ParticleSystem)) go.transform.position = Vector3.zero go.transform:Rotate(Vector3(0,90,0), UnityEngine.Space.World) go.transform:Rotate(Vector3(0, 1, 0), 0) --DoTween 需要在CustomSetting导出前定义USING_DOTWEENING宏,或者取消相关注释 go.transform:DORotate(Vector3(0,0,360), 2, DG.Tweening.RotateMode.FastBeyond360) Shop = {} function Shop:Awake() self.OnUpdate = UpdateBeat:CreateListener(Shop.Update, self) UpdateBeat:AddListener(self.OnUpdate) end function Shop:OnDestroy() UpdateBeat:RemoveListener(self.OnUpdate) end function Shop:OnClick() print("OnClick") end function Shop:OnToggle() print("OnToggle") end function Shop:Update() end --委托 local listener = UIEventListener.Get(go) listener.onClick = function() print("OnClick") end listener.onClick = nil listener.onClick = UIEventListener.VoidDelegate(Shop.OnClick, Shop) listener.onClick = listener.onClick + UIEventListener.VoidDelegate(Shop.OnClick, Shop) listener.onClick = listener.onClick - UIEventListener.VoidDelegate(Shop.OnClick, Shop) local toggle = go:GetComponent(typeof(UIToggle)) EventDelegate.Add(toggle.onChange, EventDelegate.Callback(Shop.OnToggle, Shop)) EventDelegate.Remove(toggle.onChange, EventDelegate.Callback(Shop.OnToggle, Shop)) --事件 local Client = {} function Client:Log(str) end Application.logMessageReceived = Application.logMessageReceived + Application.LogCallback(Clent.Log, Client) Application.logMessageReceived = Application.logMessageReceived - Application.LogCallback(Clent.Log, Client) --out参数 local _layer = 2 ^ LayerMask.NameToLayer('Default') local flag, hit = UnityEngine.Physics.Raycast(ray, nil, 5000, _layer) if flag then print('pick from lua, point: '..tostring(hit.point)) end
这里是更多的示例。
tolua# 不支持动态反射。动态反射对于重载函数有参数匹配问题,函数排序问题,ref,out 参数问题等等。
tolua#提供的替换方法是:
平台 | 属性读写 | 重载函数 | Vector3构造 | GameObject构造 | Vector3归一化 | Slerp |
---|---|---|---|---|---|---|
PC | 0.0465:0.15 | 0.076:0.12 | 0.02:0.001 | 0.1:0.14 | 0.014:0.001 | 0.10:0.11 |
Android | 0.16:1.1 | 0.28:0.76 | 0.17:0.00035 | 0.43:0.5 | 0.21:0.02 | 0.3:0.06 |
iOS | 0.04:0.145 | 0.055:0.11 | 0.017:0.05 | 0.074:0.08 | 0.035:0.11 | 0.078:0.5 |
测试结果为C#:Lua. 环境不同会略有差异。可用数字倍率做参考
PC: Intel(R) Core(TM) i5-4590 [email protected] + 8GB + 64 位win7 + Unity5.4.5p4
Android: 中兴nubia z9 max(NX512J) + Adnroid5.0.2
iOS(il2cpp): IPhone6 Plus
按照1.0.7.355版本更新了测试数据, u5相对u4, 安卓上c#有了不小的提升
参考包内1-24例子
win, android ios using luajit2.1-beta3. macos using luac5.1.5(for u5.x). 注意iOS未编译模拟器库,请用真机测试
Press h to open a hovercard with more details.