Serial通信を用いてArduinoとUnityを通信させたいのですがうまく動きません。
まず、SerialPortsクラスを使用するためにSystem.IO.Portsのバージョン4.7.0のdllファイルをAssetフォルダにコピーしました。そして下記のコードを記述してコンパイルしたのですが、「名前空間が重複している」という旨のエラーが出ました。
(Unityのバージョンは2019.3.13f1です。)
発生している問題・エラーメッセージ
Assets\SerialHandler.cs(14,13): error CS0433: The type 'SerialPort' exists in both 'System.IO.Ports, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' and 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
該当のソースコード
c#
1using UnityEngine; 2using System.Collections; 3using System.IO.Ports; 4using System.Threading; 5 6public class SerialHandler : MonoBehaviour 7{ 8 public delegate void SerialDataReceivedEventHandler(string message); 9 public event SerialDataReceivedEventHandler OnDataReceived; 10 11 public string portName = "COM4"; 12 public int baudRate = 9600; 13 14 private SerialPort serialPort_; 15 private Thread thread_; 16 private bool isRunning_ = false; 17 18 private string message_; 19 private bool isNewMessageReceived_ = false; 20 21 void Awake() 22 { 23 Open(); 24 } 25 26 void Update() 27 { 28 if (isNewMessageReceived_) 29 { 30 OnDataReceived(message_); 31 Debug.Log(message_); 32 } 33 isNewMessageReceived_ = false; 34 } 35 36 void OnDestroy() 37 { 38 Close(); 39 } 40 41 private void Open() 42 { 43 serialPort_ = new SerialPort(portName, baudRate, Parity.None, 8, StopBits.One); 44 //または 45 //serialPort_ = new SerialPort(portName, baudRate); 46 serialPort_.Open(); 47 48 isRunning_ = true; 49 50 thread_ = new Thread(Read); 51 thread_.Start(); 52 } 53 54 private void Close() 55 { 56 isNewMessageReceived_ = false; 57 isRunning_ = false; 58 59 if (thread_ != null && thread_.IsAlive) 60 { 61 thread_.Join(); 62 } 63 64 if (serialPort_ != null && serialPort_.IsOpen) 65 { 66 serialPort_.Close(); 67 serialPort_.Dispose(); 68 } 69 } 70 71 private void Read() 72 { 73 while (isRunning_ && serialPort_ != null && serialPort_.IsOpen) 74 { 75 try 76 { 77 message_ = serialPort_.ReadLine(); 78 isNewMessageReceived_ = true; 79 } 80 catch (System.Exception e) 81 { 82 Debug.LogWarning(e.Message); 83 } 84 } 85 } 86 87 public void Write(string message) 88 { 89 try 90 { 91 serialPort_.Write(message); 92 } 93 catch (System.Exception e) 94 { 95 Debug.LogWarning(e.Message); 96 } 97 } 98} 99
試したこと
調べてみて、重複しているクラスを削除する必要があることがわかったのですが、dllファイルのため内部を閲覧できず挫折しました。他に解決する方法をご存知の方は教えていただけると大変助かります。
コンパイルオプションを変更する必要があることがわかったのですが、C#スクリプトがUnityに紐づけされているためか、設定画面を開こうとしても以下のような表示になってしまいます。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/02 12:50