- 投稿日:2020-01-14T21:48:09+09:00
【Unity】 角速度(ジャイロ)センサーの使い方
注意
スマホから取得する方法になります。PC本体のセンサー情報を取得にはこの方法だと無理です。
UnityリファレンスのURL
リファレンスを読めば分かる人はコチラ
- https://docs.unity3d.com/ja/2019.3/ScriptReference/Gyroscope-rotationRate.html
- https://docs.unity3d.com/ja/2019.3/ScriptReference/Gyroscope-rotationRateUnbiased.html
以降は私の記事から情報を得る人向けです(忘れやすい私でも分かるように書いています)1. 角速度の取得方法(Part1)
最初にジャイロセンサーを有効化します
// Start is called before the first frame update void Start() { Input.gyro.enabled = true; }
有効化後に角速度を取得します - 単位 : Rad/Sec
(念のためロール・ピッチ・ヨー方向が合っているかは実機で確認した方が良いです。)private void UpdateGyroData() { double pitch = Input.gyro.rotationRate.x; double yaw = Input.gyro.rotationRate.y; double roll = Input.gyro.rotationRate.z; }rotationRateは角速度センサーから取得した生のデータです。
なぜ説明しているのかを理解したい方はPart2を読みましょう。2. 角速度の取得方法(Part2)
Part2ではrotationRateUnbiasedを説明します。
より正確な値を取得する人向けに使用が推奨されます。
rotationRateで取得すると自動車がドリフトしている時の値が正しくないケースがあります。
ドリフト時の様に誤差が生まれやすい環境で使用する場合に使用が推奨されています。
(ハードウエアがそれらを考慮した設計をされていればrotationRateで取得しても問題ありません)
最初にジャイロセンサーを有効化します// Start is called before the first frame update void Start() { Input.gyro.enabled = true; }
有効化後に角速度を取得します - 単位 : rad/secprivate void UpdateGyroData() { double pitch = Input.gyro.rotationRateUnbiased.x; double yaw = Input.gyro.rotationRateUnbiased.y; double roll = Input.gyro.rotationRateUnbiased.z; }3. Rad/Sec から Deg/Sec に変換する
ラジアンより度の方が一般的なので変換する事が多いと思います。
メモ程度で記載します。参考になる資料は[参考]欄に記載しておきます。private void UpdateGyroData() { double pitch = (Input.gyro.rotationRate.x * 180) / Mathf.PI; double yaw = (Input.gyro.rotationRate.y * 180) / Mathf.PI; double roll = (Input.gyro.rotationRate.z * 180) / Mathf.PI; }
Unityの関数を使用して変換する事も出来ます。
今回はdouble型ですがfloat型の時に使用するといいと思います。private void UpdateGyroData() { double pitch = Input.gyro.rotationRate.x * Mathf.Rad2Deg; double yaw = Input.gyro.rotationRate.y * Mathf.Rad2Deg; double roll = Input.gyro.rotationRate.z * Mathf.Rad2Deg; }
もっといい方法(アドバイス)や感想があったらコメントしてください。
おいしいと思うお店の情報もお待ちしております。[参考]
Unity専用関数を使用: https://docs.unity3d.com/ja/current/ScriptReference/Mathf.Rad2Deg.html
ラジアンと度の概念 : https://juken-mikata.net/how-to/mathematics/radian.html
- 投稿日:2020-01-14T17:58:51+09:00
手動で Flutter Android アプリに hot reload 命令を送るメモ(2020 年 1 月 14 日時点)
背景
Termux + Flutter + dart ffi で .so リロード対応し Android C/C++ + GUI アプリ開発を効率化するメモ
https://qiita.com/syoyo/items/21ba3174fe5a668f2960などで, 特定のファイルで変更があったときに Flutter に hot reload 命令を送りたい.
(VSCode では, .dart ファイルが変更されたときだけ reload)方法
flutter run --machineで Flutter アプリを起動します.
これにより, stdin/stdout で JSON-RPC で通信できます.https://github.com/flutter/flutter/blob/master/packages/flutter_tools/doc/daemon.md
appIdは event message(stdout への出力)で取得できます.[{"method":"app.restart", "id": 0, "params" : { "appId" : "e0c12cae-e4f3-47a9-8447-2b250bcc4af9", "fullRestart": true}}]というメッセージを stdin(or
/proc/<pid>/fd/0)に書き込むと hot reload できるはずです.
idは JSON-RPC の id なので, 任意の番号を指定します.赤い画面になったら再度 flutter run が必要
赤い画面の致命的なエラーがでたら,
app.restart命令はfullRestartを true にしてもアプリは再起動しません. 再度flutter run --machineする必要があります.flutter attach は使えない
たとえば VSCode で実行しておいて, 外部プログラムでリロードの命令を送りたいですよね.
しかし, flutter attach では,
app.restart命令が使えません. JSON-RPC で命令を送ると NoSuchMethodError が帰ってきます.したがって,
flutter runする以外に方法がありません.VSCode と連携したいが...
VSCode の dart extension では, pid や appId を出してくれません.
pid と appId がわかれば, 外部から/proc/<pid>/fd/0で命令を送れるはずですが... なんらかのオプションで情報だしてくれるかもですが, ソースコードの改変が必要になるかもです.現状使いにくい...
flutter run では, stdin/stdout で入力と出力を受け付けます. http などはないっぽそうです.
(--overvatory-portは, デバッグやプロファイリング用で,app.restartメソッドは使えない)python などスクリプトを使って, popen などと組み合わせないとめんどいです.
(Linux/macOS だったら socat でソケットと stdin/stdout を繋ぐというてもあるかも?)いずれにせよ処理を自動化するには stdout をパースしたりとめんどいで, 使いにくいです.
なんとか VSCode と連携したい...
ファイル変更があったときに vscode のコマンドを実行できる
https://github.com/BouKiCHi/vscode-watch-run
あたりと連携するか, VSCode Dart extension を拡張することになるでしょうか...
dart.previewHotReloadOnSaveWatcher
何かしらダミーの .dart ファイルを作っておき, Dart flutter extension v3.7.0 以降で
dart.previewHotReloadOnSaveWatcherを true にする方法が考えられます.https://github.com/Dart-Code/Dart-Code/issues/2074
このフラッグが true ですと, (VSCode の?)file watcher で変更を検知しますので, VSCode の外で .dart ファイルを編集した場合でも hot reload が実行されます!
![]()
(2019 年 11 月 15 日とフラッグ追加は最近ですね)最近の VSCode ですと File -> Preferences -> Setting -> Extensions で
Dart: Preview Hot Reload On Save Watcherに GUI でチェックをいれるだけなので楽ですね.参考
VSCode dart extension(Flutter の機能は dart plugin に入っていて, Flutter repo は実質空です).
https://github.com/Dart-Code/Dart-Code
TODO
- VSCode dart extension を改造して, pid, appId を抜き出したり, 特定のフォルダ or file の watch ができるようにする.
- .so など, 非 .dart ファイルが変更されたときは, カスタムの shell コマンドを実行できるようにする
- 投稿日:2020-01-14T17:22:16+09:00
[Android] MySQLに接続する(未完)
JDBCダウンロード
AndroidからDBに直接接続できないので、JDBCドライバが必要になる。
MySQLインストール時にしなかった方は、こちらのConnecter/Jというリンクからダウンロード・インストールできる。
https://dev.mysql.com/downloads/C:\Program Files (x86)\MySQL\Connector J 8.0の階層にmysql-connector-java-8.0.18.jarがあるので、これをビルドパスに追加する。
ビルドパス設定
jarファイルをapp/libsの下に追加。
さらにbuild.gradleに以下を追加。dependencies { compile files('libs/mysql-connector-java-8.0.18.jar) }その後、おそらく同期ボタンが出てくるので同期する。
・参考URL
https://qiita.com/icchi_h/items/8ce738ce8511ef69c799パーミッション
ネットワークを使うのでパーミッションが必要。以下を追加。
<manifest> <uses-permission android:name="android.permission.INTERNET" /> </manifest>MySQLへの接続プログラム
MainActivity.java
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); try { //データベースに接続 Connection con = MySqlConnect.getConnection(); //ステートメントオブジェクトを作成 Statement stmt = (Statement) con.createStatement(); //SQL String mySql = "select date from table;"; ResultSet rs = stmt.executeQuery(mySql); while(rs.next()) { Toast.makeText(getApplicationContext(), rs.getString("date"), Toast.LENGTH_LONG).show(); } //オブジェクトを解放 rs.close(); stmt.close(); con.close(); } catch (Exception e) { }MySqlConnect.java
class MySqlConnect{ static Connection getConnection() throws Exception { //JDBCドライバのロード Class.forName("com.mysql.jdbc.Driver"); //各設定 String url = "jdbc:mysql://ホスト名/db名"; String user = "user_name"; String pass = "password"; //データベースに接続 Connection con = DriverManager.getConnection(url,user,pass); return con; } }・参考URL
https://qiita.com/ks_513/items/0b286c4932a8e36c672e困ったところ
現在以下のエラーが発生しており、未完状態である。
・ClassLoader referenced unknown path
・java.lang.UnsupportedOperationExceptionビルドパスの設定、gradleファイルの見直しなど試してみたが突破できなかった。
感想
簡単にできると思っていたが、意外と時間がかかる。
様々なサイトを見たが、非同期処理についてはほとんど書かれていなかったので関係ないとみている。
しかしhttps://qiita.com/ks_513/items/0b286c4932a8e36c672e
の一番下に非同期処理したほうが良いといった旨の記述がされているので、試す価値はありそうだ。
- 投稿日:2020-01-14T17:13:19+09:00
TextViewのテキストに下線を引くExtension
よく忘れるのでメモ。個人的にはハイパーリンクっぽい表現をしたいとき以外に使ったことはないです。
SpannableStringを使います。fun TextView.drawUnderline() { text = SpannableString(text).apply { setSpan(UnderlineSpan(), 0, length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) } }※2020/1/15 追記
HtmlCompatを使った方が楽そう。fun TextView.drawUnderline() { text = HtmlCompat.fromHtml("<u>$text</u>", HtmlCompat.FROM_HTML_MODE_COMPACT) }参考
- 投稿日:2020-01-14T12:27:17+09:00
Daggerの依存関係を視覚化してくれるプラグインScabbardを試してみる
はじめに
2019年12月に公開されたばかりのScabbardというプラグインを試してみたのでやり方を投稿します。
Scabbardとは?
Daggerの依存関係を画像化して表示してくれるというプラグインです。
導入
Getting Startedを見ながら導入していきます。
環境は以下になります。Mac OS 10.15.2 (Catalina)
Android Studio 3.5.3リポジトリはDagger2+Retrofit2(+OkHttp3)+ViewModelのDIの最小構成[その1]のリポジトリを使用します。
1. GraphVizをbrew installする
GraphVizというソフトが必須のようなのでターミナルからインストールします。
brew install graphvizHomebrewのインストール方法は割愛します。
Linux、Windowsの場合のインストール方法はこちらを参照してください。2. build.gradleを設定する
プロジェクト単位のbuild.gradleに以下を追加します。
build.gradlebuildscript { repositories { ... maven { url "https://plugins.gradle.org/m2/" // 追加 } } dependencies { ... classpath "gradle.plugin.dev.arunkumar:scabbard-gradle-plugin:0.1.0" // 追加 } }また、モジュール単位のbuild.gradleに
apply: pluginを追加し、DataBindingのようにenabled trueを記述します。build.gradleapply plugin: "scabbard.gradle" ... scabbard { enabled true }ここまででビルド時にDaggerコンポーネントの依存関係を図示したpngファイルを生成してくれるようになります。
格納先は
{project_root}/app/build/tmp/kapt3/classes...以下です。3. IDEにプラグインをインストールする
IDE上に短剣アイコンを表示させるためにプラグインをインストールします。
このアイコンをクリックすると2. で生成したpngをIDE上で表示してくれるようになります。
Android Studio>Preferences...>Plugins>MarketPlace
にて、「Scabbard」を検索します。
「Install」を選択してプラグインをインストールします。
Restart IDEと表示されるのでIDEを再起動します。プロジェクトをビルドし、
AppComponent.ktを表示すると、インターフェースの横に短剣アイコンが追加されているのが分かります。短剣アイコンをクリックすると、以下のように依存関係を表示してくれます。
以上で完了です!
おわりに
Daggerの依存関係を記述をミスって「Missing Binding」エラーが表示されると、どこで間違えているか追うのが大変ですが、このプラグインを使うと依存関係が視覚化されるので解決しやすくなるかなと思いました。
まだv0.1.0との事なので、今後の更新にも期待です。
- 投稿日:2020-01-14T11:30:06+09:00
【Android Studio】NDKデバッグ変数表示のHEX化
アプリではHEX表示出来てNDKでは出来ない・・・。んな訳ない!
でも、ググっても出てこない・・・
(しかたなく)Google Issue Trackerで問い合わせ!
⇒ 無事解決できた!というお話。
Googleからの回答
This is something we inherit from CLion. You can turn on hex view following this instruction:
https://www.jetbrains.com/help/clion/using-hexadecimal-view.html⇒ CLionベースなので、こんな感じで設定変更したらHEX表示できるよ!との回答。
Enable hexadecimal view (少しアレンジ)
1.
In Find Action dialog (Shift+Ctrl+A on Linux/Windows, ⇧⌘A on macOS) type Registry; open Registry, type cidr.debugger.value.numberFormatting.hex (or just hex) to search for the setting and turn it on.
2.
Go to Settings / Preferences | Build, Execution, Deployment | Debugger | Data Views | C/C++ and set the checkbox Show hex values for numbers. Choose to have hexadecimal values displayed instead or alongside the original values:
まとめ
Currently, this feature is experimental. 的な事もあるので、開発元への問い合わせ。大事。
以上











