Unity(Ver4.5)で使用するC#スクリプトをVisual Studio Express 2013でクラスライブラリとして開発して、作成されたdllファイルをUnityのAssetsに登録します。このAssetsへの登録により、複数のゲームで同じようなロジック部分を外出しにして、使いまわしできるようにします。
プロジェクトの作成
今回はUnityでCOMポートを使用してシリアル転送ができるC#スクリプトを作成します。ます最初にプロジェクトを作成します。Visual Studio Express 2013のメインメニューバーから「ファイル」→「新しいプロジェクト」を選択して、プロジェクトのダイアログを表示させ、次のように設定して新規プロジェクトを作成します。
Visual Studio Community 2019 Version 16.3.1では次を選択します。
C#で「SerialHandler.cs」の作成
ゲーム中にCOMポートを使って、データをシリアル転送する共有関数「SerialHandler.cs」をC#スクリプトで作ります。つぎのC#スクリプトを「hecomi/SerialHandler.cs」からダウンロードします。
SerialHandler.cs
using UnityEngine; using System.Collections; using System.IO.Ports; using System.Threading; public class SerialHandler : MonoBehaviour { public delegate void SerialDataReceivedEventHandler(string message); public event SerialDataReceivedEventHandler OnDataReceived; public string portName = "/dev/tty.usbmodem1421"; public int baudRate = 9600; private SerialPort serialPort_; private Thread thread_; private bool isRunning_ = false; private string message_; private bool isNewMessageReceived_ = false; void Awake() { Open(); } void Update() { if (isNewMessageReceived_) { OnDataReceived(message_); } } void OnDestroy() { Close(); } private void Open() { serialPort_ = new SerialPort(portName, baudRate, Parity.None, 8, StopBits.One); serialPort_.Open(); isRunning_ = true; thread_ = new Thread(Read); thread_.Start(); } private void Close() { isRunning_ = false; if (thread_ != null && thread_.IsAlive) { thread_.Join(); } if (serialPort_ != null && serialPort_.IsOpen) { serialPort_.Close(); serialPort_.Dispose(); } } private void Read() { while (isRunning_ && serialPort_ != null && serialPort_.IsOpen) { try { // if (serialPort_.BytesToRead > 0) { message_ = serialPort_.ReadLine(); isNewMessageReceived_ = true; // } } catch (System.Exception e) { Debug.LogWarning(e.Message); } } } public void Write(string message) { try { serialPort_.Write(message); } catch (System.Exception e) { Debug.LogWarning(e.Message); } } }
ここでコンパイルすると、つぎのようにUnityEngineが見つからないというエラーが出ます。このため、Visual Studio Express 2013でUnityEngine.DLLを参照設定します。
UnityEngine.DLLの参照設定
Unity(Ver4.5)のUnityEngine.DLLは、「C:\Program Files\Unity\Editor\Data\Managed」に置かれています。これをデスクトップに置いて、Visual Studio Express 2013から参照させます。参照させるためには、Visual Studio Express 2013のソリューションエクスプローラーの参照設定を右クリックし、参照の対かを選択して、先ほどディスクトップに置いたUnityEngine.DLLを選択します。正常に参照できると、次のように参照設定の表示に、「UnityEngine」が追加されます。
Unity 2018.4.15f1 では、基底クラス「 MonoBehaviour」を使用するために、「UnityEngine.CoreModule.dll」を参照させます。
コンパイルすると「Unity Projects\SerialHandler\SerialHandler\bin\Debug」に「SerialHandler.dll」が作成されます。
dllファイルをUnityへ登録
作成された「SerialHandler.dll」を、次のようにunityのProjectのAssetsにトラッグします。
UnityはプロジェクトをIDEとSyncする際に、Assets以下にあるDLLを自動でプロジェクトの参照に加えます。そのため、他のライブラリのDLL等もAssets以下にドラッグ&ドロップするだけで使用できるようになります。