zoukankan      html  css  js  c++  java
  • Unity中使用ProtocolBuffer

    Unity中使用ProtocolBuffer

    Unity中使用ProtocolBuffer

    1、什么是ProtocolBuffer

    Google提供一个具有高效可序列化的数据交互格式。

    2、ProtocolBuffer优势

    1. 性能好/效率高
    2. 自动代码生成:通过模板自动生成对应语言模型类
    3. 支持向后兼容和向前兼容:当客户端和服务器同事使用一块协议的时候, 当客户端在协议中增加一个字节,并不会影响客户端的使用
    4. 与平台和语言无关(多语言支持)
    5. 扩展性好(开源)

    3、使用

    3.1 .Proto文件

    这是protobuf提供的一种特殊的脚本,具有格式简单、可读性强和方便拓展的特点,所以接下来我们就是使用proto脚本来定义一个UserInfo类型。

    1. syntax ="proto3"; 
    2. package ProtoMsg; 
    3.  
    4. message UserInfo{ 
    5. int32 ID=1;//用户ID,服务器自动生成,用户注册成功后返回给客户端 
    6. string Account=2;//帐号 
    7. string Password=3;//密码 
    8.  
    9. } 

    语法:

    • required:必有的属性
    • optional:可选属性
    • repeated:数组

    3.2 Protobuf---->C#

    我们需要在Unity等C#环境使用PB就需要把如上我们定义的类型转为cs文件,自动生成工具如下:
    Protobuf2CS

    [目录结构

    通过如下.bat文件可统一将该目录下ProtoFile下我们定义的如上UserInfo.proto文件转为.cs代码

    @echo off
    
    set "PROTOC_EXE=%cd%	oolprotoc.exe"
    set "WORK_DIR=%cd%ProtoFile"
    set "CS_OUT_PATH=%cd%cs"
    ::if not exist %CS_OUT_PATH% md %CS_OUT_PATH%
    
    for /f "delims=" %%i in ('dir /b protoFile "ProtoFile/*.proto"') do (
      echo gen protoFile/%%i...
      %PROTOC_EXE%  --proto_path="%WORK_DIR%" --csharp_out="%CS_OUT_PATH%" "%WORK_DIR%\%%i"
      )
    echo finish... 
    
    pause

    生成后的CS文件可直接作为模型类使用

    4、使用

    首先、我们需要把Google.protobuf.dll引入到工程项目中去。之后就可以用其提供的序列化和反序列化方法来直接使用。需要注意的是所有的模型类都实现了IMessage接口,因此我们可以在结发的入口中直接通过IMessage类型来处理数据,在通过协议把他转换为相应定义的数据类型.

    1. byte[] userBytes= ProtobufHelper.ToBytes(user); 
    2. UserInfo userFromBytes = ProtobufHelper.FromBytes<UserInfo>(userBytes); 
    点赞鼓励下,(づ ̄3 ̄)づ╭❤~

    作者:君莫笑
           出处:https://www.cnblogs.com/Firepad-magic/
           Unity最受欢迎插件推荐:点击查看
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    JAVA-初步认识-第十一章-异常-原理异常对象的抛出throw
    shopex后台上传模板漏洞
    PHP使用1个crontab管理多个crontab任务
    HTML5跨浏览器表单及HTML5表单的渐进增强
    用Opera Mobile调试手机版网页【转】
    mootools里选择器$,$$,$E,$ES等的区别
    Call to undefined function bcscale()
    阿里云服务器数据库配置
    阿里云Mysql重置密码
    window.open窗口关闭后刷新父窗口代码
  • 原文地址:https://www.cnblogs.com/Firepad-magic/p/14766483.html
Copyright © 2011-2022 走看看