UnityとC#とJavaScript

UnityのスクリプティングJavaScriptを採用している……というのは、かなり大雑把な表現だ。Unityは.NETフレームワーク互換のMono環境の上で動いている。スクリプトの方も、純粋なJavaScriptというよりかは、JScript .NETに近いものとなっている。

この辺りの仕様の詳細は、今のところマニュアルには記載されていない。数行のスクリプトを書く分にはJavaScriptのマニュアルを読めば済むだろうけども、本格的にがっつりとスクリプトを組む段になると、そういった代替手段では通用しなくなってしまう。

Unityでは、JavaScriptの他にC#でもスクリプトを書くことができる。プログラマー的な視点で考えると、.NET互換環境なんだからむしろC#で書くのがまっとうなんじゃないの、と思ったりするかもしれない。僕もそう思う。しかし実情としてはそうとも限らない。オブジェクトの挙動を記述するにはJavaScriptの方がシンプルにまとまるのだ。

ただ逆に言えば、オブジェクトの挙動に関わらない部分を書くには、C#の方がいい。具体的には、MonoBehaviorを継承しないクラスや構造体を自分で設計するようなケースにおいては、C#の方が書きやすい。むしろ、C#でなければ書きようがないという場合もある。

例えば、構造体(struct)をJavaScriptで書くことはできない。Vectorクラスなどのように、代入で値コピーが発生して欲しいようなデータ構造を作成するには、C#で書くしかない。AIなどもC#で書いた方がすっきりするだろう。

結局、UnityのプロジェクトにはJavaScriptC#が混在することになる。とてもグロい状態だ。グロいプログラミングが好きな人にはたまらない。

これを始めとして、Unityのスクリプティングの運用には若干グロいところがある。現状は、とりあえず使いやすくまとめられているので許される、って感じだけれど、そんなにとっちらかしちゃって大丈夫?という一抹の不安が残らないでもない。