Catharsisようこそ。睡眠不足なプログラマのチラ裏です。この広告は、90日以上更新していないブログに表示しています。F#の人達は知ってるけど、MLな人は知らないとかあるかもしれないですし。10結局、25日に間に合いませんで。2014も合わせてどうぞ。この記事は非常に誰得でニッチな内容を扱います。ほとんどの場合役には立たないでしょう。らしい成分もあまりありませんので、まあ適当に流してください。簡単に導入することができます。Studio使いたい勢ということもあり、こちらWindows専用となっています。いうか、リポジトリ公開してますから、誰か適当にうまいことやっちゃってください。上の動画の内容は少し古いですが、概要は伝わるかと。Scriptを作成できます。ScriptをDLLにビルドすることができます(MSBuild利用)。F#(関数型プログラミング言語)でUnityのゲーム開発がしやすくなります。いわゆる、"作ろうと思えば作れるの知ってるけど、面倒くさくて誰もやらなかったことをやってみた系のツール"です。実際やるといろいろ大変。オープンソースヒロインのユニティちゃん(ユニティ・テクノロジーズ・ジャパン提供)をマスコットキャラクターに採用しました。ユニティちゃんの音声で時報やイベント、ビルド結果の通知を受けられるという、本来の目的とはまったく関係のない機能も提供しています。UniFSharpはUnityのEditor拡張です。Scriptを作成できます。ユニティちゃんの音声でビルド結果の通知する機能を提供しています。趣味で使う分にはフリーダム。Scriptが混ざってます)。ほとんどの部分(エディタだろうがゲームだろうが)を書くことができます。この記事では、UniFSharpが提供する機能および、それがどのように実装されているのかについて書きます。ここで紹介でもしないと、GitHubのリポジトリを誰も覗いてくれることもないでしょうし。ご利用の際は、まぁいろいろあると思います(お察し)。12この記事を読むその前に...むろほしりょうたさんの初心者がF#をUnityで使ってみた!という記事をオススメします。Scriptの作成Unityのエディタ拡張では、カスタムメニューを簡単に作ることができます。F#で実装する場合、Moduleに定義した関数にMenuItem属性を付けるとよいでしょう。UnityのEditorWindowは、ScriptableObjectがインスタンス化されたものです。ShowUtilityメソッドを実行すると、必ず手前に表示し続け、タブとして扱えないウィンドウを作れます。作る場合と基本的に同じです。Scriptを生成するという機能を提供しています。して認識させる必要があります。Projectウィンドウ上に表示されません。Scriptファイルの名前の編集が確定したタイミングで行うようにします。EndNameEditActionクラスを継承し、Actionメソッドをオーバーライドして実装します。ScriptをUnityEngine.Objectとして読み込み、ProjectWindowUtil.ShowCreatedAssetで、Projetウィンドウ上に表示させることができます。チェックしていたりという感じです。変な階層を作られると、.fsprojファイルがぶっ壊れて開けなくなっちゃいますからね。Folder機能を作った本人も何故駄目なのかわからないって言ってますね。F#コードのプレビューを表示するためには、カスタムエディタを作成します。Scriptを読み込んで表示するよう実装します。MSBuildでビルドするだけの簡単なお仕事です。これといって特筆すべきことはありません。誰かソースきれいにして。UniFSharpでは、ビルドの結果をユニティちゃんが通知してくれます。Scriptファイルを、Inspectorウィンドウにドラック&ドロップしGameObjectにComponentとして追加することはできません。Scriptファイルをドラッグ&ドロップしているかのような操作感覚を実現しています。Scriptファイルを読み取って、シンプルな正規表現でクラス名を抽出し、アセンブリからMonoBehaviourの派生クラスを検索する方法。コンパイラサービスを利用して、解析して厳密にクラス名を抽出する方法。前者は精度は低いが早い。後者は精度は高いが遅い。それぞれ一長一短がある。コンパイラサービスを利用する部分を除いては、またC#。Scriptファイルから名前空間を含むクラス名の探索はこんな感じ。Framework4以上です。Unityでこのアセンブリを読み込むことはできません。残念!!なのですが、ここで、Microsoftが提供しているILMergeという神ツールを使う(苦肉の策)ことにより、それを回避し実現してる(アッハイ)。作成することをサポートしたということは、つまり、IDEとの連携もサポートするってことだよね。内容が書き換わってくれないと、それぜーんぜん役に立たない。この実装がけっこー面倒くさかった...。こんな感じAssetを追加・削除・移動した際に独自の処理をしたい場合は、AssetPostprocessorを継承して適宜処理を実装する。Scriptがこの場合)には、OnPostprocessAllAssetsメソッドを実装する。.fsprojファイルをごにょごにょすることで、これを実現できる。Studio上でそのファイルをアクティブにする動作を実現するために、EnvDTEを利用した。25これはきな臭い...。UniFSharpがWindows専用であることが滲み出ているコードですね。