僕は今まで Unity では JavaScript を使用して開発してきたのだけど、先日同僚と Unity の JavaScript についての話になったので持ち帰ってまとめてみた。
Unity における JavaScript
Unity では C#, JavaScript, Boo の三種類でスクリプトを書く事ができます。この3種類は一つのプロジェクト内で混在して使う事ができるので、例えば普段は JavaScript で書いてるが C# で書かれた Assets を導入して使うなども可能です。
Webの情報などを見ていると使用者や参考にできるものが多いのは C# と JavaScript ですね。そして Boo は全然見ないです。よく見てないですが Python っぽいスクリプト言語らしいです。特にこだわりが無ければ C# か JavaScript を使用するのが良いです。
私も最初に買った本が JavaScript で書いてあったので JavaScript を使用し続けてます。
JavaScript といっても普段ブラウザで扱うようなものとはだいぶ違います。まるで別物です。一応 UnityScript っていう言い方もあるんですけど皆 JavaScript って呼びます。拡張子も .js です。謎です。紛らわしいからやめろって思います。
JavaScript と Unityscript の違い
UnityScript versus JavaScript - Unify Community Wiki をざっと眺めて日本語でメモしておく。
ここでは区別が付きやすいよう, Unity の JavaScript を Unityscript と呼ぶ事にする。
JavaScript にはクラスが無い
Unityscript にはある。
ファイル名
通常 Unityscript を書く際は class を書かなくても良いんだけど、ファイル名をクラス名としたクラスに自動的に振る舞う。ちなみに C# だと class かかないといけないっぽい。
セミコロンが必要
JavaScript ってセミコロン必須じゃなくて別に書かなくても大丈夫なんですけど Unityscript は必須の箇所が多い。
変数を複数同時に指定できない。
できない。
代入は式(expression)じゃない
文(statement)です。
動的型付けは役に立たない
基本的には変数宣言時に型指定する事になるが、動的型付け自体は Unityscript でも利用できる。だがダックタイピングはできない。
例えば以下のコード, JavaScript でも Unityscript でも動く。
var a;
a = 1;
a = new Array();
しかし この変数 a に対して a.Push(2) のように配列のメソッドを呼ぶ事はできない。'Push' is not a member of 'Object' などと言われる。
.NET 由来のOOP
先ほど Unityscript ではクラスが使用できると書いた。例えば public, private, protected, static などのキーワードが利用できる。
グローバル変数は無い
無い。
With は無い
無い。
delete は無い
無い。
正規表現リテラルは無い
無い。
$を変数名に使えない
使えません。
改めて見るとホント JavaScript じゃないだろこれって思いますね。