「Unity/MessagePack」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→neueccのMessagePack導入) |
|||
(同じ利用者による、間の11版が非表示) | |||
行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?) | ||
行39: | 行52: | ||
unityメイン/PackageManager/MyRegistoryでMicrosoft.NET.StringTools検索してインストール | 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 をダウンロードして"とエラーが出た==== | ||
+ | <pre> | ||
+ | /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 をダウンロードできます。 | ||
+ | </pre> | ||
+ | |||
+ | ===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> | ||
+ | シリアライズされたデータ | ||
+ | 92-A4-74-61-72-6F-0A | ||
+ | |||
+ | デシリアライズされたデータ | ||
+ | taro Age=10 | ||
+ | </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