質問: new GetSeial.Program(); program.Main(args); } // Update is called once per frame void Update () { Debug.Log(program.GetData()); } } ``` ### 試したこと Unityでのシリアル通信はこちらを参考にすることで出来ました。(ただし、ArduinoではなくMONOSTICKによるシリアル通信) しかし、上記のサイトの方法でシリアル通信を行うには、あらかじめポート番号を調べておく必要があります。 これを自動で取得できるようにしたいと思い、C#でシリアル接続デバイス名を取得できる方法で記載されているプログラムをPlugin化して試したところ、エラーになりました。 簡単に試した手順を記載すると 1. Pluginの作成を行う。 Visual Studioの新規作成→プロジェクトでクラスライブラリを選択。この時.NET3.5にしておく。 2. シリアル名取得のプログラムをコピペ。ただし、クラスのpublic化等を行った。 3. ソリューションエクスプローラーの参照で右クリ→参照の追加でSystem.Managementを追加 4. ビルド→ソリューションのビルドを行う。 5. Unityで新規プロジェクトを作成し、プロジェクトビューで、「Plugins」というフォルダを作成する。 6. E:\Users\●●\Documents\Visual Studio 2015\Projects\GetSeial\GetSeial\bin\Debug の中にある.dllファイルを「Plugins」フォルダに入れる。 7. UnityでGetData関数を呼び出すためのプログラムを作成する。 8. 実行→エラー ### 補足情報(言語/FW/ツール等のバージョンなど) Windows10 Unity 2017.1.0f3 Visual Studio Community 2015
回答: Unityのスクリプトは(マネージドプラグインのコードであっても)monoランタイムの上で動いているので、 System.ManagementのようなWindows固有の機能は動かないのではないでしょうか。 monoのManagementClassのコードを見ても、コンストラクタ含めてすべてのメソッドがNotImplementedException例外になっています。 Windows限定で良いのであれば、ネイティブプラグインを書けば回避できそうな気がします。