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以下にドラッグ&ドロップするだけで使用できるようになります。




