Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
4
Help us understand the problem. What is going on with this article?
@wotakuro

toio SDK for UnityのAndroid対応 ~ないなら作ればいいじゃない ~

この記事について

toio SDK for Unityは、現在iOSもしくはWebGLのみの対応です。
Android版も対応の予定はあるという事でしたが…、何となく時間が掛かりそうな雰囲気がしました(直感)。

→ならば作っちゃえばいいじゃないという事で本記事です。
ちなみにコチラで対応中です。
https://github.com/wotakuro/toio-sdk-for-unity

なぜ作るのか?

下記のアプリをせっかく作ったので、配布してみたいと思っているのですが、iOSだと作ったアプリの配布が手軽にできません…。

一応、 Unityプロジェクトを公開しているのですが…「自前でビルドして試してくださいね」はあまりに敷居が高いです。
配布したいとなった時は、Androidでapkを適当に配る感じにしたかったのです…。なのでAndroid対応が欲しくなりました。

あと他にも下記の理由があります。
・1.私はiOSの端末がipadしかもっておらず、携帯はAndroidなのでちょっと不便なことがある
・2.iOSはUnity→XCodeの二段階ビルドが必要で、ビルドが毎回面倒すぎる!

作る過程

1: まずはAndrodのネイティブアプリを作り、検証

Javaプログラムで書いてました。まずはJava側で動いてから、Unity側に移植するフローです。Javaで最初にやったのはイテレーション速度上げるためです。ネイティブアプリのJavaでtoioの検出・接続・モーターの制御・データ読み取り等が出来たので、次に進みます。

2:Unity側のネイティブプラグインへ移植

C#からJavaをAndroidJNIでゴリゴリ呼び出すことで実装しました。ここではUnity側でtoioのモーター回す事などをゴールにします。AndroidJNI、久々に書いたので最初チョット苦戦しました。

3: toio SDK for Unity側のBLE低レイヤークラスのインターフェースと同じ別クラスを実装

toio SDK for Unityは、BLE低レイヤーのクラスが用意されていたので、それと同じインターフェースの別クラスを用意します。
Androidの時はコチラに流せばよいだけという風にすればよいだけという算段です。
この時、iOS側の実装がネイティブプラグインからのコールバックをする作りになっていました。JavaからC#を直接呼ぶのはチョット難しかったので、代わりにポーリングしてコールバックを疑似実装することにしました(←今ここ)

BLEの低レイヤーを対応することで、通信の種類が増えたとかも何もしないで対応できるようにする所を目指しております。

今ここ


Unityでtoioのスキャン・接続・書き込みが出来はしました。ちなみに端末はGalaxy S8です。

残りの作業は、toio SDK に自分の処理を乗せるだけ!

https://github.com/wotakuro/toio-sdk-for-unity/blob/main/toio-sdk-unity/Assets/ble-plugin-unity/Plugins/iOS/Ble.cs#L316-L318
別クラスに流す所も書きました。
あとは 流した先のBleAndroidクラスを作っていくだけ!

ある程度イイ感じになったら公式にPull Request投げたいと思っています。

本当は、このアドカレ投稿時に、動いています(キリっ)と言いたかったのですが…、ちょっと間に合わなさそうです…。
年内に目途付くと良いなぁって思っています。

おまけ

Q:ネイティブプラグイン部分… AssetStore使わないの?フルスクラッチで書いたの?何で???
A:Bluetooth Low Energyの勉強したかったのと、フルスクラッチで書けばソースも公開できるじゃないですか。
そんなに、複雑なコードでもないですし

その後…

Android対応して、本家にPull Request 出してみました
https://github.com/morikatron/toio-sdk-for-unity/pull/153

(さらにその後…)どうやらMergeされたみたいです!!
そのうち本家にも対応きそうです

4
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
4
Help us understand the problem. What is going on with this article?