Skip to content

load_config_at_runtime

walon edited this page May 6, 2022 · 4 revisions

运行时加载配置

unity + json 项目中使用luban生成代码,需要依赖哪些库

只需要将 LubanLib 目录复制到项目即可。

在其他项目中使用luban生成代码,需要依赖哪些库

示例项目中找到跟你项目情况匹配的示例项目,将Luban相关的基础代码导入到你们项目即可。

我把代码加入项目,发现有编译错误,找不到 ByteBuf类,如何解决?

因为你没有把luban依赖的一些代码加入项目。 参考上面的回答。

在unity项目中使用c#代码加载json配置

只需一行代码

// 一行代码可以加载所有配置。 cfg.Tables 包含所有表的一个实例字段。
var tables = new cfg.Tables(Loader);
// 访问一个单例表
Console.WriteLine(tables.TbGlobal.Name);
// 访问普通的 key-value 表
Console.WriteLine(tables.TbItem.Get(12).Name);
// 支持 operator []用法
Console.WriteLine(tables.TbMail[1001].Desc);

请自行实现合适的Loader函数,根据配置文件名file返回一个加载好的ByteBuf。 可借鉴Csharp_Unity_Json中的代码。

在unity项目中使用c#代码自动判断加载bin或json配置

开发期希望使用json导出格式,但为了节约导出文件大小以及提高加载性能,希望使用bin导出格式。通过反射创建cfg.Tables的方式,可以做到不改代码,自动适应这两种方式。

    void Start()
    {
        var tablesCtor = typeof(cfg.Tables).GetConstructors()[0];
        var loaderReturnType = tablesCtor.GetParameters()[0].ParameterType.GetGenericArguments()[1];
        // 根据cfg.Tables的构造函数的Loader的返回值类型决定使用json还是ByteBuf Loader
        System.Delegate loader = loaderReturnType == typeof(ByteBuf) ?
            new System.Func<string, ByteBuf>(LoadByteBuf)
            : (System.Delegate)new System.Func<string, JSONNode>(LoadJson);
        var tables = (cfg.Tables)tablesCtor.Invoke(new object[] {loader});

        // 访问一个单例表
        Console.WriteLine(tables.TbGlobal.Name);
        // 访问普通的 key-value 表
        Console.WriteLine(tables.TbItem.Get(12).Name);
        // 支持 operator []用法
        Console.WriteLine(tables.TbMail[1001].Desc);
    }

    private static JSONNode LoadJson(string file)
    {
        return JSON.Parse(File.ReadAllText($"{Application.dataPath}/../../GenerateDatas/json/{file}.json", System.Text.Encoding.UTF8));
    }

    private static ByteBuf LoadByteBuf(string file)
    {
        return new ByteBuf(File.ReadAllBytes($"{Application.dataPath}/../../GenerateDatas/bytes/{file}.bytes"));
    }

可借鉴Csharp_Unity_bin_or_json中的代码。

在unity+puers项目中使用typescript加载json配置

// 一行代码可以加载所有配置。 cfg.Tables 包含所有表的一个实例字段。
let tables = new cfg.Tables(loader)
// 访问一个单例表
console.log(tables.TbGlobal.name)
// 访问普通的 key-value 表
console.log(tables.TbItem.get(12).Name)

请自行实现一个Loader的函数,根据表file 返回一个解析好的JSON对象。可借鉴 Typescript_Unity_Puerts_Json中代码

如何在go项目中加载json配置

// 一行代码可以加载所有配置。 cfg.Tables 包含所有表的一个实例字段。
if tables , err := cfg.NewTables(loader) ; err != nil {
 println(err.Error())
 return
}
// 访问一个单例表
println(tables.TbGlobal.Name)
// 访问普通的 key-value 表
println(tables.TbItem.Get(12).Name)

请自行实现一个合适的loader函数,根据配置文件 file,返回一个Json对象

python 2 + json

与其他相似,取 --gen_types code_python27_json,data_json。但需要额外安装enum34包,可通过命令 'py -2 -m pip install enum34' 安装。

如果我用的语言是java,python,c++,rust,lua 等等,如何加载配置

请参见 示例项目。找到与你项目类型相符的示例项目,参考其加载 代码即可。