2013年6月1日土曜日

ボールを浮かしたい。

Unityで遊んでます。

黄本のサンプルにある迷路を作って思ったんです。
転がすだけじゃ物足りないなぁって。

飛んだり跳ねたりさせたい。
スマホを水平に持って急上昇→急停止させたときにボールが浮くような感じ。


どうやるんだろうなぁ。

ここで書いたようにInput.accelerationを使えば傾きが取れるのは分かった。
でもaccelerationって言うからには加速度を取ってるんだよね?

調べてみた。

Input.acceleration

→公式リファレンス
3次元空間でのデバイスの加速度を取得します。

端末を机に置いた状態でX,Yは0近くでZが-1だから…
もしかして単位は重力加速度かな?

ぐぐったら出てきた。
http://sumaho0.blog.fc2.com/blog-entry-6.html
この中に「1は1Gを意味します。」って
まじかーー。

accelerationで傾き取るってどういうことよって思ってたけど疑問が氷解した。
動いてないから加速度0でしょ?って思ってたけど
重力方向の単位ベクトルが取得されてるってことね。

重力も加速度!たしかに!!

じゃあどうしよう

現在の仕様は(本のまま)

  • 画面いっぱいにはコースを表示する→OK
  • 端末を傾けてもコースの表示は変わらない→OK
  • 端末を傾けたとき重力を傾ける→OK
追加したい内容
  • 端末上昇→停止でボールを浮かせる
加速度の変化から速度を計算してボールに初速を与えればいいよね。
って言うのは簡単だけど全然作れる気がしない。

んー。
  1. accelerationで単位ベクトルが取れてる状態=端末が動いてない状態
  2. accelerationの変化 - (重力方向の)単位ベクトル = 本体移動による加速度
  3. それをさらに微分して一定の変化があるときに適当な初速をボールに与える
って感じ??
傾き変化による加速度変化と本体の移動による加速度変化をどうやって分離するかが問題だと思うけど…

頭爆発しそう。とりあえずやってみよう。

続きはまた。


Unity系記事まとめ

スポンサーリンク

Related Posts Plugin for WordPress, Blogger...