「Intel.RealSense.unitypackage」を使ったUnityアプリを,Android上で使えるようにする方法
皆さまご存知のRealsenseですが,そのデバイス自身の素晴らしさもさることながら,SDKのプラットフォームの対応の幅広さも本当に素晴らしい点だと思います.
librealsenseレポジトリのReadmeも一行目から
とマルチプラットフォームを謳っております.
今回,AndroidからRealsenseを使いたいなぁと思って調べていて,もちろん公式対応はあるのですが,Androidのサポートはネイティブ(java)だけなのですね......
一方,Android向けにビルドもできるゲームエンジン,UnityにもRelasenseは公式に対応しているのですが,このUnityPackageはPC向けサポートのみということでAndroidには使えず......
AndroidなUnityでRealsenseを使いたい!ということで,「Android Unity Realsense」とかでググると,@UnlimitedBuildWorksさんの神記事が出てきます.
これで万事解決といえば解決なのですが,この方法だとjavaでRealsenseSDKを叩いてC#側に情報を渡すWrapperを自作しないといけないという......
つらい......日頃Unityでヌルく生きてるへっぽこエンジニアにはつらすぎる...…javaなんて書きたくないよう...…
ということで,Realsenseの公式UnityPackage「Intel.RealSense.unitypackage」をAndroid向けに使用できる方法を模索し,なんとか使えるようになったっぽいので,その方法をまとめます.
※ とりあえずサンプルシーンが動いていることを確認しただけなので,何か問題あればごめんなさい.ウチではもろもろ責任取りません(免責事項)
- 方針
- 準備
- 手順詳細
- 動作確認
- さいごに
LibrealsenseのAndroidWrapperをAndroid StudioでProjectビルドしたら,「Failed to notify project evaluation listener.」というエラーでビルドできない問題
問題
このLibRealSenseのAndroid Wrapperを使いたくて,Readme通りに Android Studioでプロジェクトを開いたのですが.
Syncしたときに,以下のようなエラーが出てビルドできませんでした.
A problem occurred configuring project ':hogehoge'. > Failed to notify project evaluation listener. > org.gradle.api.file.ProjectLayout.fileProperty(Lorg/gradle/api/provider/Provider;)Lorg/gradle/api/file/RegularFileProperty;
この問題の解決方法を残しておきます.
解決策
1. ProjectのGradleのバージョン設定を変更する
File > Project Structure... から Project Structure を開くと,Android Gradle Plugin Versionが選択できます.
古いバージョンに設定されているようなので,2021年02月現在で最新の安定版と思しき4.1.2に変更.
ここで自動でSyncが走るはず.
すると,元の「Failed to notify project evaluation listener.」のエラーはなくなるんですが,次は「Minimum supported Gradle version is ...」というエラー.
設定したGradle versionが悪かったっぽい.
今回は4.0.2にすると「Minimum supported Gradle version is」というエラーはなくなりました.
ここは試行錯誤でたどり着いたので,なぜ4.0.2でOKなのか詳細な理由は不明...
2. 必要なNDKのバージョンをダウンロードする
ただ,なんかまた別のエラーが出ます...
次は「No version of NDK matched the requested version」というもの.
これは普通に正しいバージョンのNDKをインストールすればよさそうです.
右上のアイコンからSDK Managerを開き,
SDK Tools のタブを選択,右下の Show Package Details にチェックが入っていなかったらチェックを入れます.
すると,NDKのバージョンを選択できるようになるので,エラーメッセージで指定されたバージョンを選択し,この状態で OK を押します.
なんやかんやダイアログが出るかもですが,適宜対応してるとダウンロードが実行されるので待ち.
3. 再度Syncを実行
NDKのダウンロードが終わったら,再度Syncを実行します.
右上のアイコンからGradleのSyncを実行
すると成功しました!🎉🎉
参考
- 「Failed to notify project evaluation listener.」のエラーを解決する - Qiita
- Cordova/Android Gradle error: Failed to notify project evaluation listener - cordova - Ionic Forum
- Gradle と Gradle Plugin のバージョンについて - Qiita
- Android でビルド時に No version of NDK matched the requested… というエラーが出る場合の理由と対処 | by wasabeef | Medium
「toio SDK for Unity」でシミュレータとしてビルドする方法
「ロボットやろうぜ!- toio & Unity 作品動画コンテスト -」というのにアプリを出したのですが,それで「toio SDK for Unity」を触ったのでTipsとか書くシリーズ第三弾です.
コンテストに出したアプリについてはこちら:
mu-777.hatenablog.com
コードのレポジトリはこちら:
github.com
で,せっかくなので誰でもこのアプリを動かせるようにしようとこのコンテストで作ったアプリはWebGLアプリにして公開しています!:
(自分でもそのうち動かせなくなりそうですしね...)
ただ,これをするために地味にハマったのでメモとして書いておきます.
続きを読む「toio SDK for Unity」でCubeを車輪の角速度[rad/sec]で制御する方法
「ロボットやろうぜ!- toio & Unity 作品動画コンテスト -」というのにアプリを出したのですが,それで「toio SDK for Unity」を触ったのでTipsとか書くシリーズ第二弾です.
コンテストに出したアプリについてはこちら:
mu-777.hatenablog.com
コードのレポジトリはこちら:
github.com
タイトルの,「Cubeの車輪の角速度[rad/sec]での制御」にちょっと手こずったというか,「toio SDK for Unity」にそのものズバリな関数は用意されていなかったので自作した件について書きます.
ちなみに実機は持っていないので,純粋にUnity Editor上でシミュレータとして使う用途に関する話だけになります.
続きを読む「toio SDK for Unity」の座標系について
「ロボットやろうぜ!- toio & Unity 作品動画コンテスト -」というのにアプリを出したのですが,それで「toio SDK for Unity」を触ったのでTipsとか書くシリーズです.
コンテストに出したアプリについてはこちら:
mu-777.hatenablog.com
コードのレポジトリはこちら:
github.com
マット上における各Cubeの絶対位置が取得できることが大きな特徴・魅力なtoioですが,SDK上で取得できる位置座標系が個人的にはかなり罠だったので記録を残しておきます.
たぶん,toio SDK for Unity のドキュメントにも,「toio コアキューブ技術仕様」にも情報が載ってないと思います(読み逃してるだけなら申し訳ないです)
ちなみに実機は持っていないので,純粋にUnity Editor上でシミュレータとして使う用途に関する話だけになります.
続きを読む「ロボットやろうぜ!- toio & Unity 作品動画コンテスト -」に出たよ
去年の話になるのですが,「ロボットやろうぜ!- toio & Unity 作品動画コンテスト -」というのがありまして,それに出品したものについてまとめまっす.
ついでにtoioをUnityで使うためのSDK「toio SDK for Unity」についても書こうかなという感じです.
ちなみに受賞とかは全然ダメでした😭😭
「ロボットやろうぜ!- toio & Unity 作品動画コンテスト -」について
は詳細略で.ここ見てください:https://toio.io/blog/detail/20200930-1.html
応募作品
出したのは「toioで人工ポテンシャル法をシミュレーションしてみる」というネタでした.
学生実験でやった内容を記憶から掘り出して,toioで人工ポテンシャル法をシミュレーションしてみたやで
— むぅー777 (@mu_777_) 2020年11月29日
残念ながら実機は持ってないのでUnity上でだけ..
長い動画はこっち:https://t.co/yvc7fyFoPh#toio #Unity #ロボやろ pic.twitter.com/Qc6IoYrqqj
このコンテスト自体は締め切りの1ヶ月前ぐらいから知ってたのですが,漠然と「何ができるかなぁ~色々できそうで意外と難しいなぁ~」とかウダウダ考えてたのですが,
- 「ロボットやろうぜ!」というタイトルだったのでちゃんとロボットっぽいことをしよう
- toioの「絶対位置を取得できる」という最強の特徴を活かそう
というところから,大学の学生実験でやった人工ポテンシャル法をtoioで実装しよう,と思い至りました
遊んでみる
こちらから遊べるようになってます!:
レポジトリはこちらです:
人工ポテンシャル法を使ったロボット制御について
別記事にまとめる予定です
記事を書きました!
toio SDKのTipsとかもろもろ
別記事にまとめる予定です
記事を書きました!:
- 「toio SDK for Unity」の座標系について - ひつじTips
- 「toio SDK for Unity」でCubeを車輪の角速度[rad/sec]で制御する方法 - ひつじTips
- 「toio SDK for Unity」でシミュレータとしてビルドする方法 - ひつじTips
おわりに
ちょっとあまりに記事書いてなかったので,あんま中身ないですがとりあえず公開しちゃいます.
今年はもうちょっとブログ書きたいものです
[Unity]アプリのウインドウハンドルを確実に取得する方法
このQiita記事にめっちゃちゃんとまとまっていて(@kiruroboさん,素晴らしい記事本当にありがとうございます!!!),本エントリで紹介する方法はほぼこの「方法4」ではあるんですが,この「方法4」ではうまくいかないところがあったのでなんとかしましたよ,というのが本エントリになります.
諸事情により,アプリがバックグラウンドにいた場合でもウインドウハンドルを取得したく,その場合 GetActiveWindow()
関数を使用するQiita記事内の「方法1」「方法2」が使えません.
「方法3」でもいいのですが,ちょっとQiita記事内でも挙げられてる「問題点」が厳しくパス,「方法5」もちょっとめんどくてパス,というので,「方法4」たどり着きました.
Qiita記事には「方法4」の実装まで書かれていなかったので,具体的な実装を明記しつつ,問題点とそれの回避方法までまとめます.
無駄に長いので,答えが欲しい方は「4. 実装」の方にとんでください~
- 方針
- 問題
- 問題の解決
- 実装
- 感想