xLua is a framework for adding Lua scripting to C# environments such as Unity,.NET, and Mono.
xLua adds Lua scripting capabilities to C# environments such as Unity,.NET, and Mono. With xLua, these Lua codes can be easily intercalled with C#.
class=”pgc-h-arrow-right” data-track=”5″>
overall
-
- The core code does not depend on the generated code, and the generated directory can be deleted at any time
- lua functions are mapped to c# delegate, lua table is mapped to interface, and there is no C# gc alloc overhead at the interface level
- All primitive value types, all enumerations, fields are value type struct, passed between Lua and C# No C# gc alloc
- LuaTable, LuaFunction provides GC-free access interface
- Generate optimal code through static analysis during code generation
- Support pointer passing between C# and Lua
- Add Lua third-party extensions
without changing the code
- Generate engine to provide interface for secondary development
C# call Lua
-
- Call Lua function
- Call Lua function as delegate
- Call lua function with LuaFunction
- Access Lua’s table
- LuaTable generalized Get/Set interface, call without gc, can specify the type of Key, Value
- access
with interface annotated with CSharpCallLua
- Copy the value to struct, class
toolchain
- Lua Profiler
- can be sorted according to the total call duration, average call duration and number of calls
- shows the name of the lua function and the name and line number of the file it is located in
- If a C# function, it will show that this is a C# function
- Support real machine debugging
class=”pgc-h-arrow-right” data-track=”39″>
Open the zip package and you will see an Assets directory, which corresponds to the Assets directory of the Unity project. Keep this directory structure in your Unity project.
class=”pgc-h-arrow-right” data-track=”42″>
A complete example is just 3 lines of code:
With xLua installed, create a MonoBehaviour and drag it to the scene. Add the following code to Start:
-
- DoString parameter is string, you can enter any legal Lua code, this example calls C# UnityEngine.Debug.Log in lua to print a log
- A LuaEnv instance corresponds to a Lua virtual machine. For overhead reasons, globally unique
is recommended
XLua.LuaEnv luaenv = new XLua.LuaEnv();
luaenv.DoString("CS.UnityEngine.Debug.Log('hello world')");
luaenv.Dispose();
C# actively calling lua is also easy. For example, to call lua system functions, the recommended way is:
- declare
[XLua.CSharpCallLua]
public delegate double LuaMax(double a, double b);
- bind
It is recommended to bind once and reuse. If the code is generated, calling max does not produce gc alloc.
var max = luaenv.Global.GetInPath< LuaMax> ("math.max");
- call
Debug.Log("max:" + max(32, 12));
—END—
Open source: BSD-3