C#の文字エンコードとNewBehaviourScript.csのテンプレートファイルあたり

マルチプラットフォームビルド万歳なUnityでAndroid版ではWindows、仕方なくiOS版ではMacOSで動作させてます。スクリプトファイル(.cs、.js)のコメントとか文字列とかUTF-8のファイルとして保存しないと日本語が文字化けを起こすのですが、困ったことにMacOS版はBOM付きUTF-8のファイルでないと常にUTF-8として判断してくれないケースがあってああもう、みたいな。
※でもドキュメントにはUTF-16を使ってね、と書いてあるんですよね。わけがわからないよ。

UTF-16LEでの保存形式でないとやっぱり正しく扱えないケースもでてきました。ぎゃふん。

まとめると

Windows : 左からBOM付きUTF-8UTF-8、システム規定(S-JIS)の場合

MacOS : 左からBOM付きUTF-8UTF-8、システム規定(ASCII?)の場合

こんな感じ。コメント行が化けるだけならまだしもstringの文字列指定のところも同様に化けて結果ゲーム画面に表示する文字も????になるですし。

C#スクリプトのテンプレートファイルの話

基本的にUTF-16LEで保存すれば良いだけなのですが、連携エディタとしてVisualStudioやUnitron使ってるとファイル1個1個に保存詳細の指定をすることになって、これがまた手間で手間で、という訳で最初からUTF-16のファイルとしてバーンと開いてくれて保存も良きに計らえ、と思い調べたら似たようなことができそうな方法がありました。Unityの中に新規C#スクリプトを作ったときの元になるファイルがあって、これを書き換えてしまおう手法

今回はC#用のものだけれど、JavaScriptも同様の場所にファイルがあるので置き換えればよさそうかも。次のファイルをC#スクリプトとして作られるファイルにしてしまえば最初から日本語が使える状況になって変換ミスも減りそうです。

Windows版のテンプレートファイルを置き換える場合 (適宜パス場所は修正を)

  • C:\Program Files (x86)\Unity\Editor\Data\Resources\ScriptTemplates (3.4の場合)
  • C:\Program Files (x86)\Unity\Editor\Data\Resources (3.3の場合)

のパスにNewBehaviourScript.csファイルがあって、これがエディタ内で新規にファイルを作る場合のテンプレートみたいです。こいつのファイルを上書きしてしまえば最初から日本語が自由に扱えて指定の変換忘れも無くなって万歳に。

MacOS版のテンプレートファイルを置き換える場合 (適宜パス場所は修正を)

  • /Application/unity/unity.app (右クリックしてパッケージの内容を表示を選択)
  • Contents/Resources/

の場所にNewBehaviourScript.csファイルがあって、これがエディタ内で新規にファイルを作る場合のテンプレートみたいです。こいつのファイルを上書きしてしまえば最初から日本語が自由に扱えて指定の変換忘れも無くなってMacOSでも僕と契約。

※ちなみunity.appの正体について柏木和宏さんが教えてくれたよ! 知識を借りられなければ入れ方が解らなかったところだよー。

おまけ、エディタの日本語化の話

同じ場所に UI_Strings_EN.txt というファイルがあってこれがエディタ内で表示される一部の文章が書かれているようで、こいつのファイルをBOM付きUTF-8で保存して翻訳してしまえばほらこんな感じに。

ファイル内で変更してもエディタ内では相変わらず英語のままの場所とか多々あって正直あまり使いどころ無い気がするけど。