Unityでシリアル通信する際に試したことを、メモとして残します。
開発環境
- OS: Windows 8.1
構成
- micro:bitのUSBポートからUARTを送信(19200bps)
- Unityでは、System.IO.Portsライブラリを使ってUARTを受信
- Unityからmicro:bitへの送信は行っていない
- System.IO.Ports.dllはこちらの記事を参考に、ダウンロード&プラグイン
-
こちらのWebサイトを参考に、SerialHandler.csを作成し、Main Cameraにアタッチ
- ただし、ポートオープン処理に
serialPort_.ReadTimeout = 2000;
を追記(これを書かないとタイムアウトする)
- ただし、ポートオープン処理に
正常にUART受信ができた条件
Unityのバージョン
- Unity 2018.3.14f1
.NET関連の設定
[Edit] > [Project Settings...] > Player > Other Settings > Configurationにて、
以下2つのいずれか:
- 設定1
- Scripting Runtime Versionが.NET 4.x Equivalent
- Api Compatibility Levelが.NET 4.x
- 設定2
- Scripting Runtime Versionが.NET 3.5 Equivalent
- Api Compatibility Levelが.NET 2.0
System.IO.Ports.dllのバージョン
以下3つのいずれか:
- System.IO.Ports.5.0.0-preview.7.20364.11のnet461
- System.IO.Ports.5.0.0-preview.7.20364.11のnetstandard2.0
- System.IO.Ports.4.4.0のnetstandard2.0
正常にUART受信ができなかった条件
Unityのバージョン
- Unity 2019.4.7f1
.NET関連の設定
[Edit] > [Project Settings...] > Player > Other Settings > Configurationにて、
以下2つのいずれも:
- 設定1
- Api Compatibility Levelが.NET 4.x
- 設定2
- Api Compatibility Levelが.NET Standard 2.0
System.IO.Ports.dllのバージョン
- System.IO.Ports.5.0.0-preview.7.20364.11のnet461
予想
- Unityのバージョンが新しいと、System.IO.Portsが正常に動かない
- Scripting Runtime Versionが設定できるかどうかが鍵?
- System.IO.Ports.dllのバージョンは関係がない
余談
複数のバージョンのUnityをインストールする際に、こちらのWebサイトを参考にしました。