首页 > 其他分享 >xlua - 增加protobuf库

xlua - 增加protobuf库

时间:2024-03-07 22:34:36浏览次数:19  
标签:protobuf proto bytes xlua pb lua LuaEnv 增加

lua下常用的2个protobuf库

1) GitHub - starwing/lua-protobuf: A Lua module to work with Google protobuf

2) GitHub - cloudwu/pbc: A protocol buffers library for C

这边使用第1个库

 

a) 下载lua-protobuf源码,并解压到xlua的build文件夹根目录

 

b) CMakeLists.txt中加入以下配置

#begin lua-profobuf
set (LPB_SRC "lua-protobuf-master/pb.c")
set_property(
        SOURCE ${LPB_SRC}
        APPEND
        PROPERTY COMPILE_DEFINITIONS
        LUA_LIB
)
list(APPEND THIRDPART_INC lua-protobuf)
set(THIRDPART_SRC ${THIRDPART_SRC} ${LPB_SRC})
#end lua-protobuf

 

c) 这边要编译Window下的lua5.3的x64版本的dll,所以运行make_win64_lua53.bat

 

d) 将新生成的xlua.dll替换Unity中的(如果Unity已打开,需要重启下,才能加载新的dll)

 

e) 测试是否成功

新建MyLua.cs,用于放dll加载代码

namespace XLua.LuaDLL
{

    public partial class Lua
    {
        [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
        public static extern int luaopen_pb(System.IntPtr L);

        [MonoPInvokeCallback(typeof(LuaDLL.lua_CSFunction))]
        public static int LoadPb(System.IntPtr L)
        {
            return luaopen_pb(L);
        }
    }

}

新建Lua脚本,Lua/Test8.lua.txt

local pb = require("pb")
local serpent = require("Scenes.serpent")

local protoBytes = Test8MonoInst:LoadProtoFile()
pb.load(protoBytes)

local data = {
    name = "Alice",
    id = 12345,
    phone = {
        { number = "1301234567" },
        { number = "87654321", type = "WORK" },
    }
}

local data2 = pb.encode("demo.Person", data)
local data3 = pb.decode("demo.Person", data2)
print(serpent.block(data3))

新建测试脚本Test8.cs

using System.Text;
using UnityEditor;
using UnityEngine;
using XLua;

public class Test8 : MonoBehaviour
{
    private LuaEnv m_LuaEnv;

    void Start()
    {
        m_LuaEnv = new LuaEnv();
        m_LuaEnv.AddLoader((ref string filePath) =>
        {
            Debug.Log($"custom loader:{filePath}");
            filePath = filePath.Replace('.', '/');
            filePath = $"Assets/{filePath}.lua.txt";
            var txtAsset = AssetDatabase.LoadAssetAtPath<TextAsset>(filePath);
            return Encoding.UTF8.GetBytes(txtAsset.text);
        });

        m_LuaEnv.AddBuildin("pb", XLua.LuaDLL.Lua.LoadPb);
        m_LuaEnv.Global.Set("Test8MonoInst", this);
        m_LuaEnv.DoString("require('Lua.Test8')");
    }

    void OnDestroy()
    {
        if (null != m_LuaEnv)
            m_LuaEnv.Dispose();
    }

    public byte[] LoadProtoFile()
    {
        var txtAsset = AssetDatabase.LoadAssetAtPath<TextAsset>($"Assets/proto.bytes"); //不要用.bytes.txt这样的后缀, 会按错误的Encoding去当做文本读的
        if (null != txtAsset)
        {
            byte[] bytes = txtAsset.bytes;
            if (null == bytes)
                bytes = Encoding.UTF8.GetBytes(txtAsset.text);
            return bytes;
        }
        return null;
    }

}

 

f) 涉及的proto文件:Src/AddressBook.proto

syntax = "proto2";
package demo;

option java_package = "com.demo";
option java_outer_classname = "AddressBook";

message Person {
  required string name = 1;
  required int32 id = 2;        // Unique ID number for this person.
  optional string email = 3;

  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }

  message PhoneNumber {
    required string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }

  repeated PhoneNumber phone = 4;
  repeated int32 test = 5 [packed=true];

  extensions 10 to max; 
}

message Ext {
  extend Person {
    optional int32 test = 10;
  }
}

// Our address book file is just one of these.
message AddressBook {
  repeated Person person = 1;
}

下载proto工具:Releases · protocolbuffers/protobuf (github.com)

proto文件生成二进制文件bat

protoGen.bat

@ECHO OFF
CHCP 65001

ECHO start
protoc -o "./proto.bytes" "./Src/*.proto"
ECHO finsh
ECHO=

PAUSE

 

g)

 

 

参考

lua-protobuf 使用说明 - 知乎 (zhihu.com)

[游戏开发][unity]Xlua中使用proto、json、lpeg_xlua cjson-CSDN博客

build_xlua_with_libs/build at master · chexiongsheng/build_xlua_with_libs · GitHub

[RS] xLua从LuaJit升级Lua5.3记录 - 简书 (jianshu.com)

 

标签:protobuf,proto,bytes,xlua,pb,lua,LuaEnv,增加
From: https://www.cnblogs.com/sailJs/p/18047162

相关文章

  • 34. 增加力量牌及 UI
    本节目标实现一张力量牌,使用了它之后玩家两个回合的输出增加50%代码实现增加StrengthEffect力量效果如果是对自己使用的话,就会提高攻击。如果是对敌人使用的话,就会降低攻击增加EnemyStrengthRound增加BuffStrengthEffect力量拳套使用BuffStrengthEffectUI增加......
  • eas_F7增加过滤条件
    /***@Title:UIUtils.java*@Description:TODO*@authorzhanglf*@date2024-2-4下午03:13:17*/packagecom.kingdee.eas.custom.ws.util;importcom.ibm.db2.jcc.am.mo;importcom.kingdee.bos.BOSException;importcom.kingdee.bos.ctrl.extendcontrols.......
  • xlua - 增加lua-cjson库
    xlua貌似不支持单独动态加载cjson.dll,试了各种方式,都是会造成Unity闪退,也不知道原因。解决办法就是直接编译进xlua.dll 1)下载lua-cjson源码,并解压到xlua的build文件夹根目录GitHub-openresty/lua-cjson:LuaCJSONisafastJSONencoding/parsingmoduleforLua 2......
  • xlua - lua调用c#函数
    c#部分publicclassTest5Obj{publicinti;privatestringstr;publicTest5Obj(){}publicvoidPrintInt(){Debug.Log($"c#PrintInt:{i}");}publicvoidPrintStr(){Debug.Log($"c#Prin......
  • 易基因:ChIP-seq等揭示FoxO1增加SMC4转录和METTL14介导m6A修饰以促进卵巢癌发展 | 肿瘤
    大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。卵巢癌(Ovariancancer,OC)是影响女性生殖系统的三种常见恶性肿瘤之一。转录因子Forkheadbox蛋白O1(FoxO1),又称forkhead横纹肌肉瘤(rhabdomyosarcoma)转录因子,属于ForkheadboxO(FoxO)转录因子家族,处于肿瘤分子调控网络的中......
  • xlua - lua协程与Unity协程
    lua脚本:Assets/Lua/Test3.lua.txtlocalmove_end={}localLuaEnumeratorImpl={}LuaEnumeratorImpl.__index=LuaEnumeratorImplfunctionLuaEnumeratorImpl.new(coRun)localobj={}setmetatable(obj,LuaEnumeratorImpl)obj:ctor(coRun)retu......
  • xlua - lua中操作c#对象
    1,c#对象映射为lua的userdataa)默认情况,c#对象都是映射为lua的userdata,数据存放在c#层,调用函数也是走c#层。functionLuaUseVector3(v1,v2)v1.x=10print(type(v1),v1.x,v1.y,v1.z)print("v1:",v1,"v2:",v2)print("v1+v2:",v1+v2)v1......
  • xlua - c#访问lua函数
    lua代码Assets/Lua/Test1.lua.txtfunctionIntParam(p)print("~~~~~IntParam")print(type(p),p)print("~~~~~")returnpendfunctionVec3Param(p)print("~~~~~Vec3Param")print(type(p),p.x,p.y,p.z)......
  • 杂记 2024-02-28 周三 将两个表合成一个表,列数为原两表之和,以增加表的列数
    --将person_info和field_data合成一个表droptablejoe.combinedtable01;CREATETABLEjoe.combinedtable01(idvarchar(50),identifycardvarchar(50),cellphonevarchar(50),c1varchar(20),b2bigint,addressvarchar(50),PRIMARYKEY(id));insertintojoe.c......
  • oracle增加表分区,金仓增加表分区,oracle增加数据库空间
    1.金仓增加表分区CREATETABLE"public"."分区名"PARTITIONOF"public"."表名"FORVALUESFROM('2024-02-0100:00:00')TO('2024-02-2923:59:59');COMMENTONTABLE"public"."分区名"IS'......