Unity3D 使用 Proto

一. 下载与安装

这里下载
Google Protobuff下载

1. 源码用来编译CSharp 相关配置

2. win64 用于编译 proto 文件

二. 编译

1. 使用VS 打开

2. 点击最上面菜单栏 工具>NuGet 包管理器>管理解决方案的NuGet 管理包

版本一定要选择咱们一开始下载的对应版本否则不兼容!这里选择3.25.3。然后点击安装.

3.编译项目

拷贝文件

unity 目录

三.proto 文件

新建txt文本取名Person.proto,切记后缀.txt改为.proto
输入一下代码

syntax="proto3";//指定了正在使用proto3语法,如果没指定编译器默认使用proto2语法
package TestGoogleProtoBuff;//等于C#中命名空间message personInfo
{string name=1;int32 age=2;int64 money=3;message PhoneNumber{string number=1;PhoneType type=2;}repeated PhoneNumber phone=5;
}enum PhoneType{HOME=0;WORK=1;MOBILE=2;
}

编译 

然后在这个文件夹中创建ExProtProto.bat,输入一下命令并保存。

双击ExProtProto.bat,我们发现生成了Person.cs文件

四.Unity中的使用

然后我们打开unity,新建文件夹Proto,将刚刚生成好的Person.cs代码放在Proto文件夹中。

我们在unity中新建ProtoBufffer.cs脚本

using Google.Protobuf;
public class ProtoBufffer
{public static byte[] Serialize(IMessage message){return message.ToByteArray();}public static T DeSerialize<T>(byte[] packet)where T:IMessage, new(){IMessage message = new T();try{return (T)message.Descriptor.Parser.ParseFrom(packet);}catch (System.Exception e){throw;}}
}

在创建一个Test.cs脚本来测试该功能,将该脚本拖到主摄像机上

using TestGoogleProtoBuff;
using UnityEngine;public class Test : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){personInfo info = new personInfo();info.Name = "ys";info.Age = 50;info.Money = 9999;info.Phone.Add(new personInfo.Types.PhoneNumber { Number = "12123",Type=PhoneType.Home});byte[] msg = ProtoBufffer.Serialize(info);Debug.Log(msg.Length);personInfo deinfo  = ProtoBufffer.DeSerialize<personInfo>(msg);Debug.Log("姓名:"+deinfo.Name);Debug.Log("年龄:"+deinfo.Age);Debug.Log("资产:" + deinfo.Money);Debug.Log($"{deinfo.Phone[0].Type}的电话号:{deinfo.Phone[0].Number}");}
}

未完待续........

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/703105.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言第三十一弹---自定义类型:结构体(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 目录 1、结构体内存对齐 1.1、为什么存在内存对齐? 1.2、修改默认对齐数 2、结构体传参 3、结构体实现位段 3.1、什么是位段 3.2、位段的内存分配 3.3、…

leetcode-hot100-hash表

leetcode-hot100-hash表 1. 两数之和49. 字母异位次分组128. 最长连续序列 hash表主要功能是&#xff1a;记录&#xff0c;当做查找表&#xff0c;时间换空间的一种策略。 1. 两数之和 nums [2,7,11,15], target 9 输出&#xff1a;[0,1] **解释&#xff1a;因为 nums[0] …

幻兽帕鲁服务器多少钱?有买过的吗?

幻兽帕鲁服务器多少钱&#xff1f;太卷了&#xff0c;降价到24元1个月&#xff0c;阿里云4核16G10M游戏服务器26元1个月、149元半年&#xff0c;腾讯云4核16G游戏服务器32元、312元一年&#xff0c;华为云26元&#xff0c;京东云主机也是26元起。云服务器吧yunfuwuqiba.com给大…

VUE3环境搭建开发准备

VUE3 Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xff0c;Vu…

【Prometheus】概念和工作原理介绍

目录 一、概述 1.1 prometheus简介 1.2 prometheus特点 1.3 prometheus架构图 1.4 prometheus组件介绍 1、Prometheus Server 2、Client Library 3、pushgateway 4、Exporters 5、Service Discovery 6、Alertmanager 7、grafana 1.5 Prometheus 数据流向 1.6 Pro…

100天精通Python(实用脚本篇)——第117天:基于selenium实现反反爬策略之代码输入账号信息登录网站

文章目录 专栏导读1. 前言2. 实现步骤3. 基础补充4. 代码实战4.1 创建连接4.2 添加请求头伪装浏览器4.3 隐藏浏览器指纹4.4 最大化窗口4.5 启动网页4.6 点击密码登录4.7 输入账号密码4.8 点击登录按钮4.9 完整代码4.10 GIF动图展示 五、总结 专栏导读 &#x1f525;&#x1f5…

httpx.InvalidURL: Invalid port

httpx.InvalidURL: Invalid port 介绍解决方案总结 介绍 httpx包的bug&#xff0c;使用GPT-SoVITS时无法运行报的错 解决方案 改源码的这个文件lib/python3.9/site-packages/httpx/_urlparse.py&#xff1a;149行左右&#xff1a; def urlparse(url: str "", **…

IDEA安装配置以及安装配置Maven

IEDA官方下载地址&#xff0c;有专业版&#xff08;收费&#xff0c;破解&#xff09;&#xff0c;社区版&#xff08;免费&#xff09; 下载 IntelliJ IDEA – 领先的 Java 和 Kotlin IDE 安装配置Maven 1.解压apache-maven-3.6.3-bin.zip&#xff0c;安装maven到D盘softwar…

台湾旺泓-WH4530A三合一光距感 接近传感芯片

WH4530A是一款集成了环境光传感器&#xff08;PS&#xff09;接近传感器&#xff08;ALS&#xff09;和红外LED灯三合一为一体的光距感传感芯片&#xff0c;可以测距从0到100厘米以内范围&#xff1b;并采用I2C接口具有超高的灵敏度和精准的测距检测范围。 该WH4530A​​​​​…

真香!NineData SQL开发全面适配 GaiaDB

2 月&#xff0c;新年伊始&#xff0c;NineData 重磅发布&#xff0c;提供了对百度云原生关系型数据库 GaiaDB 的支持。 这一次的发布不仅仅是简单的数据源支持&#xff0c;而是覆盖了整个 SQL 开发能力的重要发布&#xff0c;意味着您已经可以完整地使用 NineData SQL 开发的…

MySQL 事务原理分析

事务 前提&#xff1a;并发连接访问。定义&#xff1a;事务是用户定义的一系列操作&#xff0c;这些操作要么都做&#xff0c;要么都不做&#xff0c;是一个不可分割的单位。目的&#xff1a;事务将数据库从一种一致性状态转换为另一种一致性状态&#xff0c;保证系统始终处于…

半导体物理基础-笔记(续)

源内容参考&#xff1a;https://www.bilibili.com/video/BV11U4y1k7zn/?spm_id_from333.337.search-card.all.click&vd_source61654d4a6e8d7941436149dd99026962 掺杂半导体的费米能级与温度及杂质浓度的关系图 在温度一定的条件下&#xff0c;施主杂质浓度越高&#xff0…

接口测试实战--读取yaml用例

一、yaml模块用法 使用场景: 配置文件、测试用例文件等 语法: 大小写敏感 使用缩进表示层级关系 缩进时不允许用tab键,只能使用空格 缩进的空格数目不重要,只要相同层级的元素左对齐 #表示注释 基本数据类型:字符串、整型、列表、null(可使用~表示)、布尔型、时间 1)…

Redis操作

1、KEY操作 1.1 exists 1.2 expire 设置过期时间 expire name 5 1.3 ttl 如果不过期返回-1 1.4 del 2、字符串值&#xff08;String&#xff09; 2.1 set 2.2 get 2.3 setnx 当且仅当key不存在时才新增 不存在时返回1&#xff0c;存在返回0 2.4 setex 设置key的存活时间&am…

Oracle EBS GL 外币折算逻辑

背景 由于公司财务在10月份期间某汇率维护错误,导致帐套折算以后并合传送至合并帐套生成合并日记帐凭证的借贷金额特别大,但是财务核对的科目余额有没有问题,始终觉得合并日记帐生成会计分发有问题,需要我们给出外币折算逻辑。 基础设置 汇率 Path: GL->设置->币种-&…

pclpy 最小二乘法拟合平面

pclpy 最小二乘法拟合平面 一、算法原理二、代码三、结果1.左边原点云、右边最小二乘法拟合平面后点云投影 四、相关数据 一、算法原理 平面方程的一般表达式为&#xff1a; A x B y C z D 0 ( C ≠ 0 ) Ax By Cz D 0 \quad (C\neq0) AxByCzD0(C0) 即&#xff1a; …

【JSON详细讲解】

JSON讲解 1. 介绍2. JSON的基本规则3. JSON中的数据类型4. JSON的基本结构5. 在不同的语言中使用JSON 1. 介绍 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;它是基于JavaScript的一个子集&#xff0c;但它是独立于语言的&a…

矢量扩散模型初探

import paddle from matplotlib import pyplot as plt import numpy as np from tqdm import tqdm# 从零开始构建一个简单的扩散模型 # 首先是扩散过程 # loss=label-net(sqrt(alpha_prod[t])*x0+sqrt(1-alpha_prod[t])*label) # label =正太分布采样 # alpha 是 一个斜边为1 的…

Java中使用链表实现的数据结构

在Java中&#xff0c;链表实现主要体现在以下几种数据结构中&#xff1a; 1. LinkedList LinkedList类实现了List接口和Deque接口&#xff0c;提供了双向链表的实现。它允许null元素&#xff0c;提供了列表的顺序访问以及在列表的头部和尾部进行高效的插入和移除操作。Linked…

Spring Boot对接RocketMQ示例

部署服务 参考RocketMq入门介绍 示例 引入maven依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.2</version></dependency>完整依赖如下&am…