Unity3D配置Protobuff文件

这篇具有很好参考价值的文章主要介绍了Unity3D配置Protobuff文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Protobuff协议简介以及样例

Protobuff是一种网络协议,可以很有效率的进行数据传输,在开发游戏中,经常会用到这个协议,我们通常定义协议是在一个.proto文件中定义数据类型,然后将.proto文件转换为.cs文件(也可以转化为其他语言,这里以cs为例),例如有如下一个.proto文件

 // [START declaration]
syntax = "proto3";
package Proto;
// [END declaration]

// [START messages]

message PlaceHolder
{
string dec=1;
string account=2;
bool flag=3;
}

message Register
{
    string	account=2;
    string	password=3;
    int32 funID = 1;
} 

message RegisterRes
{
    int32 money=1;
    bool	isScuess =2;
    string	tips =3;
    int32 funID = 4;
    string	name=5;
} 


message Login
{
    string	password=1;
    string	account=2;
} 

message LoginRes
{
    bool	isScuess =1;
    string	tips =2;
    int32 funID = 3;
    string	name=4;
    int32 money=5;
    string	account=6;
    string	password=7;
} 

message MatchJoin
{
string joinName=1;
string joinAccount=2;
bool is_join=3;
int32 Seatidx=4;
}

message MatchState
{

string dec=1;
int32 matchState=2;
}

message TalkInfo
{

    string	fromNmae =1;
    string	toName =2;
    int32 funID = 3;
} 

message AvatarInfo
{
string name=1;
string account=2;
int32 money=3;
int32 team_id = 4;
repeated int32 cards=5;
}

message MatchingSuccess
{
map<int32, AvatarInfo> AvatarInfos = 1;

} 

message PlayedCardInfo
{
int32 team_id=1;
string account=2;
int32 card_value=3;
int32 out_card_value=4;
int32 cards_left_num=5;
map<int32, AvatarInfo> AvatarInfos = 6;
} 

message SyncPlayerInfo
{
bool can_play=1;
int32 money=2;
string name=3;
int32 match_state=4;
}

// [END messages]

这个.proto文件中定义了一些数据类型,采用的是proto3格式,但是我们在脚本中不能直接用.proto文件,在Unity开发中,需要转换为.cs文件,下面有两种方式可以实现

  • 通过这个在线网站进行转换,然后将转换的文件复制到对应的cs文件中
  • 通过protogen.exe进行转换,对应的protogen可以通过下文的百度云盘获取,也可以在github上下载对应的原始工程,本地编译,然后通过批处理命令就可以再本地进行转换,转换的主要指令是:
    protogen --csharp_out=.\ Proto.proto,其中Proto.proto是当前目录中的文件

通过不断的实践,第二种是效率较高的方式,就是配置麻烦一点,接下来我会介绍主要的步骤

批处理文件

批处理文件可以帮助我们执行一些自动化工作,比如利用protogen.exe将.proto文件转换为.cs文件,将转换好的cs文件复制到需要的目录,下面是我本地的批处理文件:

rem 将对应目录下的.proto文件复制到当前文件,因为当前位置有protogen.exe及其dll环境
xcopy /y E:\unity-2020\2020.3.8f1c1\Editor\project_0\NewUnityProject\Assets\Scripts\proto\Proto.proto .\ /e
rem 执行对应的proto 到 .cs的转换
protogen --csharp_out=.\ Proto.proto

rem client脚本所在位置
set client_pos="E:\unity-2020\2020.3.8f1c1\Editor\project_0\NewUnityProject\Assets\Scripts\proto\"
rem server脚本所在位置
set server_pos=E:\unity-2020\2020.3.8f1c1\Editor\project_0\C_S_Prac\Server_Prac\Server_Prac\Proro\

rem 将Proto.cs辅助到client脚本所在位置
xcopy /y Proto.cs %client_pos% /e

rem 将Proto.proto辅助到client脚本所在位置
xcopy /y Proto.proto %client_pos% /e

rem 将Proto.cs辅助到server脚本所在位置
xcopy /y Proto.cs %server_pos% /e

rem 将Proto.proto辅助到server脚本所在位置
xcopy /y Proto.proto %server_pos% /e
pause

这个批处理文件复制到一个txt文本,然后把后缀改为.bat就行

在Unity编辑器的菜单栏中添加按钮,实现点击就能进行转换

unity可以进行编辑器扩展,可以很方便的让我们执行一些快捷操作,比如上述的bat文件,我们就可以实现,在编辑器中点击一个按钮,然后文件就自动转换了,具体的做法是在Unity工程的Asset文件中,新建一个Editor文件夹,然后在这个文件下面新建脚本,按照正确的写法就可以实现在菜单栏上新加自己的功能按钮,例如下图:
Unity3D配置Protobuff文件
这里具体的cs代码如下所示:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.Diagnostics;
using System.IO;

public class DoProto2CS : EditorWindow
{
    // Start is called before the first frame update
    [MenuItem("Proto/RefreshProro2CS")]
    private static void ShowWindow()
    {
    //这个函数主要作用是执行编写好的一个批处理文件

        string batPath = "E:/unity-2020/2020.3.8f1c1/Editor/project_0/Proto2CSFile/build_proto.bat";//批处理文件地址
        Process pro = new Process();


        FileInfo file = new FileInfo(batPath);
        pro.StartInfo.WorkingDirectory = file.Directory.FullName;
        pro.StartInfo.FileName = batPath;
        pro.StartInfo.CreateNoWindow = false;
        pro.Start();
        pro.WaitForExit();
    }
}

这样就能够实现点击一次Unity菜单栏的按钮实现.proto到.cs的转换了,也不需要手动的去复制啥文件,很方便!

protogen工具下载地址

protogen工具百度网盘链接:编译好的protogen百度网盘下载,里面有示例的bat文件
提取码:1fq3文章来源地址https://www.toymoban.com/news/detail-434272.html

到了这里,关于Unity3D配置Protobuff文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 3Dmax已经贴好图的文件如何导入unity3D中

    3Dmax已经贴好图的文件如何导入unity3D中,对于初学者而言,有时候在3Dmax中贴好图,配好颜色的模型导入unity3D中会丢失贴图的问题。 解决方法: 1.在3Dmax中建好模型、贴图完成。 2.点击在左上角:文件-导出-导出 3.选择保存路径,文件格式为.FBX 4.勾选上“嵌入的媒体”,点击

    2024年02月11日
    浏览(43)
  • 【Unity3D】Unity 脚本 ③ ( C# 脚本的执行入口函数 | 获取当前游戏物体及物体名称 | 获取游戏物体的 Transform 组件数据 | UnityEngine 命名空间简介 )

    在 C# 脚本中控制 游戏物体 GameObject 运动 , 要先获取该物体 , 然后 修改其 Transform 组件的属性 ; 在 游戏开始运行后 , 会自动执行 游戏物体 GameObject 上的 C# 组件代码 , 程序入口是 MonoBehaviour#Start() 函数 ; 在 C# 脚本中 , 主要的内容都在 Start() 函数 中实现 ; 在 C# 脚本中 , 游戏物体

    2023年04月12日
    浏览(68)
  • Unity3d 2021版本工程打开Visual Studio错误未找到这些文件,将无法加载的问题

    最近是和Unity3d 2021版本杠上了啊,因为需要的一个功能必须用Unity3d 2021版本,所以带出来了这一系列的问题。这个问题是我在Unity编辑器上Open C# Project之后VS会打不开工程,并提示“命令行中指定了以下文件: 未能找到这些文件,将无法加载。”: 而且***.sln、Assembly-CSharp.c

    2024年02月16日
    浏览(43)
  • 【Unity3D日常开发】Unity3D中协程的使用

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 最近有小伙伴问协程怎么用、怎么写,我也是会用会写,但是原理不是很明白。 学习了一下,总结出

    2024年02月12日
    浏览(50)
  • unity3D基础操作之01--unity3d窗口界面介绍

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 1、Scene场景编辑窗口; 2、Game游戏运行窗口; 3、Hierarchy场景物体列表窗口; 4、Project项目资源列表窗口; 5、Inspector属性编辑列表窗口; 6、其他常调节窗口 在屏幕左上方为场景编辑窗口Scene,在场景编

    2024年02月06日
    浏览(72)
  • 【Unity3D日常开发】Unity3D中实现单例模式详解

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 首先,说一下,什么是 单例模式(Singleton) 。 单例模式是设计模式中常见的一种设计模式,目的是为了

    2024年02月02日
    浏览(54)
  • 【Unity3D小功能】Unity3D中实现Text显示版本功能

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 在项目开发中,会遇到要控制版本的情况,比如说对比版本号,版本不对再更新版本的功能,这些就是

    2024年02月05日
    浏览(54)
  • 【Unity3D-01】 记录Unity3D调用外接摄像头

    最近想在Unity3D上调用一个摄像头,通过查找资料发现仙魁XAN和八哥快走开的博客符合我的想法,实现起来也不难就尝试了一下 2.1 在这个工程里新建Canvas 如下图所示 然后下设RawImage为载体 2.2 在Assets里面新建一个脚本命名为PlaneManager.cs 代码内容如下(参考八哥快走开的博客)

    2024年02月04日
    浏览(44)
  • 【Unity3D小功能】Unity3D中实现点击‘文字’出现‘UI面板’

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 QQ群:398291828 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 宠粉博主又来了,今天有粉丝问我如何实现点击一段文字然后出现的面板在那段文字附近显示: 深入了

    2024年04月13日
    浏览(49)
  • 【Unity3D】Unity3D 软件安装 ( 注册账号并下载 Unity Hub | 安装 Unity Hub | 获取个人版授权 | 中文环境设置 | 安装 Unity3D 编辑器 )

    Unity 官方网站 : 英文 : https://unity.com 中文 : https://unity.cn 进入 中文网站 https://unity.cn , 点击右上角的 \\\" 下载 Unity \\\" 按钮 ; 推荐下载 Unity3D 的长期支持版本 ; 点击界面中的 \\\" 下载 Unity Hub \\\" 选项 ; 根据你的系统 , 选择对应的 Unity Hub , 我在 Windows 上开发 , 因此选择 \\\" Windows 下载 \\\"

    2024年01月25日
    浏览(76)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包