1. 程式人生 > >[Unity3D]簡單使用Protobuf-net(二)

[Unity3D]簡單使用Protobuf-net(二)

上一節使用的是NuGet程式包的方式,在程式中簡單的使用Protobuf-net,接下來換一種方式。
使用原始碼編譯後的動態連結庫,這樣有個好處就是,你可以選擇目標平臺。
首先需要下載原始碼:https://github.com/mgravell/protobuf-net

可以使用git克隆專案,也可以下載壓縮包,本人使用的是git方式。
原始碼獲取後,開啟原始碼目錄下的“Proto 2013.sln”工程檔案開啟專案,本人使用的是Vs2015。
只需要關注三個工程即可:
1. protobuf-net:核心工程,生成後的dll就是上一節中使用NuGet程式包的方式匯入的dll,用於序列化與反序列化等操作。
2. protogen:用於將標準的protobuf定義檔案“ * .proto”轉換成“ * .cs”檔案,這樣就免去了重新定義協議。
3. precompile:用於生成protogen生成的檔案所生成的dll所對應的序列化與反序列化dll。

這裡寫圖片描述

因為要在Unity中使用,所以生成配置調整到unity且為AnyCpu。然後生成如上三個工程,將生成的檔案全部拷貝出來根據工程重新命名一下,如下:

這裡寫圖片描述

至此,所需的工具就準備完成。
接下來在將講解在Unity中如何使用它們。

第一步,使用protogen將“.proto”定義檔案生成對應的“.cs”檔案。

直接使用protogen自帶的“descriptor.proto”檔案。
執行以下命令:

//將decriptor.proto檔案轉換成decriptor.cs檔案,且名稱空間為MyProto
.\protogen.exe -i:descriptor.proto -o:descriptor.cs
-ns:MyProto

第二步,建立動態連結庫工程,將decriptor.cs生成對應的decriptor.dll動態連結庫。

本人使用的是MonoDevelop,當然也可以使用VS(.Net 3.5以下)。
建立名為“descriptor”動態連結庫工程,刪除工程建立時自動生成的.cs檔案,然後將“descriptor.cs”匯入到工程當中,並且引用“protobuf-net”工程生成的“protobuf-net.dll”動態連結庫。
需要注意的是,只能生成Release版,且需要允許不安全程式碼。本人設定的目標框架是“Mono/.NET2.0”。
啟動生成工程就得到了decriptor.dll動態連結庫。

第三步,使用precompile生成decriptor.dll對應的序列化與反序列化的“descriptor.serializer.dll”動態連結庫。

將生成的decriptor.dll與protobuf-net.dll放在同一個資料夾下。
執行以下命令:

//生成 descriptor.dll對應的descriptor.serializer.dll,且名稱空間為MyProto.Serializer
.\precompile\precompile.exe -o:descriptor.serializer.dll -t:MyProto.Serializer descriptor.dll

至此Unity工程所需要的檔案就準備好了。如果對工具的命令有不懂的地方,可以直接再後面加上“/?”獲得幫助。

  • protobuf-net.dll
  • descriptor.dll
  • descriptor.serializer.dll

接下來就是在Unity工程當中的使用方法。

建立一個Unity工程,將三個dll都匯入到工程中,然後建立一個指令碼並附加在攝像機上,指令碼程式碼如下:

using UnityEngine;
using google.protobuf;
using System.IO;
using ProtoBuf.Meta;

public class test : MonoBehaviour
{
    void Start()
    {
        //建立一個序列化反序列化物件
        RuntimeTypeModel ser = MyProto.Serializer.Create();

        //例項化一個需要序列化的物件
        DescriptorProto my = new DescriptorProto();
        my.name = "XiangMu";

        //將序列化後的資料寫入檔案
        using (Stream s = File.OpenWrite("test.dat"))
        {
            ser.Serialize(s, my);
        }

        DescriptorProto my2 = null;
        //從檔案中讀取並反序列化到物件
        using (Stream s = File.OpenRead("test.dat"))
        {
            my2 = ser.Deserialize(s, my2, typeof(DescriptorProto)) as DescriptorProto;

            //列印
            print(my2.name);
        }
    }
}

使用動態連結庫的方法至此就講解完了,下一章將講解如何直接使用原始碼的方式在Unity中使用protobuf-net。

這裡寫圖片描述

相關推薦

[Unity3D]簡單使用Protobuf-net

上一節使用的是NuGet程式包的方式,在程式中簡單的使用Protobuf-net,接下來換一種方式。 使用原始碼編譯後的動態連結庫,這樣有個好處就是,你可以選擇目標平臺。 首先需要下載原始碼:https://github.com/mgravell/proto

【SSH進階之路】Struts基本原理 + 實現簡單登錄

target doctype 掌握 pack insert enter snippet file manage 上面博文,主要簡單的介紹了一下SSH的基本概念,比較宏觀。作為剛開始學習的人可以有一個總體上的認識,個人覺得對學習有非常好的輔助功能,它不不過

使用gluon實現簡單的CNN

bsp evaluate label exce ini rate ati sof name from mxnet import ndarray as nd from mxnet import gluon from mxnet import autograd from mx

ProtoBuf練習

.proto fstream using 讀寫 get run pro 長度 返回對象 重復數據類型 protobuf語言的重復字段類型相當於C++的std::list數據類型 工程目錄結構 $ ls proto/ TServer.proto TSession.proto

echarts的簡單應用之餅圖

數據 rest 官網 獲取 這也 ucc 保存 折線圖 alt   接上一篇文章: echarts的簡單應用之(一)柱形圖:https://www.cnblogs.com/jylee/p/9359363.html 本篇文章講述餅圖,撇過折線圖不說,是因為折線圖與柱形圖的數據

ADO。Net——防止SQL註入攻擊

多少 ext args create 查詢 屬性 匹配 拼接 註入 規避SQL註入 如果不規避,在黑窗口裏面輸入內容時利用拼接語句可以對數據進行攻擊 如:輸入Code值 p001‘ union select * from Info where ‘1‘=‘1

【Android】從無到有:手把手一步步教你使用最簡單的Fragment

轉載請註明出處,原文連結:https://blog.csdn.net/u013642500/article/details/80579389 【本文適用讀者】         targetSdkVersion 版本大於等於 21,即 app 即將有可能

網路程式設計基礎【day08】:簡單socket例項

本節內容 1、概述 2、socket例項 3、總結 一、概述   之前我們只是介紹了soket的概念和一些邏輯圖表,下面我們來看看,socket的客戶端和服務端到底是怎麼用的? 二、socket例項 2.1 客戶端 2.1.1 客戶端程式碼邏輯圖 2.1.2 客戶端程式碼

工廠三兄弟之簡單工廠模式

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

scrapy爬蟲框架簡單入門例項

接著上一篇文章,我們已經可以用爬蟲訪問目標網站爬取頁面了,現在需要自動提交表單查詢資料,並且從頁面中篩選出每期中獎號碼儲存為json檔案匯出。首先建立一個scrapy.Item類(開啟專案資料夾下的items.py檔案): import scrapy class SsqSpiderIte

簡單的通訊----使用Socket實現TCP協議

客戶端向伺服器端傳送訊息,伺服器端給客戶端反饋訊息。程式碼和上一篇的程式碼差不多。 Client端程式碼 package com.demo; import java.io.IOException; import java.io.InputStream; import java.io.OutputStre

unity3D中LeapMotion開發

     接上上一篇:      ②二是初始食指根向食指尖的向量和改變後食指根向食指尖的向量的夾角來判斷食指是否彎曲,及彎曲角度。            跟第一種比較的

設計模式簡單小例子結構型模式

簡單小例子 原始碼已經上傳到了GitHub. https://github.com/tanglonghui/DesignPatterns 設計模式簡單小例子(一) 建立型模式: https://blog.csdn.net/qq_40687864/article/details/810

Unity3D課程學習筆記

1.1.遊戲物件運動的本質是什麼? 遊戲物件運動的本質是遊戲物件座標位置,方向的變換。 1.2.三種方法實現物體的拋物線運動 實現基本拋物線的原理為: 水平方向上\(x=v_{0}t\) 豎直方向上\(y=at^{2}\) 1.2.1.用Position實現 實現的程式碼如下所示:

MVC+Nhibernate+spring.net

split customer rem ima item derby tempdata skip on() 在上一篇文章中我們已經把數據查了出來,現在我們來完善一下:前臺使用easyui 首先我們將NHelper類完善一下 public class EmpDal

簡單搜尋入門:二分答案 HDU 5248

二分練習的第二部分——二分答案的查詢 Description 給定序列A={A1,A2,…,An}, 要求改變序列A中的某些元素,形成一個嚴格單調的序列B(嚴格單調的定義為:Bi< Bi+1, 1≤i< N)。 我們定義從序列A到

Unity3D編輯器擴充套件——常用特性Attribute以及Selection類 Unity3D編輯器擴充套件——定義自己的選單按鈕 Unity3D編輯器擴充套件(二)——定義自己的視窗 Unity3D編輯器擴充套件——使用GUI繪製視窗 Unity3D編輯器擴充套件

前面寫了四篇關於編輯器的: Unity3D編輯器擴充套件(一)——定義自己的選單按鈕 Unity3D編輯器擴充套件(二)——定義自己的視窗 Unity3D編輯器擴充套件(三)——使用GUI繪製視窗 Unity3D編輯器擴充套件(四)——擴充套件自己的元件 今天我們來講解在編輯器擴充套件中我們常用的特

protobuf使用android ndk

簡介 1.   官方文件中提到一些protobuf的優點, protobuf靈活高效的結構化資料儲存格式.方便用於序列化, 適合做RPC的資料交換. 2.   相比 XML , protobuf 比 XML 更小、更快、更簡單.僅需要寫一個 *.proto 檔案描述需要

asp.net——開發環境配置IIS安裝

以win7系統為例,其他型別。 1.安裝IIS 開啟檔案搜尋欄輸入:控制面板-》程式-》程式和功能-》開啟或關閉Windows功能,在開啟的對話方塊,選中Internet資訊服務打鉤。 啟動瀏覽器,會顯示IIS7的主頁,它的物理路徑為:C:\inetp

Unity3d之設計模式工廠模式

這個系列的文章,並不會將所有用到的設計模式全部講一遍,事實上我個人認為,並不是所有的設計模式都適用於Unity3D。這裡講的主要還是一些常用的設計模式。  那麼,本章講的就是常見的構建型模式當中的工廠模式。 簡單工廠模式 講工廠,首先得從簡單工廠說起。  簡單工廠模式