Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pangweiwei/slua
Fastest lua binding via static code generating for Unity3D and mono.
https://github.com/pangweiwei/slua
Last synced: 6 days ago
JSON representation
Fastest lua binding via static code generating for Unity3D and mono.
- Host: GitHub
- URL: https://github.com/pangweiwei/slua
- Owner: pangweiwei
- License: mit
- Created: 2015-01-13T11:59:00.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2022-02-18T04:39:24.000Z (almost 3 years ago)
- Last Synced: 2024-12-29T08:07:22.175Z (13 days ago)
- Language: C
- Homepage:
- Size: 46.9 MB
- Stars: 1,398
- Watchers: 174
- Forks: 436
- Open Issues: 32
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-unity3d - slua (Recommend) - Fastest lua binding via static code generating for Unity3D and mono. (Open Source Repositories / Lua)
- awesome-opensource-unity - slua (Recommend) - Fastest lua binding via static code generating for Unity3D and mono. (Open Source Packages / Lua)
- awesome-unity-open-source-on-github - slua - Fastest lua binding via static code generating for Unity and mono (Lua)
README
# slua
Fastest lua binding via static code generating for Unity3D or monoWebsite: http://www.slua.net
slua for Unreal https://github.com/Tencent/sluaunreal
## Continuous Integration Build
| Build | Platform | Type | Status |
| --- | --- | --- | --- |
| *slua-unity* | None | None | None |
| **slua-standalone** | Linux | Test,Build | [![Build Status](https://travis-ci.org/mr-kelly/slua.svg)](https://travis-ci.org/mr-kelly/slua) |
| **slua-standalone** | Windows | Test,Build,Deploy | [![Build status](https://ci.appveyor.com/api/projects/status/vokwhnu95lx5e8g3?svg=true)](https://ci.appveyor.com/project/mr-kelly/slua) |## Release Download
- [slua-unity](https://github.com/pangweiwei/slua/releases/latest)
- [slua-standalone](https://www.nuget.org/packages/slua-standalone)## Integrate with 3rd Lua Library
Standard slua release doesn't contains any 3rd Lua library(like protobuf, lpeg etc), if you want to use this library, can visit this forked repo https://github.com/luzexi/slua, it focus slua on integrate with other 3rd library.
## Use SLua without Unity3D
You can use slua without Unity3D dependency, it call **slua-standalone**. Useful for C# server development. Find it on https://www.nuget.org/packages/slua-standalone , and it's maintained by https://github.com/mr-kelly/slua.
## Framework with slua
You can use this framework to start your project.
This repo https://github.com/lwkl/xproject universal loading framework using slua load lua byte code in all platform.
This repo http://linkcloud.github.io/ poker game using slua.
This repo https://github.com/mr-kelly/KSFramework based on slua for hot reloadable asset bundle framework.
This repo https://github.com/lulersoft/ME_SLua based on slua for simple game framework.
This repo https://github.com/yaukeywang/2DPlatformer-SLua demonstrate 2DPlatformer game using slua.
This repo https://github.com/tenvick/hugula demonstrate Tetris game using slua.
## Help
See inner demo for help or [Document](https://github.com/pangweiwei/slua/wiki) (in chinese).
## Important
For running demo sucessful, you should generate lua wrap file by your self:
Click menu, SLua->All->Make generate all wrap file for your version of unity.
***Had tested for Unity4.6.1/4.6.2/4.6.3/5.0/5.1/5.2/5.3/5.4/5.5***
## Main feature
- static code generating, no reflection, no extra gc alloc, very fast
- remote debugger
- full support iOS/iOS64, support il2cpp
- above 90% UnityEngine interface exported ( remove flash, platform dependented interface )
- 100% UnityEngine.UI interface ( require Unity4.6+ )
- support standalone mode in .net framework/mono without Unity3D
- support UnityEvent/UnityAction for event callback via lua function
- support delegate via lua function (include iOS)
- support yield call
- support custom class exported
- support extension method
- export enum as integer
- return array as lua table
- using raw luajit, can be replaced with lua5.3/lua5.1## Usage
copy Assets/Plugins Assets/Slua to your $Project$/Assets folder, you will see Slua menu,
click Unity->Make UnityEngine, regenerate UnityEngine interface for lua
click Unity->Make UI, regenerate UnityEngine.UI interface for lua
click Custom->Make, generate custom class interface for lua
Clear custom, delete all generated custom interface
Slua/LuaObject contain pre-generated file for exported interface.
Precompiled slua library in Plugins only included x86(32bit)/macosx(32bit)/iOS(armv7,armv7s,arm64)/Android(armv7-a) platform using luajit, you should compile other platform/lua5.1/luajit by yourself, see build.txt for help.
## Usage at a glance
~~~~~~~~~~lua
-- import
import "UnityEngine"function main()
-- create gameobject
local cube = GameObject.CreatePrimitive(UnityEngine.PrimitiveType.Cube)-- find gameobject
local go = GameObject.Find("Canvas/Button")
-- get component by type name
local btn = go:GetComponent("Button")
-- get out parameter
local ok,hitinfo = Physics.Raycast(Vector3(0,0,0),Vector3(0,0,1),Slua.out)
print("Physics Hitinfo",ok,hitinfo)
-- foreach enumeratable object
for t in Slua.iter(Canvas.transform) do
print("foreach transorm",t)
end
-- add event listener
btn.onClick:AddListener(function()
local go = GameObject.Find("Canvas/Text")
local label = go:GetComponent("Text")
label.text="hello world"
end)
-- use vector3
local pos = Vector3(10,10,10)+Vector3(1,1,1)
cube.transform.position = pos
-- use coroutine
local c=coroutine.create(function()
print "coroutine start"Yield(WaitForSeconds(2))
print "coroutine WaitForSeconds 2"local www = WWW("http://www.sineysoft.com")
Yield(www)
print(#Slua.ToString(www.bytes))
end)
coroutine.resume(c)-- add delegate
Deleg.daction = {"+=",self.actionD} --it's ok for iOS
-- remove delegate
Deleg.daction = {"-=",self.actionD} --it's ok for iOS
-- set delegate
Deleg.daction = function() print("callback") end --it's ok for iOS
-- remove all
Deleg.daction = nil
end~~~~~~~~~~
## Export custom class
add CustomLuaClass attribute to your custom class, waiting for compile completed, click "SLua->Custom->Make", you will get interface file for lua.
~~~~~~~~~~c#
[CustomLuaClass]
public class HelloWorld {}
~~~~~~~~~~
## Debugger Support
https://github.com/Tencent/luapanda
### Benchmark
compared with ulua/raw mono.
**with luajit**
![](benchmark.png)
unit is secend, run 200k times / test, more smarller more better.