参考文献
[Tutorial: Using F# with Unity3D] (http://jacksondunstan.com/articles/3229)
Unityのマネージド プラグインに関するマニュアル
初心者がF#をUnityで使ってみた!
はじめに
どうしてもUnityで機械学習をしてみたいので、F#を始めました。完全に初心者なので、一部勘違いがあるかもしれません。お気づきの点がございましたら、コメントか Twitterで @yanosen_jp にご指摘ください。
プロジェクトのセットアップ
まず Unityプロジェクトを作る。
次に、Visual Studioの立ち上げ (Unityインストール時に入れる、Community Editionでよい)
File -> New -> Project
Visual F#のテンプレートを探す。まだインストールされてなければ、指示に従ってインストールする。インストールが完了したら、Libraryを選択する。
ライブラリの名前は何でもよい(ここではLibrary1とした)が、位置(Location)はUnityプロジェクトのルート(Assetsとかと同じレベル)にしておく。

OKを押すと、プロジェクトが作られる。
右端のSolution Explorerで、”Library1”を右クリックして出てくるPropertiesを開く

Applicationタブで、Target FrameworkをUnity 3.5 .net Subset Base Class Librariesにする。

Buildタブで、Output PathをUnityプロジェクトのAssetsの下(下ならどこでもよい)に指定する。

ここでは(かくれて見えないけど)Assetsのすぐ下を指定した。
次に、同じく右端のSolution Explorerで、”Library1”の左の▶︎をクリックして出てくるReferencesフォルダを右クリックし、Add Referenceを選択する。

そこで、自分が使っているUnityのUnityEngine.dllを選択する。図中のパスを参考に。

Solution ExplorerでUnityEngine.dllをクリックすると、下にPropertiesが出るので、それでCopy LocalをFalseにする。

F#スクリプトの書き方
ゲームオブジェクトにアタッチするスクリプトの場合
Unity側でゲームオブジェクトにアタッチするF#スクリプトを作るには、以下のように書く。ここでは、ファイル名はLibrary1.fs
namespace Library1
open UnityEngine
type TestScript() =
inherit MonoBehaviour()
member this.Start() = Debug.Log("Hello F# World")
Open UnityEngine
とinherit MonoBehaviour()
が必要。
出来たら保存して、Build -> Build Solutionでビルドする。終わったら、UnityのAssetsフォルダの中を確認する。以下のようになっているはず。

空白の書類のように見えるLibrary1.dllをクリックすると、中にTestScriptを確認できる。これを、適当なゲームオブジェクトにアタッチする。そして、Playすれば、コンソールに"Hello F# World"が出ることを確認できる。
GameObjectにアタッチしないF#スクリプト
ゲームオブジェクトにアタッチしない(MonoBehaviourを継承しない)F#スクリプトも使える。Solution ExplorerでLibrary1を右クリックし、Add -> New Item...を選択する。

出てくるウィンドウでCode -> Source Fileを選び、名前を付けて保存。

作ったファイルをFile1.fsとし、以下の通り書いて保存。namespaceを先ほどのLibrary1.fsと同じにしている。
namespace Library1
module File1 =
let k = 5
保存したら、またビルド。UnityのProjectからはファイルそのものは見られないが、気にしなくていい。
次に、File1.fsを参照するためのUnity C#スクリプトを書いてみる。Unity側でLookFSharp.csを作り、以下の通り書く。
using UnityEngine;
using Library1;
public class LookFSharp : MonoBehaviour {
void Start () {
Debug.Log(File1.k);
}
}
Library1をnamespaceとして指定し、モジュール名File1を使ってkという変数を呼び出している。LookFSharp.csを適当なゲームオブジェクトにアタッチし、Playすれば、"5"がコンソールに出てくるはず。