docs.unity3d.com
    目次を表示する/隠す

    テーブルキーの生成

    Key (キー) は、String Table または Asset Table 内の各エントリーに一意の識別子を提供します。キーは、2 つの一意の要素 (キー名とキー ID) から構成されます。

    Distributed ID Generator キーを使用した String Table Collection の例

    Localization Table の Key 列にはキー名、Key Id 列にはキー ID が表示されます。

    キー名は変更可能ですがキー ID は変更できません。Unity は、アセットあるいはコンポーネント内のテーブルエントリーにアクセスする時に参照としてキー ID を使用します。

    Distributed ID Generator

    Unity はデフォルトでは Distributed Key Id Generator を使用して一意の Key Id 値 (それを生成するマシンに固有のもの) を提供します。このため、複数のユーザーが同じテーブルで作業しても安全です。一部のマージ競合を解決する必要がありますが、Unity は同じKey Id を 2 回生成することはないので、これらの競合は簡単に解決できます。

    キーは 64 ビット長のデータ型で、以下のような構造になっています。

    Distributed ID Generator キーのデータ構造

    64 ビットのキーは以下の要素から構成されます。

    ビット数 名前 説明
    12 (0-11) Sequence Number 0 から開始し、同じミリ秒中に行われた新しい ID リクエスト毎に 1 ずつ増加する、マシン毎のローカルカウンターです。
    値は 12 バイトに制限されているため、このミリ秒の ID が使い果たされる前に含むことができる項目数は 4095 個で、ID ジェネレーターは次のミリ秒まで待機してからでないと続行できません。
    10 Bits (12-21) Machine Id マシンの ID です。
    デフォルトでは、エディターではこの値はマシンのネットワークインターフェースの物理アドレスから生成されます。
    ただし、カスタム値に設定することも可能です。1024 台のマシンに十分なスペースがあります。
    41 Bits (22-63) Timestamp カスタムエポック (あるいは開始時刻) (クラスの作成された時刻) を使用したタイムスタンプです。
    表示可能な最大のタイムスタンプは、カスタムエポックから 69 年です。
    その時点でキージェネレーターは全ての一意の ID を使い果たします。
    1 Bit (64) Signed Bit ID ジェネレーターは、符号ビットを使用しません。
    カスタムの ID 値を追加したい場合は、競合を避けるために、符号ビットを使用して負の値を持つキー ID を追加してください。

    カスタム ID ジェネレーター

    Unity の Distributed Key Id Generator による生成の代替として、カスタムのキー生成メソッドを適用することも可能です。これを行うには、SharedTableData プロパティの KeyGenerator を使用してください。

    以下の例は、既存の String Table Collection を設定し、連続的なキーを使用するよう方法を示したものです。

    using System.Linq;
    using UnityEditor;
    using UnityEditor.Localization;
    using UnityEngine.Localization.Tables;
    
    public class ChangeKeyGeneratorExample
    {
        public void ChangeKeyGenerator()
        {
            var stringTableCollection = LocalizationEditorSettings.GetStringTableCollection("My Game Text");
    
            // Determine the highest Key Id so Unity can continue generating Ids that do not conflict with existing Ids.
            long maxKeyId = 0;
            if (stringTableCollection.SharedData.Entries.Count > 0)
                maxKeyId = stringTableCollection.SharedData.Entries.Max(e => e.Id);
    
            stringTableCollection.SharedData.KeyGenerator = new SequentialIDGenerator(maxKeyId + 1);
    
            // Mark the asset dirty so that Unity saves the changes
            EditorUtility.SetDirty(stringTableCollection.SharedData);
        }
    }
    
    トップに戻る
    Copyright © 2023 Unity Technologies — 商標と利用規約
    • 法律関連
    • プライバシーポリシー
    • クッキー
    • 私の個人情報を販売または共有しない
    • Your Privacy Choices (Cookie Settings)