facebook twitter hatena line email

「Unity/MessagePack」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(mpcインストール)
 
(同じ利用者による、間の7版が非表示)
行13: 行13:
  
 
==neueccのMessagePack導入==
 
==neueccのMessagePack導入==
 +
 +
===PackageManagerからMessagePack-v3のインストール===
 +
*MessagePack annotations for C# (NuGet)
 +
*MessagePack for C# (NuGet)
 +
*MessagePack Source Generator and Analyzer (NuGet)
 +
 +
====v3になって、mpcはなくなった。(2024/12/06)====
 +
https://neue.cc/2024/12/06_MessagePack_v3.html
 +
 +
===PackageManagerからMessagePack-v2のインストール===
 +
v3をインストールした場合は、v2は不要
 +
 
neuecc
 
neuecc
 
https://github.com/MessagePack-CSharp/MessagePack-CSharp
 
https://github.com/MessagePack-CSharp/MessagePack-CSharp
行26: 行38:
 
     "com.neuecc.messagepack": "https://github.com/neuecc/MessagePack-CSharp.git?path=src/MessagePack.UnityClient/Assets/Scripts/MessagePack#v2.6.100-alpha",
 
     "com.neuecc.messagepack": "https://github.com/neuecc/MessagePack-CSharp.git?path=src/MessagePack.UnityClient/Assets/Scripts/MessagePack#v2.6.100-alpha",
 
</pre>
 
</pre>
 +
 
==="namespace name 'NET' does not exist"エラーが出る時===
 
==="namespace name 'NET' does not exist"エラーが出る時===
 
  error CS0234: The type or namespace name 'NET' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)
 
  error CS0234: The type or namespace name 'NET' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)
行41: 行54:
  
 
===mpcインストール===
 
===mpcインストール===
 +
v2では必要。v3では不要。
 +
 
netインストール(net7)
 
netインストール(net7)
 
https://dotnet.microsoft.com/ja-jp/download
 
https://dotnet.microsoft.com/ja-jp/download
行57: 行72:
  
 
===MessagePackサンプル===
 
===MessagePackサンプル===
 +
User.cs
 +
<pre>
 +
using MessagePack;
 +
 +
[MessagePackObject]
 +
public class User
 +
{
 +
    [Key(0)]
 +
    public string Name { get; set; }
 +
    [Key(1)]
 +
    public int Age { get; set; }
 +
}
 +
</pre>
 +
 +
処理
 +
<pre>
 +
var user = new User();
 +
user.Name = "taro";
 +
user.Age = 10;
 +
var serialized = MessagePackSerializer.Serialize(user);
 +
Debug.Log("シリアライズされたデータ\n" + BitConverter.ToString(serialized));
 +
 +
var deserialized = MessagePackSerializer.Deserialize<User>(serialized);
 +
Debug.Log("デシリアライズされたデータ\n" + deserialized.Name + " Age=" + deserialized.Age);
 +
</pre>
 +
 
出力
 
出力
 
<pre>
 
<pre>
 
シリアライズされたデータ
 
シリアライズされたデータ
92-A4-68-6F-67-65-01
+
92-A4-74-61-72-6F-0A
  
 
デシリアライズされたデータ
 
デシリアライズされたデータ
hoge level=1
+
taro Age=10
 
</pre>
 
</pre>
  
 
==参考==
 
==参考==
 
https://qiita.com/p_a_sta/items/2b9522888b7488aafb7c
 
https://qiita.com/p_a_sta/items/2b9522888b7488aafb7c

2024年12月24日 (火) 11:38時点における最新版

MessagePackとは

効率の良いバイナリ形式のオブジェクト・シリアライズ フォーマット

公式:https://msgpack.org/ja.html

c#のPackage

5つある C# msgpack C# ymofen C# caesay C# mlsomers C# neuecc

neueccのMessagePack導入

PackageManagerからMessagePack-v3のインストール

  • MessagePack annotations for C# (NuGet)
  • MessagePack for C# (NuGet)
  • MessagePack Source Generator and Analyzer (NuGet)

v3になって、mpcはなくなった。(2024/12/06)

https://neue.cc/2024/12/06_MessagePack_v3.html

PackageManagerからMessagePack-v2のインストール

v3をインストールした場合は、v2は不要

neuecc https://github.com/MessagePack-CSharp/MessagePack-CSharp

PackageManagerのgiturlに

https://github.com/neuecc/MessagePack-CSharp.git?path=src/MessagePack.UnityClient/Assets/Scripts/MessagePack#v2.6.100-alpha

を追加。

もしくは、Packages/manifest.jsonに以下を追加

{
  "dependencies": {
    "com.neuecc.messagepack": "https://github.com/neuecc/MessagePack-CSharp.git?path=src/MessagePack.UnityClient/Assets/Scripts/MessagePack#v2.6.100-alpha",

"namespace name 'NET' does not exist"エラーが出る時

error CS0234: The type or namespace name 'NET' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)

↓の手順で、Microsoft.NET.StringToolsをインストールする

nugetでMicrosoft.NET.StringToolsインストール

unityメイン/Edit/ProjectSettings/PackageManagerから以下を追加

Name: Unity NuGet
URL: https://unitynuget-registry.azurewebsites.net
Scope(s): org.nuget

unityメイン/PackageManager/MyRegistoryでMicrosoft.NET.StringTools検索してインストール

mpcインストール

v2では必要。v3では不要。

netインストール(net7) https://dotnet.microsoft.com/ja-jp/download

mpcインストール

dotnet tool install --global MessagePack.Generator

Serializer.generated生成

mpc -i Assembly-CSharp.csproj -o ./Assets/Script/Serializer.generated.cs

参考:https://limegame.hatenablog.com/entry/2023/05/30/164100

mpc実行で"Developer Pack をダウンロードして"とエラーが出た

/usr/local/share/dotnet/sdk/6.0.427/Microsoft.Common.CurrentVersion.targets(1220,5): error MSB3644: .NETFramework,Version=v4.7.1 の参照アセンブリが見つかりませんでした。この問題を解決するには、このフレームワーク バージョンの Developer Pack (SDK/Targeting Pack) をインストールするか、アプリケーションのターゲットを再設定してください。https://aka.ms/msbuild/developerpacks で .NET Framework Developer Pack をダウンロードできます。

MessagePackサンプル

User.cs

using MessagePack;

[MessagePackObject]
public class User
{
    [Key(0)]
    public string Name { get; set; }
    [Key(1)]
    public int Age { get; set; }
}

処理

var user = new User();
user.Name = "taro";
user.Age = 10;
var serialized = MessagePackSerializer.Serialize(user);
Debug.Log("シリアライズされたデータ\n" + BitConverter.ToString(serialized));

var deserialized = MessagePackSerializer.Deserialize<User>(serialized);
Debug.Log("デシリアライズされたデータ\n" + deserialized.Name + " Age=" + deserialized.Age);

出力

シリアライズされたデータ
92-A4-74-61-72-6F-0A

デシリアライズされたデータ
taro Age=10

参考

https://qiita.com/p_a_sta/items/2b9522888b7488aafb7c