はじめに
こんにちは、やのせん(@yanosen_jp)と申します。 普段は、教育用のアプリを作っており、F#は初心者です。以前にUnity で F#を使う 導入編 メモというのを書いたのですが、それから一年ほどたち、補足したい事も出来たので、アップデートとしてちょっと書いてみることにしました。
#Unity
Unityというと、F#界隈の皆さんはDependency Injection用のコンテナを想像されるかもしれませんが、そちらの方ではなく、いわゆるゲームエンジンの方です。Unity(ホームページ)を使うことで、PC、スマホ、コンソールなど、幅広いプラットフォームでゲームやアプリを制作することが可能です。最近では、VR(バーチャルリアリティ)アプリの開発環境としても注目されています。
#UnityでのF#使用環境
UnityはMono 2.6を使用しているため、.NET Framework 3.5相当のC#でスクリプトをVisual Studio Tools for Unity やMonodevelopで書くことが可能です(参考)。
さらに、.NET Frameworkなので、C#だけでなくF#も使えます。ただ、付属のエディタでそのままF#スクリプトを書くことはできず、別にF#プロジェクトを作って、ビルドしたdllをUnityプロジェクトを読み込ませることになります。
.NET Framework 3.5のため、F# 2.0までしか使えない、というのが結構な制約なのですが、現在**.NET 4.6 (C#6.0相当) へのアップグレード作業が進められており**、2017年のどこかには利用可能になる予定です (参考1)。そうすれば、F# 3.0を利用できるようになるでしょう(ベータ版では動作確認済み)。海外のF#本は多くが3.0前提になっているので、これはありがたいですね。
#Unity向けのF#プロジェクトの作り方
標準的なやり方は、Unity で F#を使う 導入編 メモに記載した通りです。つまり
- Visual StudioでF#プロジェクトを作り、Output先をUnityのAssetフォルダ以下におく(これで、Unity側でコンパイルされる)
- F#プロジェクトにUnityEngine.dllへの参照を加え、スクリプトを作成してビルドする。
もう一つのやり方は、前の記事を出した後にリリースされたF# kitというUnity用のアセット(プラグインみたいなもの)を使う方法です。
こちらの方は、Unityのエディタ拡張スクリプトが付属しており、Unityのエディタ内で新規のF#スクリプト(ソースファイル)の作成ができるようになります。
スクリプトの編集はVisual Studioで行えます。スクリプトに変更を加えると、自動的にUnity上でコンパイルが走り、プロジェクトがアップデートされます。
#F#側から見た、Unityの使い道
F#を使ってデータ解析をしている方々にとって、Unityを使う利点は「データをインタラクティブにする」ことではないかと思います。特に、データをVRでインタラクティブにするのには、Unityはとても良いと思います。Oculus Rift(ヘッドマウントディスプレイ)を使っていろいろな視点からデータを見たり、Oculus Touch(VR内に自分の位置を表示させる入力デバイス)を使ってデータを見え方を変えられると、とても楽しいです。
下に示すのは、私が普段F#で解析してる、学生の得点データをUnity内で3Dで表示し、Oculus Riftで見ながらOculus Touchで操作している様子です。Touchは親指、人差し指、中指を伸ばしているか曲げているかを判定できるので、その組み合わせでグラフの移動、拡大縮小、回転などを行います。
ただ、残念ながら現時点ではUnityにはF#のXPlotに相当するようなグラフ描画ライブラリがないので、かなりの部分を自作することになってしまいますが。UnityでData Visualizationをする人が増えてくれば、誰かがアセットを作ってくれるんじゃないかなーと勝手に期待しています。
私からは以上です。次は、zeclさんの「TypeProviderに関するちょっとした小ネタを書く予定」です!