Unity3D簡單使用Protobuf-net(三)

前兩篇講解了如何使用導入NuGet程序包和動態鏈接庫的方式來使用Protobuf-net。接下來將講解如何直接在Unity中使用源碼來進行序列化與反序列化操作。

首先需要獲取源碼,獲取方式上一篇已經說明,不清楚的可以看:[Unity3D]簡單使用Protobuf-net(二)

創建一個Unity工程,然後將源碼中的“protobuf-net”文件夾導入到Unity工程中,“protobuf-net”文件夾是“protobuf-net”的工程目錄,包含了其所有的需要用到的源碼。等待Unity編譯完成。 
經過Unity編譯後會報不安全代碼的錯誤,是因爲使用了指針,則需要在Assets目錄下添加一個“smcs.rsp”文件,用於控制smcs的腳本編譯。 
在“smcs.rsp”中添加如下內容:

-unsafe
-define:FEAT_COMPILER;PLAT_BINARYFORMATTER;PLAT_XMLSERIALIZER;PLAT_NO_INTERLOCKED;FEAT_SAFE

-unsafe 表示允許不安全代碼; 
-define 定義宏,用於控制需要編譯的代碼。因爲是在Unity中使用,就按如上定義。不清楚如何定義的可以看“protobuf-net”工程目錄下的“protobuf-net.csproj”文件,如下: 
這裏寫圖片描述

如果還想添加其他命令,可以通過以下方式查看:

< Unity安裝目錄 > \Editor\Data\Mono\lib\mono\unity\smcs.exe -help
  • 1

“smcs.rsp”文件修改保存後,必須需要重新編譯文件,可以將其Reimport。此時,不安全代碼的錯誤就沒有了。

至此Protobuf-net導入Unity工程成功,接下來講解如何使用。 
使用的方法與[Unity3D]簡單使用Protobuf-net(一)中的是用方式是一樣的。

需要序列化與反序列化的對象,可以手動定義,也可以通過“ *.proto“文件來生成。通過文件生成的方法[Unity3D]簡單使用Protobuf-net(二)中已經講解,不清楚的可以去看看protogen是怎麼使用的,在此就不贅述。

在攝像機上附加一個腳本,並添加如下代碼:

using UnityEngine;
using System.Collections;
using System.IO;

//定義一個序列化與反序列化對象
[ProtoBuf.ProtoContract]
class Person
{
    [ProtoBuf.ProtoMember(1)]
    public string name;
    [ProtoBuf.ProtoMember(2)]
    public int age;
}

public class test : MonoBehaviour
{
    void Start()
    {
        Person per = new Person();
        per.age = 1;
        per.name = "xiangmu";

        using (Stream s = File.OpenWrite("test.dat"))
        {
            //序列化對象到文件
            ProtoBuf.Serializer.Serialize<Person>(s, per);
        }

        Person per2 = null;
        using (Stream s = File.OpenRead("test.dat"))
        {
            //從文件中讀取並反序列化到對象
            per2 = ProtoBuf.Serializer.Deserialize<Person>(s);

            //打印
            print("name>" + per2.name + " age>" + per2.age);
        }
    }
}

Protobuf-net的簡單使用就這些,如果後續有高級用法,本人會繼續更新。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章