[UNITY]2DRPG開発日誌 #57 FungusでのImport/Export/ローカライズ対応する方法

はじめに

Fungusとは、UNITYの会話機能支援アセットです。適度にシンプルなのでバグが起きないのが特徴です。

かつてUnity Asset Storeにありましたがなぜか今は無くなって公式githubでしか手に入りません。

で、このFungusは基本的にUNITYエディター上で操作するものなのですが、ローカライズ対応しようと思うとCSVなどを使ってローカルで編集したいですよね。

そこで、FungusのImport、Export機能やローカライズ(言語切り替え)機能を解説します。

ちなみに

UNITYにFungusをインポートすると最初にこんなメッセージが出ますので機械翻訳しておきました。

Some of this projects source files refer to API that has changed. These can be automatically updated. It is recommended to have a backup of the project before updating. Do you want these files to be updated?
Assets/Fungus/Scripts/Editor/LuaScriptedImporter.cs
1.Yes, for these and other files that might be found later
2.Yes, jus for these files
3.No
---
このプロジェクトのソースファイルの中には、変更されたAPIを参照しているものがあります。これらは自動的に更新することができます。アップデートする前に、プロジェクトのバックアップを取ることをお勧めします。これらのファイルをアップデートしますか?
Assets/Fungus/Scripts/Editor/LuaScriptedImporter.cs
1.はい、これらのファイルと後で見つかるかもしれない他のファイルに対して行います
2.はい、これらのファイルのみに対して行います
3.いいえ

これは素直に「1」を選べばOKですね。たぶん。

基本知識

はじめに、FungusでのローカライズCSVをエクスポートするとExcelで開いた時に日本語が文字化けしてしまう問題について

https://qiita.com/KoukiShimoya/items/473e5cfff7682894229e

ここを参考にして、事前にFungus内のスクリプトを編集しておく必要があります。

また、ローカライズの基本的な手順は公式チュートリアル動画でも解説されていますので見ておくとよいでしょう。

 

さて、FungusでテキストデータやCSVファイルを吐き出すにはTools -> Fungus -> Create -> LocalizationからLocalizeオブジェクトを生成する必要があります。

すると、そのなかに

  1. ローカライズCSVをエクスポートする
  2. テキストデータをエクスポートする
  3. テキストデータをインポートする

という項目があります。

「1.ローカライズCSVをエクスポートする」は、エディター上の「プレイヤー名」「SayとMenuコマンドの中身」「コマンドの説明(Description)」をCSVデータにしてエクスポートする機能です。

「2.テキストファイルをエクスポートする」は、エディター上の「プレイヤー名」「SayとMenuコマンドの中身」をテキストデータにしてエクスポートする機能です。

「3.テキストファイルをインポートする」は、「2.」でエクスポートした形式のテキストデータをエディター上に反映させる機能です。

ということは…

(特別な拡張を行わない限り)Fungusにおいてローカルで編集可能なのは「プレイヤー名」「SayとMenuコマンドの中身」のみです。多分。

IFコマンドとかFungus内の変数とかはエクスポートもインポートもできません。

『あれ? ローカライズCSVでは「コマンドの説明(Description)」もエクスポートされるんだよね?』

…と思うかも知れませんが、「コマンドの説明(Description)」はエクスポートしかできないので、ローカルで編集してもインポートできません。なにそれ?

※このあたりの不便さを上手いこと拡張機能として補ってる人を見つけたら、私に教えてください(切実)。

不思議な「ローカライズCSVエクスポート機能」

この機能、本当に不思議なのですが…

まず、Fungusで吐き出したCSVファイルを見てみると、こんなふうになっています。

「Key」列がブロックの種類とID及びキャラクター名、「Description」列がコマンドの説明、「Standard」列は各Keyにエディター上で入力された内容で、この「Standard」が初期言語の内容となります。

他に言語を追加したい場合はD列以降に追加する仕様です(言語名は1行目に入力します)。

で、そのデータが

ここに自動でアタッチされています。

で、このCSVデータを編集しておけば、エディター上で実行してもBuildしてもCSVデータが読み込まれて多言語対応が可能になるというわけです。

…と、こう書くと『便利じゃん』なんて思うかもしれませんが、

前述のように「インポート」という機能は無いので、例えばこのCSVデータを

こんな風に編集して、英語のセリフが完成したとしますよね。

で、この状態で実行したり、Buildしたりすると、ちゃんとこのとおりに動くんです。

でも、例えばエディター上で

「部品を貰おう」

という最初のセリフを

「部品を貰おうかな~!?!?!?」

に変更したとしますよね。その状態でエクスポートすると

…編集したCSVの内容が全部消えます。当たり前ですよね。だってインポートしてないし。

つまり、この「CSVデータでエクスポートする」という機能を使ってローカライズしたい場合は、

  1. ブロックの「数」「種類」「内容」を全て完璧に決めて、もう絶対に動かさないという状態に完成させる。
  2. CSVをエクスポートする
  3. CSVを編集する

という手順で使う仕様なんです。なぜこんな厳しい仕様なのでしょうか…。

というわけで、ここまでが基本知識です。長くなりましたが、次から本題です。

Fungusのローカライズ機能と仲直りする

さて、どんなに解りにくいアセットであっても、機能を拡張するスキルすらない私はただ歯を食いしばって「アリガトウゴザイマス…!!」と声を振り絞りながらこの素晴らしいアセットと折り合いをつけなければいけません。

問題を順番に解決していきます。

変数をエクスポート/インポートできない問題

これは簡単で、外部から

    void SetVar(string _varName, string _value)
    {
        flowchart.SetStringVariable(_varName, _value);
    }

こんなメソッドを呼べばFlowchart内の変数を編集することが可能です。

Flowchart内の変数にアイテム名やプレイヤー名などを入れたい場合は、言語切り替え時にこのメソッドを呼べばいいわけですね。

コマンドの説明(Description)をインポートできない問題

これは諦めるしかありません。

ただ、説明欄はローカライズを依頼する際に読んでもらう概要を書いておく場所なので、コマンドを追加したらとりあえず説明を書いておく癖をつけて、CSVでは説明欄を編集しない、というスタイルを貫くしか思います。

まぁ、慣れればさほど大きな問題ではありません。

追加した言語の内容をインポートできない問題

これはCSVデータのバックアップを取っておき、再エクスポート時にExcelの機能を使って復元するしかないと思います。

詳細は次の項目で解説します。

じゃあ、ローカルで編集する手順は?

あくまでも私のやり方ですがご紹介します。

  1. CSVエクスポート
  2. SayやMenuの中身はこのCSVのなかで(ローカルで)編集する
  3. CSVをバックアップ
  4. CSVのうち初期言語の内容のみを、(Excelの機能で)テキストデータでインポートできる形式に変換する
  5. テキストデータをインポート
  6. ブロックを追加・削除した場合は、新CSVをエクスポート
  7. (Excelの機能で)新CSVとバックアップCSVを照合し、同じブロックの内容を新CSVにコピー

文章で書くとまわりくどい方法に思えますが、「4.」「7.」のシステムさえ確立してしまえばそこまで手間ではありません。

頑張りましょう!!