【Unity】スクリプト名を日本語にしてもアタッチできるのか実験
日本語名でUnityのスクリプトファイルって作れるのかな? という実験。
文字列ならともかくソースファイルに直で、しかもクラス名を日本語を書くとかプログラミングでやりたくないことの上位に来るんですけど、気になってしまったものはしょうがないのでやってみましょ。
なお、私はいつもUnityではC#を使っているので、C#で実験します。
環境
macOS 10.13 High Sierra
Unity2018.1.0f2
日本語でスクリプトファイルを作る
Unityではスクリプトファイルを作成する時に名前を決め、それがそのままクラス名になります。
なので、ファイル作成時に日本語が入るか確認します。サクッとファイルを作って、日本語を入力!
……ダメでした。変換を確定する時に以下の画像の状態に戻されます。
変換が入るとダメなようなので、コピペしてみます。名前はデフォルトネームを直訳して、『新しい振る舞いのスクリプト』にします。
できた! ……けど、Unityのエディタでは『スクリプト』じゃなくて『スクリフ゜ト』になっています。濁点・半濁点で一文字分のスペースを取るとか、ファミコン時代のRPGみたいですね。『フ゛ライ』みたいな。
『Inspector』ウィンドウではちょっと変な表示ですが、エディタ(VSCode)で見るとちゃんと『スクリプト』となっています。Unityは日本語苦手だからしょうがないね。
アタッチして動作することを確認したいので、簡単にスクリプトを書いてみましょうか。
Start()ではデバッグ文をコンソールに表示させ、FixedUpdate()ではボールに力を加えています。ForceModeをImpulseにしているので、1フレーム分だけドカンと力を加えます。
もういっそのこと変数名も日本語にしちゃいましょ。boolとVector3の変数名は日本語で行きます。
このスクリプトを保存して、ゲームオブジェクトにアタッチしてみます。『Inspector』ウィンドウから[Add Component]ボタンを押すと、『Scripts』の下に無事追加されていました。
これを選択すると、以下のようにアタッチできました。
これでゲーム実行できればOK。ゲーム開始時にログが出力されて、ボールが飛ぶはず。
上のGIFだと小さいので見辛いですが、ログでは以下のように表示されました。よしよし、クラス名や変数名に日本語を使ってもちゃんと動きますね。
日本語で書くメリットはあるのか
うーんどうだろ。
正直動くとは思っていなかったのでびっくりなのですが、動くからといって使いたいか? と聞かれるとNo! なんですよねぇ。
私の場合アセット開発もしているので、海外ユーザーがパッケージをインポートした時に日本語が入ってる! なんて状況にしたくないなぁと。
日本語のフォントなんて入ってないでしょうし、最悪の場合文字化けしてバグを大量生産、なんて自体になりかねません。
やってみた感想
実際に入力してみると、変換の時に全角スペースが紛れ込んだりするので結構怖いところもあります。
VSCodeではインテリセンスも頑張ってくれましたが、やはり変換の手間は大きいです。英語で入れれば即出てくるのに! と若干ストレス。1行ごとに1, 2秒のロスがあるので、塵も積もれば山となる、です。
1000行だとざっくり15分くらいのロス。「15分あれば終電間に合ったじゃねーか!!」なんて状況もあるかも。いや、そんな状況ならまずプロマネに右ストレートをプレゼントするのが先か。
メリットを考えてみる
物事にデメリットしかないなんてことは少なくて、メリットだってあるはず。
可読性の向上
日本国内だけ、オフショア開発とかもしないで日本語ユーザーだけで開発します! なんて時には変数名とかはパッとみて分かりやすいかも。
英語で書いた変数名にコメントを付ける手間を省ける可能性もありますもんね。
C#ではクラス名や変数名に日本語(というかUnicode)を使えるので、コーディング規約がしっかり整ってるならありかも。
規約には日本語ユーザーのみをプロジェクトに参加させること、と鎖国宣言も忘れずに。あとで非日本語ユーザーが保守に入った日には……。
「ハイ、タロー。どうしてコードの本文が日本語で書かれているだい? コメントならともかく、これじゃどうやって動いているのか分からないよ」
「ごめんよマイク。でもそれがこのプロジェクトのルールだからね」
「プロジェクトのルールだって? メンバーにも読めないコードを書くのがルールなのかい、タロー? 君のチームはクレイジーだな、HAHAHA! ……で、タロー。僕が次に来るまでに英語に直しておいてくれるかい?」
難読化に寄与
非日本語ユーザーが読めないということは、難読化にも一役買ってるかも! ソースコードを解読されないためのコツは、理解させないようにすること、読む気を無くさせることですもんね。
あまり海外に流出させたくないような業務系のアプリだったら使えそう。
……業務系のアプリをUnityで作るかどうかは置いといて。
子供達に分かりやすい
あとは、あまり英語に慣れていない小学生がUnityを使ってゲームを作ってみるとかだったら、まずはプログラミングに慣れてもらう意味でありかも。
英語知らない=よく分からない=つまらない! になりがちですし、分かりやすく、楽しく学んでもらうためにはかなり有効です。
教育目的ならぜひ取り入れたい。
予約語とバッティングしない
地味に便利かも。識別子の命名で予約語とバッティングするとめんどくさいので、それが最初から避けられるというのはあり。
……あれ? Unityでも動作するし、案外使える場面あるかも?
まとめ
スクリプト名、クラス名、変数名を日本語で入力しても動きました。正直C#でOKでもUnity側でアウトだと思っていたのでびっくり。
全てのケースで日本語の識別子を使うことが有効とは言えませんが、日本語ユーザーだけのチームなどであれば可読性の面で大きなメリットがありそう。
あとは子供向けのプログラミング体験教室で威力を発揮しそうな感じ。
私はまだ慣れないけど、使ってみたら案外便利かも、と思いました。
おまけ
2020年現在、UnityのUIを日本語化するパックも提供されているので、こちらも使ってみると良いかも。
ゲーム開発の攻略チャートを作りました!
-
前の記事
【Unity】手っ取り早くコンポーネントをアタッチするなら検索で 2018.06.05
-
次の記事
【Unity】フォントをインポートして文字を表示する実験 2018.06.07
こんにちは。
いつも拝読させていただいております。
私は最近macにしました。
whindowsでは問題なかったのですが移行したスクリプト名は濁点が入っていると「ば」⇨「ば 」になるようでエラーが出ます。
またオブジェクト名もmacだと日本語では名前がつけられないようですね。
これからも良い記事を楽しみにしています