今回は、ArudinoとUnityの連携について紹介したいと思います。
Arudino久しぶりに触ります。
忘れてる部分もあったので、過去の記事でおさらいしておきましょう。
「IoT」開発のベースとなるハードとソフト「Arudino」とは?

因みに、先日自転車を撤去されてかなり焦った羽根田です。
盗難じゃなくてよかった。。。
放置禁止区域に置くのはやめましょう!

結果から


まずは、こんな事出来ますという所から。
ボタンを押すと設定したメッセージがUnityに送られます。
シリアル通信によってArudinoからの信号をUnityへ送っています。

準備するもの


【ハードウェア】
・Arudinoボード(Arudino UNO)
・USBケーブル(A-Bタイプ)
・LED
・PC(Windows)

【ソフトウェア】
・Arudino IDE
・Unity

Unity側


シリアル通信で送られてきたメッセージを受け取る設定から行います。
アセットストアにはArudinoとの連携アセットがいくつかありますので、これらを使うと簡単かつ直感的に実装出来ちゃいます。
が、今回はArudinoに限らずという展開も考え、アセットは「UniRx」を使いたいと思います。
因みに、「UniRx」はシリアル通信に関するアセットではなく、機能を拡張してくれるアセットです。
「UniRx」で、シリアル通信をスレッドで受け取るスクリプトを実装していきます。
UniRx – Reactive Extensions for Unity – Asset Store

まずは、シリアル通信を行うために、UnityのAPI互換性レベルを変更しましょう。
「PlayerSettings」>「Other Settings」>「Configuration」>「Api Compatibility Level」を「.NET 2.0 Subset」から「.NET 2.0」へ変更します。
これで、シリアル通信のためのクラスが使える様になります。

あとは、ポート名とボートレートを設定できる様したシリアル通信用のスプリクトを作っておきます。

Arudino側


ボタンを押すと、デジタルピンに電圧がかかる様に電子回路を作り、信号がきたらシリアル通信でメッセージを送る様にプログラムを作っておきます。
入力ピンを設定し、loop内でピンの値をチェックします。
ピンに入力があった際、シリアル通信でメッセージを送る様にします。
Lチカの要領です。
回路やプログラムの内容は過去の記事を参考にしてください。
IoT開発に向けてArudinoを使ってLチカしてみよう!
ボートレートはUnity側と同じ値にして下さい。

Arudinoにスケッチが書き込めたら、「ツール」からArudinoのポート番号を確認しておきます。
COM+番号になっているはずです。

あとはUnity側にArudinoのポート番号を入力し、シーンを再生してボタンを押すだけ。
Arudinoで設定した値がUnityへ送られます。

次は何しよう!


今回は、ボタンを押したらUnityにメッセージが送られるという単純なものを作りました。
各種センサーをつけたり、逆にUnityからメッセージを送るなど、色々な事が出来ます。
XRコンテンツ用にコントローラーを自作する事も可能です。
次は、通信をワイアレスにしたりしてみたいです。