LoginSignup
21
18

More than 5 years have passed since last update.

Unity で F#を使う 導入編 メモ

Last updated at Posted at 2016-03-13

参考文献

Tutorial: Using F# with Unity3D
Unityのマネージド プラグインに関するマニュアル
初心者がF#をUnityで使ってみた!

はじめに

どうしてもUnityで機械学習をしてみたいので、F#を始めました。完全に初心者なので、一部勘違いがあるかもしれません。お気づきの点がございましたら、コメントか Twitterで @yanosen_jp にご指摘ください。

プロジェクトのセットアップ

まず Unityプロジェクトを作る。

次に、Visual Studioの立ち上げ (Unityインストール時に入れる、Community Editionでよい)

File -> New -> Project

Visual F#のテンプレートを探す。まだインストールされてなければ、指示に従ってインストールする。インストールが完了したら、Libraryを選択する。

ライブラリの名前は何でもよい(ここではLibrary1とした)が、位置(Location)はUnityプロジェクトのルート(Assetsとかと同じレベル)にしておく。

NewProject.PNG

OKを押すと、プロジェクトが作られる。

右端のSolution Explorerで、”Library1”を右クリックして出てくるPropertiesを開く

スクリーンショット (7).png

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

ProjectProperties1.PNG

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

ProjectProperties2.PNG

ここでは(かくれて見えないけど)Assetsのすぐ下を指定した。

次に、同じく右端のSolution Explorerで、”Library1”の左の▶︎をクリックして出てくるReferencesフォルダを右クリックし、Add Referenceを選択する。

Reference.png

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

AddReference.PNG

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

CopyLocal.png

F#スクリプトの書き方

ゲームオブジェクトにアタッチするスクリプトの場合

Unity側でゲームオブジェクトにアタッチするF#スクリプトを作るには、以下のように書く。ここでは、ファイル名はLibrary1.fs

Library1.fs
namespace Library1

open UnityEngine

type TestScript() = 
    inherit MonoBehaviour()
    member this.Start() = Debug.Log("Hello F# World")

Open UnityEngineinherit MonoBehaviour()が必要。

出来たら保存して、Build -> Build Solutionでビルドする。終わったら、UnityのAssetsフォルダの中を確認する。以下のようになっているはず。

FSharpInUnity.PNG

空白の書類のように見えるLibrary1.dllをクリックすると、中にTestScriptを確認できる。これを、適当なゲームオブジェクトにアタッチする。そして、Playすれば、コンソールに"Hello F# World"が出ることを確認できる。

GameObjectにアタッチしないF#スクリプト

ゲームオブジェクトにアタッチしない(MonoBehaviourを継承しない)F#スクリプトも使える。Solution ExplorerでLibrary1を右クリックし、Add -> New Item...を選択する。

AddNew.png

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

SourceFile.PNG

作ったファイルをFile1.fsとし、以下の通り書いて保存。namespaceを先ほどのLibrary1.fsと同じにしている。

File1.fs
namespace Library1

module File1 = 
    let k = 5

保存したら、またビルド。UnityのProjectからはファイルそのものは見られないが、気にしなくていい。

次に、File1.fsを参照するためのUnity C#スクリプトを書いてみる。Unity側でLookFSharp.csを作り、以下の通り書く。

LookFSharp.cs

using UnityEngine;
using Library1;

public class LookFSharp : MonoBehaviour {

    void Start () {
        Debug.Log(File1.k); 
    }

}

Library1をnamespaceとして指定し、モジュール名File1を使ってkという変数を呼び出している。LookFSharp.csを適当なゲームオブジェクトにアタッチし、Playすれば、"5"がコンソールに出てくるはず。

21
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
18