LoginSignup
15
17

More than 3 years have passed since last update.

Unity2018でシリアル通信できない問題

Last updated at Posted at 2019-05-23

はじめに

ArduinoをUnityとつなげていろいろしていて,LTS版が出たことを機にUnity2018に環境を移行させようとしたところエラーが発生したのでメモっときます.

2019/10/28 発生していたエラーについて追記しました.

環境

  • OS:Windows10
  • Unity2018.4.0f1
  • Arduino Uno

なお,UnityとArduinoの接続に関してはこちら「UnityとArduinoをシリアル通信」にお世話になっております.

エラー内容

いつものようにシリアル通信を行うためにAPI Compatibility Levelを.NET 2.0 Subnetから.NET2.0へ変更
(やり方は,こちらを参考にお願いします.)
(Unity2018.4.0f1ではAPI Compatibility LevelがOptimizationではなくConfigurationにある点に注意)

そして,「UnityとArduinoをシリアル通信」からお借りした「SerialHandler.cs」をAdd Componentしたところ...

Consoleに以下のような表示が

Assets\SerialHandler.cs(3,17): error CS0234: The type or namespace name 'Ports' does not exist in the namespace 'System.IO' (are you missing an assembly reference?)
Assets\SerialHandler.cs(20,13): error CS0246: The type or namespace name 'SerialPort' could not be found (are you missing a using directive or an assembly reference?)

erro1.PNG

また,「SerialHandler.cs」をVS2017で開くと,erro2.PNG

思いっきりエラーが出てます.

要約すると「System.IOにPertsってやつなんていないよ!」ってことなので,用意してあげたいと思います.

解決方法

調べたら,Microsoftの公式でUnityに.NETのdllファイルを新たに入れてあげる方法がありました.

「Unity で.NET 4.x を使用する」

上記リンクの「.NET との互換性を利用する」ってところを参考に行います.

以下の方法を実行する前にBuild Settingsを開いて,プロジェクトのプラットフォームをUWP(Universal Windows Platform)に変更してください(2019/10/28追記)

  1. このリンクから「system.io.ports.4.6.0-preview5.19224.8」をダウンロード(2019/05/24現在のファイル名です.)して,拡張子を「.nupkg」から「.zip」へ変更し,解凍
  2. 解凍したフォルダ内の lib/netstandard2.0 に移動し、System.IO.Ports.dll をコピー
  3. Unity プロジェクトの Assets フォルダに、Plugins という名前の新しいフォルダを作成し,System.IO.Ports.dll ファイルをペースト
  4. さっきと同じAssetsフォルダに link.xml という以下のファイルを作成
link.xml
<linker>
  <assembly fullname="System.Core">
    <type fullname="System.Linq.Expressions.Interpreter.LightLambda" preserve="all" />
  </assembly>
</linker>

以上です.

結果

もう一回「SerialHandler.cs」をVS2017で開くと
safe1.PNG
エラー表示が消えました~

UnityのConsoleにも表示が消えていると思います!
いやー,無事解決できてよかった!

なお,ビルドした状況で利用してないので,ビルドした場合どうなるかは不明です.

(追記1)
実は, Edit > Project Setting > Player > Inspector > Other Settings > Configuration にある Scripting Runtime Version を .NET 3.5 Equivalent に変更してもエラーは消えます.
.NET 4 にこだわる必要がない方はそっちでもいいかもしれませんね (-_-;)

(追記2)
現在,以下のようなエラーが確認されています.
解決策などありましたらご教授いただけると助かります...(-_-;)

PlatformNotSupportedException: System.IO.Ports is currently only supported on Windows.

2019/7/12
コメント欄で解決策を教えていただきました!
ご一読おねがいします。

2019/10/28
コメントを踏まえて内容を修正しました.

image.png

15
17
8

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
15
17