WienerWiener
  • はじめに
  • 動作環境・対応範囲
  • リリースノート
  • 競合比較
  • 価格・入手
  • FAQ
  • 向いているケース
  • ライセンス
  • Unity Asset版とStandalone版の違い
  • 簡易難読化・改ざん検知
  • 整合性検知・デバッグ
  • ローカライズ
  • バージョン管理
  • Google Sheets入力
  • Excel
  • YAML
  • 設定ファイル
  • データフォーマット
  • ValueOnlyフォーマット
  • スタートアップ
  • サンプル
  • Converter
  • YAML Editor
  • Setting Editor
  • 日本語
  • English
  • はじめに
  • 動作環境・対応範囲
  • リリースノート
  • 競合比較
  • 価格・入手
  • FAQ
  • 向いているケース
  • ライセンス
  • Unity Asset版とStandalone版の違い
  • 簡易難読化・改ざん検知
  • 整合性検知・デバッグ
  • ローカライズ
  • バージョン管理
  • Google Sheets入力
  • Excel
  • YAML
  • 設定ファイル
  • データフォーマット
  • ValueOnlyフォーマット
  • スタートアップ
  • サンプル
  • Converter
  • YAML Editor
  • Setting Editor
  • 日本語
  • English
  • 技術解説

    • ValueOnlyフォーマット

ValueOnlyバイナリフォーマット

Wienerが Static Game Data に使用する独自バイナリフォーマット「ValueOnly」の技術概要です。

ValueOnlyとは

JSONのような自己記述形式は、データとともにキー名を格納します。

{ "item_id": 1001, "name": "Sword", "hp": 0, "attack": 45 }

ValueOnlyはキー名をバイナリに格納せず、コンバート時に生成したC#コードのフィールド順序に従って値を読み込みます。現行の Unity Asset Store 版 1.0.0 では、Unity向けC#コードとバイナリを同じコンバート結果から生成して使用します。

読み込みの仕組み

自己記述形式:
  データ受信 → 形式の解析 → キー名の解決 → 値取得

ValueOnly:
  データ受信 → 生成コードの順序で値取得

キー名の照合を省けることがValueOnlyの特徴です。ただし、実際のロード時間はデータ量、フィールド型、実行環境、ストレージ、生成設定などに依存します。特定のセル数や時間を保証するものではないため、対象プロジェクトのデータと端末で計測してください。

セキュリティ上の位置付け

キー名を格納しないため、単純な文字列検索では構造を把握しにくくなります。一方で、ValueOnlyは暗号化・署名・アクセス制御ではなく、機密性や真正性を保証しません。重要な秘密情報や権限判定はクライアントに含めず、サーバー側で管理してください。

必要に応じて 軽量難読化・変更検知 を併用できますが、これも暗号学的な保護ではありません。

生成されるコードとの関係

ValueOnlyはWienerが生成するコードとセットで機能します。

// Wienerが生成するコード(例)
public class ItemData : IWienerDictionaryData<int>
{
    public int ItemId { get; private set; }
    public string Name { get; private set; }
    public int Attack { get; private set; }

    public void Read(WienerDataReader reader)
    {
        ItemId = reader.ReadInt32();
        Name   = reader.ReadString();
        Attack = reader.ReadInt32();
    }
}

readerはバイナリを先頭から順に読み進め、各 ReadXXX 呼び出しに応じて内部位置を進めます。そのため、生成コードと basic.bytes は同じコンバート結果から作成してください。

通常の LoadBasicPack は、生成コードとバイナリの構造が一致していることを前提にロードします。開発中に両者が一時的にずれた場合は、LoadBasicPackFromHash を使用すると、バイナリ内のハッシュと一致する変数だけを読み込めます。バイナリに存在しない変数は既定値になり、生成コードに存在しないデータは無視されます。

LoadBasicPackFromHash は差分開発・検証用で、通常ロードより追加の処理が発生します。リリース用途では、生成コードとバイナリを同時に更新し、LoadBasicPack を使用してください。

制約

ValueOnlyは汎用形式ではなく、対応するWiener生成コードが必要です。デバッグや他システムとの連携には、用途に応じて CSV、SQL(CSV)、JSON を使用してください。

将来提供予定の Standalone 版・UE5向けC++コード生成は、現行の Unity Asset Store 版 1.0.0 には含まれません。

関連

  • C#フォーマット: LoadBasicPackFromHash
  • 軽量難読化・変更検知
  • CSV
  • SQL(CSV)
  • JSON
最終更新:: 2026/08/09 23:18