きゅぶろぐ

きゅぶんずの ぶろぐができて べんりだな

BridgeJsCoreUnity - UnityでJavaScriptを走らせる

github.com

UnityからJavaScriptを走らせるやつです。iOS, macOS限定です。
もう死語になったUnityScriptではなく、ちゃんとJavaScriptです。

実態はJavaScriptCoreを叩く薄いラッパーです。
jsからC#のメソッドを呼び出す、みたいな高度なことは出来ませんが、早いです。

使い方

とりあえず

var engine = new Engine();
engine.EvaluateScript(@"
function fib(num) {
  if (num <= 2) return 1;
  return fib(num - 1) + fib(num - 2);
}");

var (result, error) = engine.EvaluateScript(@"fib(10);");
Debug.Log(result); // -> 55

Object

var (result, error) = engine.EvaluateScript(@"
var obj = new Object();
obj.var1 = ""abc"";
obj.var2 = 123;
obj
");

var jsObject = (JsObject) result;
var var1 = jsObject.ForProperty("var1");
Debug.Log(var1); // -> abc

何に使えるか

Aprotの記事でも書きましたが、
C#のビルド速度に耐えられなくなったので、jsやluaでゲームロジックが書けないものかと考えていました。

しかし、dotnet上でJavaScriptを走らせるライブラリはとにかく遅い。とてもゲームには使えません。
そんなある日、ほんの出来心で、JavaScriptCoreでjsを実行したらnodeより速いことが判明しました
これは使える!と思ってUnityから叩けるようにしたのが、今回のBridgeJsCoreUnityです。

私事ですが

「Unityのウリって、色んなプラットフォーム上で動くことじゃん?
iOS, macOSでしか動かないものはちょっと・・・」
と言いたくなる気持ちは分かります。

そこで自分はHaxeを使うことにしました。
今作っているライブラリAprotを使うと、macで書いたHaxeのコードを即座にJavaScriptに変換しiOSへ転送、自動的にホットリロードされて実行されます。
これは、UnityでC#書いてビルドしてスタートボタン押すより数倍速いです。

その後、リリースビルドを作る時はHaxeからC#コードを生成して各プラットフォーム向けにビルドします。
こうなれば100%C#で書かれたプロジェクトと同等に扱えるので、どんなプラットフォームにも持っていけます。

これ、未来感じませんか?
未来感じた方は、AprotのリポジトリにスターをつけてTwitterもフォローしてやってください。
テンション上がります。