しっぽを追いかけて

ぐるぐるしながら考えています

Unity と猫の話題が中心   掲載内容は個人の私見であり、所属組織の見解ではありません

Unity で MemoryPack for C# でシリアライズする

※ これは 2022/12/01 時点の Unity 2022.1.23f1 MemoryPack for C# v1.8.12 の情報です

最新版では動作が異なる可能性がありますのでご注意ください

少し前に使ってみた MessagePack for C# について

www.matatabi-ux.com

なんと性能がアップした後継のライブラリ MemoryPack for C# がリリースされたようなので、MessagePack から移行する形で使ってみたい

github.com

スポンサードリンク

まずは Package Manager を開き、Add package from git URLhttps://github.com/Cysharp/MemoryPack.git?path=src/MemoryPack.Unity/Assets/Plugins/MemoryPack を入力してインポート

add from git

これで Unsafe がないとエラーメッセージが出る場合・・・

エラーメッセージ

MemoryPack の github リポジトリ から System.Runtime.CompilerServices.Unsafe.dll をダウンロードして Assets/Plugins 配下に追加する

System.Runtime.CompilerServices.Unsafe.dll 追加

ここから MessagePack から MemoryPack へのコード移行

SaveData.cs は下記のような感じで、[MessagePackObject][MemoryPackable][Key][MemoryPackOrder][IgnoreMember][MemoryPackIgnore][SerializationConstructor][MemoryPackConstructor] にそれぞれ書き換える

using MemoryPack;
using System;

/// <summary>
/// セーブデータ
/// </summary>
[MemoryPackable]
[Serializable]
public partial class SaveData
{
    /// <summary>
    /// ID
    /// </summary>
    /// <value></value>
    [MemoryPackOrder(0)]
    public int Id { get; protected set; } = default;

    /// <summary>
    /// 保存日時
    /// </summary>
    /// <value></value>
    [MemoryPackOrder(1)]
    public string Message { get; protected set; } = null;

    /// <summary>
    /// 空データフラグ
    /// </summary>
    [MemoryPackIgnore]
    public bool IsEmpty => this.Id == default;

    public SaveData()
    {
    }

    [MemoryPackConstructor]
    public SaveData(int id, string message)
    {
        this.Id = id;
        this.Message = message;
    }
}

次に Test.cs

MessagePackSerializerMemoryPackSerializer に書き換える

using MemoryPack;
using UnityEngine;

public class Test : MonoBehaviour
{
    public void Awake()
    {
        // シリアライザの初期設定
        // いらない!
    }

    public void Start()
    {
        // シリアライズしたものをデシリアライズしてみる
        var data = new SaveData(1, "ラグドールもふもふ巨大ねこ");
        var serialized = MemoryPackSerializer.Serialize(data);
        var deserialized = MemoryPackSerializer.Deserialize<SaveData>(serialized);

        UnityEngine.Debug.Log(
            $"Id={deserialized.Id}, Message={deserialized.Message}");
    }
}

MemoryPack では Roslyn によるコード分析に対応しているため、なんとネイティブアプリ用の手動コード生成が不要になったらしい!

リアライザーの初期設定もそれにともなって消えた!すごい!

とりあえずこのコードを実行してシリアライズ→デシリアライズを試してみると・・・

ちゃんと復号化された

できた!これは MessagePack よりだいぶ進化してる・・・

Unity の Localization のビルドエラーが Issue Tracker に登録された

※ これは 2022/11/24 時点の Unity 2022.1.23f1 Localization v1.4.2 の情報です

最新版では動作が異なる可能性がありますのでご注意ください

下記のこの前強引になんとかした iOS App Info の Localization ビルドエラーの件について

www.matatabi-ux.com

Unity の Bug Report でを報告したら、Issue Tracker に登録されたらしい

修正予定は Localization v1.5.x とのこと・・・自分が最初の報告者っぽい

issuetracker.unity3d.com

他の人、このビルドエラーなんで困ってないの?

Localization のアプリ名多言語化機能があるのに使ってないの?!

スポンサードリンク

Unity の Localization で iOS ATT に対応する

※ これは 2022/11/17 時点の Unity 2022.1.23f1 Localization v1.4.2 の情報です

最新版では動作が異なる可能性がありますのでご注意ください

前回、Unity の Localization でアプリ名の多言語化をやってみたので、今回はさらに iOS 14 以降で必須となる App Tracking Transparency に対応してみる

まずは PackageManeger から iOS 14 Advertising Support を追加インポート

iOS 14 Advertising Support

スポンサードリンク

続きを読む

Unity の Localization でアプリ名を多言語化対応する

※ これは 2022/11/11 時点の Unity 2022.1.22f1 Localization v1.4.2 の情報です

最新版では動作が異なる可能性がありますのでご注意ください

前回、Unity の Localization でアプリ名の多言語化をやってみたが、ビルド時にエラーが出たので解消を試みる

謎エラー

スポンサードリンク

Localization パッケージ内の PBXProjectExtensions.cs の 95 行目で AmbiguousMatchException が発生していた

続きを読む

【失敗】Unity の Localization でアプリ名を多言語化対応する

※ これは 2022/10/13 時点の Unity 2022.1.20f1 Localization v1.3.2 の情報です

最新版では動作が異なる可能性がありますのでご注意ください

前回、Unity の Localization でスクリプトの中で表示リソースを切り替えてみたので、今回はアプリ名の多言語化をやってみる

とりあえず StringTable にアプリ名とアプリ短縮名を登録

Localize Table に登録

スポンサードリンク

続きを読む

コロナワクチン4回目接種してきた

オミクロン株対応版のワクチンが出たので4回目(今回はファイザー)を打ってきた

4回目ワクチン

前回3回目が3月だったので半年以上あいていた・・・結構間があったな

副反応はいつもの接種部の筋肉痛と多少のだるさくらい

スポンサードリンク

Unity の Localization でスクリプトから多言語化表示テキストを切り替える

※ これは 2022/10/13 時点の Unity 2022.1.20f1 Localization v1.3.2 の情報です

最新版では動作が異なる可能性がありますのでご注意ください

前回、文字列とフォントが一緒に切り替えることができたが、あくまで静的な多言語化

今回はスクリプトの中で表示リソースを切り替えてみたい

ボタンが押されたらカフェに

例によってこの「モカ」ボタンが押されたら「カフェ」に表示を切り替えてみたい

スポンサードリンク

続きを読む

Unity の Loalization でテキストの多言語対応する

※ これは 2022/10/06 時点の Unity 2022.1.19f1 Localization v1.0.5 の情報です

最新版では動作が異なる可能性がありますのでご注意ください

前回、UI のテキスト多言語対応をやってみたところ、フォントが英語と日本語両対応でないためうまく切り替えられなかったところを何とかしてみる

表示言語が切り替わったら文字列だけでなくフォントも一緒に切り替わるような対応を追加したい

フォントも含めて切り替え

スポンサードリンク

続きを読む

Unity の Loalization でテキストの多言語対応する【失敗】

※ これは 2022/09/23 時点の Unity 2022.1.17f1 Localization v1.0.5 の情報です

最新版では動作が異なる可能性がありますのでご注意ください

前回は文字列の変換テーブルを作成したので、これを利用して UI のテキスト多言語対応をやってみる

スポンサードリンク

続きを読む

Unity の Loalization で文字列変換テーブルを用意する

※ これは 2022/09/23 時点の Unity 2022.1.17f1 Localization v1.0.5 の情報です

最新版では動作が異なる可能性がありますのでご注意ください

Addressables をひと通り試せたので、今回は Addressables パッケージを前提とする Localization を試したい

とりあえず文字列の変換テーブルが使えるようになるところまで

スポンサードリンク

続きを読む

スポンサードリンク