🐸

ZigSimを使ってスマートフォンの側の開発をせずに傾きをUnityで取得する

2021/10/24に公開約2,400字

スマートフォンってセンサーの塊っていうけど、実際あんまし使わないですよね

ZigSimとは

https://zig-project.com/

アプリ画面

Image from Gyazo

左の画面で送信するセンサー値を選んで、真ん中の画面で実行、右はIPやPortの設定

スマートフォンのセンサー値を取得する方法

  • Webブラウザで開発
    • JavaScriptでWebsocketを使って送り、サーバ側で受け取って、Unityは値を取得しにいく
    • もしくは、JavaScriptから直接Unityに送信する
  • スマートフォン向けアプリを開発する
    • KotlinとかSwiftとかで
    • Flutterとかでクロスプラットフォームで
    • むしろUnityでアプリ開発

ZigSimを使うよさみ

先程出したスマートフォン側の開発が一切いらないこと

やってみる

  1. スマートフォンにZigSimアプリのインストール
  2. Unityプロジェクト(今回試したバージョン:2019.4.18)作成
  3. Unity上でスクリプト作成し、後述のコードをコピペ
  4. GameObjectのCubeを作ってスクリプトを追加、Cubeをアタッチ
  5. Unity側のコードでポート番号(LOCA_LPORT)をZigSimアプリに合わせる(デフォルト50000番だから特に操作しなくてもよい)
  6. PCのIPアドレスを調べてZigSimアプリの設定から編集
  7. アプリでQuaternionにチェックし、スタート
  8. Unityエディター上でスタート

ソースコード

using UnityEngine;
using System.Net.Sockets;
using System.Net;
using System.Text;

public class UDPReceive : MonoBehaviour
{
    [System.Serializable]
    public class ZigSimData
    {
        public Sensordata sensordata;
        public string timestamp;
    }
    [System.Serializable]
    public class Sensordata
    {
        public Quaternion quaternion;
    }

    public GameObject cube;
    public int LOCA_LPORT = 50000;

    private UdpClient udp;

    private readonly string testText = "{  \"device\": {    \"name\": \"unknown device (iPhone10,1)\",    \"displayheight\": 1334,    \"uuid\": \"zbmjCQARSd9oFVJ8\",    \"os\": \"ios\",    \"osversion\": \"14.7.1\",    \"displaywidth\": 750  },  \"timestamp\": \"2021_10_21_10:43:24.409\",  \"sensordata\": {    \"gyro\": {      \"y\": -0.29756850004196167,      \"x\": -0.014113557524979115,      \"z\": -0.27333009243011475    }}}";
    
    void Start()
    {
        udp = new UdpClient(LOCA_LPORT);
    }

    void Update()
    {
        IPEndPoint remoteEP = null;
        byte[] data = udp.Receive(ref remoteEP);
        string text = Encoding.ASCII.GetString(data);
        //Debug.Log(text);

        ZigSimData zigSimData = JsonUtility.FromJson<ZigSimData>(text);
        Debug.Log(zigSimData.sensordata.quaternion);
        cube.transform.rotation = zigSimData.sensordata.quaternion;
    }
}


所感

すごく簡単だった

スマートフォン側のコードはJavaScriptとかでは一応簡単だと思うけども、まったく書かないってなるのは全然印象が違うと感じました!いい感じ!

似たようなアプリで tramontana というのもあるので要チェックやで

OscJack も気になる

Discussion

ログインするとコメントできます