【Unity4】CS1010: Newline in constantのエラーについて

さっきまで動いていたスクリプトが、急にエラーをはくようになった。

エラー内容は、CS1010: Newline in constantというもので、ビルドエラーが起きているようだ。

ほんとにさっきまで問題なく動いてたスクリプトだったので、何が起きたのかさっぱりわけがわからなかったが、どうやらマルチバイトの文字列を使っているファイルで、何かをきっかけにビルドエラーが起きるようになったようだ。

結論から言うと、マルチバイトが使用されているスクリプトファイルが、BOMなしのUTF-8で保存されていたことが原因のようだ。

UnityはBOM付きUTF-8でないとダメみたい。

サクラエディタで開くと右下にファイルのエンコード形式が表示される。(図の赤で囲った箇所)

ここが、BOM付きとなっているファイルなら、中で日本語が使用されていても問題ないようだ。

サクラエディタでBOM付きのUTF-8でファイルを上書きしてやったらビルドエラーが消えて正常に動くようになった。

ではなぜ、急にBOMなしのファイルに変わったりしたのだろうか?

ここからは推測だが、リファクタリングでメソッドや変数名を変更した場合、MonoDevelopは他のファイルからも当該のメソッドや変数を使用している箇所を探し出して同期してくれる。

その際、該当のファイルを開いている場合であれば、当該箇所は同期されて変更されるが、それを保存するのは手作業である。

しかし、該当のファイルを開いていない場合は、MonoDevelopが自動で同期変更して保存までを行ってくれる。

そして、MonoDevelopが自動でファイルを保存する場合、マルチバイトが含まれるファイルは、どうやらBOMなしで保存するのではないかと思われる。

もともとUnityとは別のプロジェクトとして作られたMonoDevelopなわけで、英語以外の言語のしかも上記のような特殊なケースまでは想定されていなかったと考えれば、さもありなんな話である。

そもそもUnityのスクリプトファイルの仕様がBOMなしUTF-8になってれば、こんな問題は起きないわけで。

それはそうと、今日も地道にすすんでいる。

今回は文字化けの問題などもあったし、画面に表示するメッセージ系をテキストファイルで外出しにした。

一応、国際化対応だ。ただし、ビルドする際にテキストアセットを日本語ファイルから外国語ファイルにリンクしなおす必要はあるが、ローカライズはどうせメッセージファイルだけで済む話じゃないだろうし、許容範囲だろう。

問題は、ローカライズが必要なくらいにヒットするかどうか、もっと言えばリリースできるかどうかである。わはは。

5年前

コメントを残す

メールアドレスが公開されることはありません。