ほとんどのゲームはキーベースのローカライズを使用します。つまり、特定のテキストを説明するためにキーが必要です。しかし、私はより良いオプションを提供します。
キーとは何か、なぜ必要なのか
キー、またはキーワードは、必要なテキストを決定するための単語であり、選択した言語の検索はすでに進行中です。 キーワードの例:
scene_Escape_from_jail_Ethan_dialog_with_Mary_3 、はい、ゲームに多くのシーン、大きなプロットがある場合、キーは次のようになります。 言語の1つ、ほとんどの場合英語、またはプログラマーが流oneな言語ですぐにフレーズを直接書くことをお勧めします。 ちなみに、現在の言語とメイン言語のすべてのフレーズはRAMにあるため、ファイルから毎回取得するよりも生産性が高くなります。大規模なゲームでは、シーンごとにファイルをわずかに変更できます。
すべての配置方法
以下で説明するアクションでは、静的なLangクラスが使用されます。このクラスでは、すべての単語/フレーズの検索が行われます。 必要なライブラリを接続してクラスを宣言しましょう:
using UnityEngine; using System.Collections.Generic;
したがって、リソースからファイルを取得するため、標準ライブラリなしでは実行できません。任意の便利な方法でダウンロードできますが、より便利で実用的です。 リスト、辞書を接続し、エディターからファイルを操作するには、システムライブラリが必要です。 UnityEditorライブラリは、フレーズの最初の記録中にファイルを更新するためにのみ必要です。 クイックリスタート後、すべてのフレーズが常に読み込まれるとは限りませんが、このライブラリを使用してこの問題を解決できます。 クラスには2つの静的フィールドが格納されます。ファイルの名前を使用します。この場合、パスはリソースのあるフォルダーであり、ファイルの名前は任意です。
次に、リストを追加して、言語と辞書で使用されるすべてを保存する必要があります。
private static int LangIndex;
LangIndexフィールドは、ファイル内のレコードに関連する現在の言語のインデックスを保持します。 言語リスト-ファイルで使用されるすべての言語が記録されます。 辞書には、すべてのフレーズがメイン言語と現在の言語で保存されます。
上記のクラスのフィールドの初期化を追加する必要があります。
コード public static bool isStarting
アプリケーションのコンパイル後に不要なアクションを実行しないように、組み込みのディレクティブをすぐに使用します。 Lang.Startingの呼び出し(...)は次のようになります。
#if !UNITY_EDITOR Lang.Starting(LANGUAGE); #else Lang.Starting(LANGUAGE, SystemLanguage.English, SystemLanguage.Russian, SystemLanguage.Ukrainian); #endif private static int FindIndexLanguage(SystemLanguage _language)
エディターで再生するときの呼び出しには2つの主要なパラメーターが含まれている必要があります。これは、現在どの言語フレーズを翻訳し、どの言語を主要言語として使用するか、他のすべてのパラメーターはファイルに含める必要がある言語パラメーターです。これらのパラメーターは最初の起動時にのみ必要です。ファイルがまだ作成されていない場合(および後で削除する必要はありません)、そうでない場合は、言語を追加する必要がある場合は、ファイルからすべてをコピーし、ファイルを削除し、エディターでコードを再起動するか、自分でファイルに追加する必要があります
上記のコードは
SystemLanguageParse(...)メソッドを使用します。このメソッドは、言語名を文字列型からSystemLanguageに単純に変換します(このメソッドの方が低くなります)。
addメソッドについて詳しく見てみましょう。
#if UNITY_EDITOR private static void Add(string AddString)
このメソッドはエディターから起動するときにのみ使用されるため、システムユーティリティを安全に使用してファイルを上書きし、Refresh()メソッドを使用して変更されたファイルをエディターに更新できます。 これらのアクションの間に、同じセッションでの再記録から身を守るために、フレーズを辞書に追加するだけです。
ちなみに、フレーズは.csvファイルに保存されることを忘れていました。これにより、フレーズを快適にExceleに変換できます。 ここで、言語を変更できる適切なメソッドを追加する必要があります。
public static void ChangeLanguage(SystemLanguage _language)
そこで、最も重要な方法に到達しました。この方法では、メイン言語でフレーズを取得し、適切なユーザーに発行します。
public static string Phrase(string DefaultPhrase)
このメソッドは、単にメイン言語のフレーズを取得し、辞書にあるすべてのものを反復処理し、キーでそのようなフレーズを見つけ、必要な言語のフレーズであるこのキーの値を提供します。 このメソッドは、簡単なコード行で使用できます。
string str = Lang.Phrase("Hello world");
これで、必要な言語のフレーズが文字列strに入れられますが、突然欠落している場合は、パラメーターで指定されたフレーズ、つまりHello worldが該当します。
このメソッドは少し改善できるため、引数を受け入れて入力できます。
public static string Phrase(string DefaultPhrase, params string[] args)
これで、このメソッドを以前のように呼び出すことができます。
string str = Lang.Phrase("Hello world");
しかし、今では、メソッドにはフォーマットされた出力があり、コンマで区切られたパラメーターを示しています。
string str = Lang.Phrase("Hello {0} from {1}", "world", "habr");
フレーズ翻訳
上記で書いたように、ファイルは.csv拡張子を使用してExcelですべてを実行できますが、それほど単純ではありません。C字型とExcelの問題は、異なるエンコーディングでキリル文字を理解することです。ExcelはUTF-8-BOMエンコーディングのみを理解しますまたはYaPが理解できないものは、UTF-8のみを使用する必要がありますが、ユニタリエディタはUTF-8-BOMを理解しますが、コードには異なるエンコーディング(UTF-8とUTF-8- BOM)は等しくないため、ファイルに同じ単語が絶えず追加されます。
無料の
NotePad ++を使用してファイルを
エンコードするには、offからダウンロードします。 サイト。 ファイルを編集しても問題はありません。1つの単語を追加するには、テキストエディタ、同じメモ帳、またはプログラミング環境を使用することもできます。
最終コード using UnityEngine; using System.Collections.Generic;
主なものを覚えておいてください:UTF-8-BOM-Excelで作業する場合、コードで作業する場合はUTF-8を忘れないでください。