スタンプ型デバイス(2) ~UnityとBluetoothSerial通信~


まえがき

前回はデバイスを完成させましたので次は利用できるアプリケーションを作成していきたいと思います.

本題

Unityと端末がBluetoothで通信できるようにする

機器概要

・Windows10 Laptop
・Unity 2019.3.2f1
・スタンプ型デバイス(M5StickC)

手順

デバイスからの送信は前回実装したので今回はUnity側で受信するscriptを実装する

1.新規プロジェクトを作成

2.設定を変更

File/Build Settings...からUWPに変更
Switch Platformする

3.script作成

受信するためのscriptはこちらをありがたく使わせていただきます.

以下のscriptをAssetsに作成

ColorChanger.cs
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class ColorChanger : MonoBehaviour
{
    public SerialHandler serialHandler;
    private bool flag = false;

    int num = 0;
    public Material[] array = new Material[5];
    void Start()
    {
        serialHandler.OnDataReceived += OnDataReceived;
    }
    void OnDataReceived(string message)
    {
        var data = message.Split(
            new string[]{"\n"}, System.StringSplitOptions.None); //受信する
        Debug.Log(message);

        switch (data[0]){
            case "ON":  //ONの時
                if(flag == false){  //一度だけ実行する
                    //オブジェクトの色を用意したMaterialの色に変更する
                    GetComponent<Renderer>().material.color = array[num].color;
                    num++;
                    if(num > 4) num = 0;
                    flag = true;
                }
                break;
            default:
                if(flag == true) flag = false;
                break;
        }
    }
}

4.objectにアタッチ

Demo用にCubeを作成
Cubeに作成したscriptをアタッチする

Serial Handler
Port Name:作成したデバイスのBluetooth接続Portに変更
※今回はBluetoothがCOM6となっていた
ColorChanger
Serial Handler:Cubeをアタッチ
Array:変化させる色のマテリアルをいくつか作成してアタッチ

実行例

あとがき

次はHoloLens2での利用,スタンプデバイスの位置を取得する手法を考えようかと思います

参考

【Unity】ESP32マイコンでBluetoothでUnityと接続するコントローラを作る
Unity2018でシリアル通信できない問題

BluetoothSerialでお手軽無線通信(M5StickC)
Bluetoothの自作デバイスを作りたい
UnityでC#によりCOMポートからのデータ入力

Serial Port Utility Pro
【Unity】Serial Port Utility Proをつかってシリアル通信する(Unity2019 & Win10 ※System.IO.Portsは使用しない)