Unityに関連する記事です

 3回の手順に分けて、多言語対応(ローカライズ対応)の実装例について紹介します。

 ゲーム内に言語設定を用意し、この設定を切り替えると、画面の再読み込みを行わず、動的に表示される文字の言語切り替えを行います。


<完成動画>




1.設計


 サーバー側、あるいはスクリプタブル・オブジェクトなどにデータとして各言語のデータを用意しておきます。
そちらに対して、ゲーム内で現在利用している言語設定を反映し、紐づけることで言語を切り替えるようにします。

 例えば、日本語の設定を行っている場合には、データベース内から指定された単語を日本語で表示するように紐付けします。

 なお、TextMeshPro を利用してフォントのマテリアルを作成している場合、日本語以外の文字については
TextMeshPro の Fallback Asset Font 機能を活用して、1つのフォントアセットから複数の言語を参照して表示できるように準備しておくとよいでしょう。


  => Fallback Asset Font 機能を利用したローカライズ対応


2.言語の種類


 言語の種類については enum やデータベースとして管理しておくようにします。

/// <summary>
/// 言語の種類
/// </summary>
public enum Language {
    jp,   // 日本語
    kr,   // 韓国語
    en,   // 英語
   
    // TODO 任意追加
}


3.データ構造の持たせ方 ー1.スプレッドシートの場合ー


 スプレッドシートを利用して各言語と、それに紐付くタグをセットで用意します。






4.データ構造の持たせ方 ー2.Json の場合ー


 Json 形式のファイルの場合も同様です。
ここではスプレッドシートで用意したデータベースを Json 形式に出力して利用します。

 サーバー側に用意する場合には Json 形式が便利でしょう。


<AppsScript>


 スプレッドシート内のメニューより「拡張機能」→「AppsScript」 を選択します。
別のタブでスクリプトの編集ページが開きます。





 ページ内には最初からスクリプトファイルが1つ作成されていますので、
こちらを編集して、現在開いているシートの内容を Json 形式で出力する機能を作ります。




 ファイル名はわかりやすい名称であれば何でも構いません。


function exportToJson() {
  // シート名を指定
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); // 'Sheet1'は各自のシート名に変更

  // データを取得
  var data = sheet.getDataRange().getValues();

  // ヘッダー行を取得
  var headers = data[0];

  // データをJSON形式に変換
  var jsonData = [];

  for (var i = 1; i < data.length; i++) {
    var row = data[i];
    var obj = {};

    obj['tag'] = row[0];

    // 'jp', 'kr', 'en' の列を配列にまとめる
    obj['languageDatas'] = [row[1], row[2], row[3]];

    jsonData.push(obj);
  }

  // JSONデータを出力
  var jsonOutput = JSON.stringify(jsonData, null, 2);
  Logger.log(jsonOutput);

  // ファイルに書き込む場合
  // var jsonFile = DriveApp.createFile('output.json', jsonOutput, MimeType.PLAIN_TEXT);
}


<Json ファイルの内容>


 上記のスクリプトを実行することで、スプレッドシートの内容は下記のような形式で Json ファイルとして書き出しされます。


[
    {
        "tag": "some_tag",
        "languageDatas": ["data1", "data2", "data3"]
    },
    {
        "tag": "another_tag",
        "languageDatas": ["dataA", "dataB", "dataC"]
    }
]


<出力結果の例>


 上記の AppScript を実行すると、スプレッドシートの内容を Json として出力できます。
この例では、各言語について languageDatas として配列に書き出しています。

[
  {
    "tag": "greeting",
    "languageDatas": [
      "おはよう",
      "&#50504;&#45397;&#54616;&#49464;&#50836;",  // Seesaa Wiki の仕様上表示されませんが、韓国語です
      "Hello"
    ]
  },
  {
    "tag": "battle",
    "languageDatas": [
      "戦闘",
      "&#51204;&#53804;",  // Seesaa Wiki の仕様上表示されませんが、韓国語です
      "Battle"
    ]
  }
]



 以上でこの手順は終了です。

 引き続き、ローカライズ対応の実装を行います。

  => ローカライズ対応の実装例

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます