契約の浮遊船のローカライズ(日本語を英語にするなど多言語に翻訳する作業)をするに当たり、GameCreator1のローカライズ機能を使用しました。しかし仕様上の使い勝手があまり良いとは言えず、大規模作品である契約の浮遊船のローカライズでは超絶苦悩しています。他の機能が神ががって良いアセットなだけに非常にもったいないです。
ローカライズで苦悩したことを記録しつつ、「 こうだったらもっと使いやすいのに 」という願望上の仕様をまとめておきます。
GameCreator1のローカライズで苦戦した人は、何か解決の参考になるか?ぜひ記事を覗いてみてください。
前提知識・GameCreator1のローカライズの使い方
超絶苦悩
問題点
どこで間違えているのか教えてくれない!
(これが全ての元凶です。)
エラーが出るのはまあ購入したアセットであれば普通だとして、どこがどう間違っているのか?を指摘してくれません。詳細なエラー内容を解読するとわかるのかもしれませんが、少なくとも間違っている部分のKeyの数字くらいは教えて欲しいです。
遭遇したエラー
ArgumentException: JSON parse error: Missing a comma or ‘}’ after an object member.
ArgumentException: JSON parse error: Invalid escape character in string.
エラーで苦悩した過程
まずは、
ArgumentException: JSON parse error: Missing a comma or ‘}’ after an object member.
というエラーが発生します。
簡単に言うと「 } 」か「 , 」があるべき場所にない、ところがあるよというエラーなのですが、実際にローカライズとして渡したデータ行は6994行。台詞の数にして、1747セリフあります。その大量のデータの中で、1個1個確認して、探し出せという鬼畜な命令です。
テストプロジェクトでエラーを再現
テストプロジェクトを作成して、全く同じエラーが出るか再現性を検証しました。同時にテキスト内の「」やコンマが原因ではないか?調べましたが、「 ”” 」内に囲まれているので文字列として扱ってくれました。
するとKeyの後のコンマ「 , 」がない場合、本番インポートと同じ結果が得られました。
ChatGPTを活用してC#スクリプトで検索
流石に1個1個目で確認するのは大変なので、C#スクリプトをChatGPTに作成してもらい、問題がないか?確認しました。結果、問題はなく原因が分からず困りました。
結局、目視で「 , 」がなくなっていないか確認
ChatGPTではたまに間違えていたり、C#スクリプトもあまり理解はしておらず任せっきりなので、結局目視で下から上へとテキストアプリを使って目で確認して行きました。そして問題はありませんでした。
意外なところに問題が!
分からんなあ?と言っているさなか、Xcodeで見れば色分けされてより可読性が上がり、何か問題を発見しやすくなるのでは?とコピーを作成してXcodeで確認をしました。
するとなんと、「 ” 」を変な位置で文章中につけている、明らかにヤバい奴を発見しました。
問題解決と思いきや次なる強敵。
すべての文章をXcodeで確認すると、全てテキストが赤色で表示され、json形式の定義を破っているデータが無いことが確認されました。しかしインポートしてみると新たなる強敵、
ArgumentException: JSON parse error: Invalid escape character in string.
というエラーが発生します。
これは「 \ 」などのエスケープ文字と言われる、json構造で何かしらの役割をもたせる意味の文字がどこかにあるから探せというエラーです。(json構造では「 \n 」で改行の意味になったりする。)
検索で簡単かと思いきや
だったら検索で「 \ 」を探せばいいだけやんと意気揚々と作業をしました。「 \ 」は存在しなかったので、はて?おかしいな?それでは何が原因だ?と色々さまようことになります。
彷徨ったリスト
- 全角のスペースを消す
- & を疑う → 全部消す
- ピリオドスペースを疑う → 全部消す
- 全角スペースを疑う → 全部消す
- 特殊番号 ①を疑う → 半角の1に置き換える
- 「 / 」を疑う → 検証したら文字として認識
ChatGPTでエスケープ文字を検索するも・・・
また2時間ぐらいかけて、ChatGPTでエスケープ文字を検索するも全く出てくる気配なし。
タイムマシンにも苦しめられる
ここで最初に変な無記入のデータがあったので、これが原因か?と試しに消してインポートするも変わらずエラーを吐きました。しかも、ローカライズのデータテーブルを消したので、元に戻すためにバックアップからタイムマシンで復元しましたが、Macの記憶容量が不足して復元できないと言われ、半ばブチギレます。
容量は普通に160GB空きがあり、プロジェクトファイルは約140GBです。何度も不足しているから色々消せと言われて、Unityや要らないファイルを消しましたが、4-5回やっぱり容量が足りないと言われます。
最終的に今のプロジェクト140GBを全部消して再起動してタイムマシンの復元を掛けたら、元に戻りましたが、内心戻らないかとヒヤヒヤで肝を冷やしました。
お手上げ
結局6時間半、悪戦苦闘しましたが、今日はお手上げで諦めることにしました。
最終手段のBプラン
本当はローカライズの仕組みで英語版を作るのがかなりスマートでSteamにもEpicにもビルドデータの提出が楽になります。さらに、プレイヤーの言語切替も楽になるのでプレイヤー体験を損なうことなく言語切替ができます。
とはいえ、最悪ローカライズシステムのインポートができなかった場合は、ダイアログのセリフを1個1個手動で差し替えるという最終手段が残されています。本当はやりたくないですが、インポートできない以上、最終的には英語版のビルド、日本語版のビルドと分けて2つのビルドでローカライズを行うことになりそうです。
今日は未来の自分に期待
一度始めると気になってしょうがないですが、いつまでにという期限もないので、今回は諦めてまた未来の自分に解決してもらうことにします。 → 気になって眠れないので夜中に作業をゴソゴソし始めました。
結局 ” が抜けていただけだった。
散々苦労した結果、「 ” 」が1つの文章で抜けていただけでした。解決した方法としては図でも説明していますが、
- GameCreatorのインポート処理を真似して自前のjsonチェッカースクリプトを作成
- jsonファイルの上下を消していき、自前スクリプトで読み込めるかを判定
- 手順2を繰り返し、削除する範囲を狭めていき、原因の箇所を特定する
(画像左下のメモ) - まさかの「 ” 」抜けが1個あるだけだった。
- 約14分かかりつつも無事に英語版のローカライズjsonファイルを読み込みに成功!!
- やったね!
もちろん差し替える前の日本語版のjsonファイルも保存しています。
(意外と変更前のもとになるjsonデータを忘れがちなので注意)
無事に読み込みができて本当に良かったです。
改善して欲しい点
- ローカライズテキストを複製して、ローカライズチェックボックスをオンオフすると、以前登録したローカライズ対象が消える。(使い方としては、まずローカライズチェックボックスをOFFの状態でゲームを作成して最後にチェックをONにする仕様)[ これはまあ仕様としてもわからなくもないそのままでも良い仕様。 ] だがやや使いにくさあり。
- ローカライズ差し替え作業中に原文が何なのかわからなくなる仕様。
(jsonファイルの書き換える仕様) - → できればプリファレンス画面から文字を比較しながら翻訳したい。
- もしくは今の仕様でインポート時にどのKey番号のテキスト要素などが問題になっているかのデバッグ機能の拡充。
- リスト化したローカライズテキストのKeyの数字をエディター上から確認できるようにして欲しい。(探せばあるのか?)
以上GameCreator1でローカライズする苦悩に満ちた記事でした。何か参考になれば幸いです。
このページにはアフィリエイトリンクを使用しています。
「開示:この投稿にはアフィリエイトリンクが含まれている可能性があります。リンクをクリックして推薦したアセットを購入すると私が手数料を受け取ることがあります。これらのリンクをクリックしてもクリックすることに対して費用はかかりませんのでご安心ください。受け取るアフィリエイト手数料はこのサイトの運営や私の開発プロジェクトに役立てさせていただきます。」
コメント