こんにちは、エンジニアのオオバです。

ググればいろいろ出てくるんですが、一旦自分でmicro:bitとUnityの無線通信をやってみます。

micro:bitとUnityを無線通信するためにSerialPortWrapperを作成_0

  1. 送信側micro:bitのAボタンを押して、文字列"A"を送信
  2. 受信側micro:bitで文字列"A"を受け取る
  3. 受信側micro:bitからUnityへ"A"を送る

というアプリを作ってみます。
※受信側micro:bitはUSBケーブルで繋がっています。

→11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら

準備

Unity側のビルド設定

Unity側でSerialPortクラスを使用するので、Player Settings -> Other Settings からApi Compatibility Level.NET 2.0に設定しておく必要があります。

micro:bitとUnityを無線通信するためにSerialPortWrapperを作成_1

Unity2019以降の場合

.NET4.xを選ぶ必要があります。
※.NET Standard2.0ではコンパイルが通りません

micro:bitとUnityを無線通信するためにSerialPortWrapperを作成_2

USBポート名を調べる

必ず受信側micro:bitをUSBにつないだ状態で、ターミナルから以下のコマンドを実行します。

 ls /dev/cu.*  

すると、 /dev/cu.Bluetooth-Incoming-Port /dev/cu.usbmodem1412 こんな感じで出力されると思います。
USBポート名の /dev/cu.usbmodem1412 をコピっておきます。
※1412の数値は環境毎に違う可能性があります

実装

送信側micro:bit

radio.setGroup(1)  
input.onButtonPressed(Button.A, () => {  
    radio.sendString("A")  
})  

受信側micro:bit

radio.setGroup(1)  
radio.onDataPacketReceived(({ receivedString }) => {  
    serial.writeLine(receivedString)  
})  

受け取った文字列をシリアル通信でUnityへ送信します。

Unity側

以下のようなSerialPortのラッパークラスを用意しました。

GitHub - baobao/SerialPortWrapper

実際に以下のように使用します。

[リンク](https://gist.github.com/baobao/80ace64f7ffdf1d42ff3fe5ea8b44c6c のサンプル · GitHub)(https://gist.github.com/baobao/6cf9e7f21c3c617dda5bbccf5e13a020)

micro:bitとUnityを無線通信するためにSerialPortWrapperを作成_3

USBのポート名をインスペクタに入力します。

必ずmicro:bitをUSBで接続してからUnityを再生します。

micro:bitとUnityを無線通信 - YouTube

完成。

余談

ちなみにUSB接続せずにUnityを実行すると以下のエラーが出るので注意です。

No such file or directory  

ちなみにmicro:bitは、電池パックも結局必要になるのでこのスターターキットを購入しました。

micro:bitとUnityを無線通信するためにSerialPortWrapperを作成_4

BBC micro:bit go スターターキット リテールBOX

オススメ記事
検証環境
参考サイト