随风逐叶 随风逐叶
首页
  • Quick Reference (opens new window)
  • EgretEngine开发者文档 (opens new window)
  • TinaX框架
  • SSH教程
  • VSCode插件开发
关于
  • 分类
  • 标签
  • 归档

rontian

从事游戏开发10多年的老菜鸟一枚!
首页
  • Quick Reference (opens new window)
  • EgretEngine开发者文档 (opens new window)
  • TinaX框架
  • SSH教程
  • VSCode插件开发
关于
  • 分类
  • 标签
  • 归档
  • 框架简介
  • TinaX.Core
  • 基于TinaX创建一个扩展库
  • TinaX.VFS
  • TinaX.UIKit
  • TinaX.I18N
  • TinaX.Lua
  • XLua

    • 简介
      • 基础用法
      • 热补丁
      • 第三方库集成
    • Google.Protobuf
    • Lua-Protobuf
    • 一些优秀的第三方库

    目录

    简介

    # XLua

    # C#下Lua编程支持

    xLua为Unity、 .Net、 Mono等C#环境增加Lua脚本编程的能力,借助xLua,这些Lua代码可以方便的和C#相互调用。

    # xLua的突破

    xLua在功能、性能、易用性都有不少突破,这几方面分别最具代表性的是:

    可以运行时把C#实现(方法,操作符,属性,事件等等)替换成lua实现; 出色的GC优化,自定义struct,枚举在Lua和C#间传递无C# gc alloc; 编辑器下无需生成代码,开发更轻量; 更详细的特性、平台支持介绍请看这里。

    # 安装

    打开zip包,你会看到一个Assets目录,这目录就对应Unity工程的Assets目录,保持这目录结构放到你的Unity工程。

    # 快速入门

    一个完整的例子仅需3行代码:

    安装好xLua,建一个MonoBehaviour拖到场景,在Start加入如下代码:

    XLua.LuaEnv luaenv = new XLua.LuaEnv();
    luaenv.DoString("CS.UnityEngine.Debug.Log('hello world')");
    luaenv.Dispose();
    
    1
    2
    3

    1、DoString参数为string,可输入任意合法的Lua代码,本示例在lua里调用C#的UnityEngine.Debug.Log打印了个日志。

    2、一个LuaEnv实例对应Lua虚拟机,出于开销的考虑,建议全局唯一。

    C#主动调用lua也很简单,比如要调用lua的系统函数,推荐方式是:

    # 声明
    [XLua.CSharpCallLua]
    public delegate double LuaMax(double a, double b);
    绑定
    var max = luaenv.Global.GetInPath<LuaMax>("math.max");
    调用
    Debug.Log("max:" + max(32, 12));
    
    1
    2
    3
    4
    5
    6

    建议绑定一次,重复使用。生成了代码的话,调用max是不产生gc alloc的。

    # 热补丁

    侵入性小,老项目原有代码不做任何调整就可使用。 运行时影响小,不打补丁基本和原有程序一样。 出问题了可以用Lua来打补丁,这时才会走到lua代码逻辑;

    上次更新: 2023/10/17, 14:09:52 访问次数: 0
    TinaX.Lua
    基础用法

    ← TinaX.Lua 基础用法→

    最近更新
    01
    一些Shell常用的功能写法整理
    10-20
    02
    删除git仓库submodule的步骤
    10-20
    03
    django基本命令
    10-16
    更多文章>
    Copyright © 2017-2025 随风逐叶
    沪ICP备18008791号-1 | 沪公网安备31011502401077号

    网站访问总次数: 0次
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式