加速度センサーを使ってゲームを作ってみたい

Unity

加速度センサーを使ってゲームを作ってみたい

加速度センサーの取得について

AndroidやiPhoneのほとんどの端末には
加速度センサーが搭載されています。

加速度センサーとはスマホに対して
衝撃や振動などを検知するセンサーです。

ものすごいザックリと原理を説明すると
この加速度センサーにはバネがついていて
スマホが動くことにより、このバネに力が働きます。
測定装置がその力を検出することによって
どの方向にどのくらいの力が働いているかを測定できるようです。
(バネ以外で測定する装置もあるようです)

力を測定できる方向は3方向です。(X,Y,Z方向)
具体的にX座標はスマホのどの方向を向いているのか?
については以下の図のようなイメージです。
(Z軸が分かりにくいかもしれませんがスマホを突き抜ける方向です)

+(プラス)と -(マイナス)の方向は違うかもしれませんが
軸はどれも同じようです。

机の上にスマホを置いた状態だと何も力が掛かっていないように
思えますが、実はひとつだけ力が掛かっています。
それが重力です。

つまり机の上に置いた状態では以下のようにZ座標に重力がかかるはずです。
(持ち方によって符号は逆転します)
X座標:0
Y座標:0
Z座標:-9.8[m/s^2]

縦持ちした場合は以下ですね。
X座標:0
Y座標:-9.8[m/s^2]
Z座標:0

同じ考えで横持ちは以下になりますね
X座標:-9.8[m/s^2]
Y座標:0
Z座標:0

Unityで加速度センサーの情報を得るには

Input.accelerationで取得できます。
Input.accelerationはVector3型です。
Input.acceleration.xでX軸方向の加速度を取得できます。
y,z軸についても同様ですね。
とっても簡単に取得できます。

加速度から速度、変位の算出は難しいらしい…

加速度を取得するだけでは
あんまり使い道は無いのかもしれませんが
加速度を積分すると速度が算出できて
速度を積分すると変位(距離)が算出できます。
これを出してやると用途が広がりそうですね。
…って思っていたのですが、これはどうも難しいらしいです。

理由は色々あるようなのですが
この加速度は瞬間の加速度を取得しているため
誤差が無視できないほど大きくなってしまうのが難しい原因としてあるようです。

瞬間の加速度なので、瞬間の時間Δtとそのときの加速度で
速度を出して、さらに変位を出すと実際の変位とどうしても
誤差が出てしまうようです。
しかもその誤差がバカにならない大きさになってしまう…。

なので加速度の使い方としては
速度と変位を出すというよりは
加速度をそのまま使い、どの方向にどのくらい力が働いたのかを
利用するつもりで考えたほうがよさそうです。

そうすると用途が限られてくるんですが仕方がないですね。

スクワットアプリのロジック

パッと思いついたのがこのスクワットアプリです。
ってかそのくらいしか思いつきませんでした。
当然ですけど万歩計とか今世の中に出てるようなものしか
思いつかないですね…

ってことでスクワットアプリを作るならどうするか
以下に簡単なロジックを記載してみました。

一番よく分からなかったのが
加速度から屈み終わりと立ち終わりをどう判定するか?
ですね。

①スクワットスタートボタン押下時の処理概要

  1. 重力の方向を定める
    絶対値の一番大きい軸方向を重力方向とする
  2. スタート時の加速度(重力)を基準値として保存する

②スタート後の処理
1.屈み終わった判定
閾値以上の下方向への加速度が一定時間以上続いたら屈んだと判定する

2.立ち終わった判定
閾値以上の上方向への加速度が一定時間以上続いたら立ち終わったと判定する

屈んだ・立った状態の判定 屈み終わり際で減速することにより
下方向に力が加わる
立ち上がり際で減速することにより上方向に力が加わる

なぜ屈み終わり際に下方向に力が掛かり
立ち上がり際で上方向に力が掛かるのか?
っていうのが私はよく分かりませんでしたが
同じ疑問を持つ方のために車に乗っている時のことを
イメージすれば分かりやすいかと思います。

車が止まっている状態から動き出す(加速する)ときは
座席の後ろ方向に力を感じますよね。
逆に動いているときにブレーキをかけて車を止めるときには
進行方向に力を受けてフロントガラスにぶつかりそうになります。

今回は屈み終わり際・立ち上がり際どちらも減速時の話なので
進行方向に力を受けるんです。

かがんだ、立ったを検出できれば
スクワットアプリの大部分は完成できたようなもんです!

Photo by Meghan Holmes on Unsplash

おわりに

いかがでしたでしょうか?
スマホの加速度を取得して何かゲームを
作ることが出来るってよくよく考えたらすごいですよね!

現実世界での情報が得られる訳なので
AR(Augmented Reality):拡張現実用のゲームなども
作ることができます。

これからはAR用ゲームが多く世の中に出てくるのではないかと期待しています。

タイトルとURLをコピーしました