[UNITY] xlsxファイルでローカライズする方法(文字列編) | 『くつひも物語』開発日誌 #86

はじめに

この記事で解説するのは、『CSV Serializer』でローカライズを行う方法ですが、CSVファイルは使いません

はじめに、基本的な使い方として参考になる記事はこちらです。

参考記事:【Unity】CSV SerializerでCSVファイルを読み込む - Qiita

この記事で解決したなら以下は読む必要はありません。

 

続いて、エクセルファイルからCSVファイルに出力すると文字コードの関係で文字化けしてしまう人は、この記事を試してみてください。

参考記事:Unity - CSV Serializer:CSVファイルを読み込む -

この記事で解決したなら以下は読む必要はありません。

 

さて、私は上記の方法を試すと、エクセルファイルから「名前を付けて保存」する時点で、CSVにしてもテキストファイルにしても、ハングル文字が文字化けしてしまう問題が発生しました。

その問題を回避するため、この記事では

  1. エクセルファイルで言語ごとの列を作って保存する
  2. エクセルファイルからUnicodeのテキストファイルに保存する
  3. さらにそれをCSVシリアライザーを使ってスクリプタブルオブジェクトにする
  4. スクリプタブルオブジェクトから言語ごとのデータを読み込む

という方法を説明します。

詳しい手順

以下は私の場合の手順です。特にクラス名やフォルダ構成は皆さんの好きなように調整してください。

とりあえずCSVをスクリプタブルオブジェクトにする

前述の記事を参考にして、とりあえずCSVをスクリプタブルオブジェクトにできるようにしておきます。

CSVではなくテキストを読み込むように改造

参考記事内では「PostProcessingTest」という名前になっているクラスのなかのOnPostprocessAllAssetsメソッドを次のように書き替えます。

コピペする際の注意点:

  • どこを改造しているかはdifffで比較してください。
  • 私はクラス名を「CSVProcessor」としているので、クラス名を「PostProcessingTest」のまま作っている人はクラス名までコピペするとおかしくなるので注意です。
  • 私はファイルの場所を「CSV」というフォルダ内にしているので、IndexOfの引数もそのようになっていますが、これも各自好きなように修正が必要です。
  • 当然LocalizeDataというクラス名も修正が必要です。
  • というか記事どおりに「MonsterData」とかで作ってなくてすみません。

エクセルファイルの準備

エクセルファイルを準備します。

注意点:

  • 見出し行は変数名と完全に一致させる
  • 各言語の列を作る
  • Enumは先に定義しておく
  • 無駄な行や列は一切作らない
  • セルの色や罫線は自由に見やすくしてOK

エクセルファイルをUnicodeテキストファイルで保存

ファイルをCSVではなくUnicodeテキスト(.txt)で保存します。

なぜかというとCSVや普通のテキストファイルで保存すると、その時点で韓国語(ハングル文字)が文字化けするからです。

エクセルからUTF8として「名前を付けて保存」できる人はよいのですが、私のエクセルはバージョンのせいでそれができません。

注意点:

  • ファイル名は前述のOnPostprocessAllAssetsメソッドで指定したファイル名。私の場合は(参考記事と同じく)データクラス名と合わせているので「LocalizeData」。

スクリプタブルオブジェクト完成

指定した場所に指定した形式のテキストファイルが生成されたので、なにもせずともスクリプタブルオブジェクトが生成されています。ハングル文字も文字化けしていません。

もし何らかの問題でスクリプタブルオブジェクトが壊れたら、スクリプタブルオブジェクトを一旦削除してから.txtファイルを右クリック->Reimportしましょう。

完成したスクリプタブルオブジェクトから各言語のデータを読み込む

例えばこんな風に書けばOKです。