2014年10月24日

ゲームのアップグレード (1) | ジャイロに対応してみよう!

今回は、さらにゲームの大幅な改良を始めて見たいなと思います。

ま、シンプルなゲームなんだけど、せっかくなんで、ジャイロも使って、ゲーム世界をもっと広く使ってみたいな、と思います。


ひとまずさらなる仕様変更です
さて、ずいぶん前の思いつきなんですが、静止した1画面だけのゲームよりも、若干左右にスクロールする方が、もうちょいゲームに深みがでるかな?なんて思ってたんですよね。
で、どうスクロールするか!なんですが、ボタンにタッチしてスクロール、なんてのも出来ますが、やっぱり、デバイスの傾きで動かすほうが、ぜんぜん直感的ですよね!

なんで、単純に、デバイスを右に傾けたら右にスクロール。左に傾けたら左にスクロール。って感じにしたいと思います。
う〜ん。でも、この変更で、画面外の隕石の警告とか、レーダーみたいな画面とかも作んなきゃいけないかなぁ〜。
無いと、不親切だもんなぁ〜...


まずはジャイロの値Getを実装
さて、この辺の機能も、ちゃんと Input クラスに実装されてるみたいですね!
さすが Unity様!抜かりはありません!!

じゃ、実装していってみましょう!
って、そんなやる事無いんですけどね。ホントに。
Screen Shot 2014-10-15 at 1.49.09 PM.png

入力を取ってくるだけなら2行ですね!
318行目を書く事によって、デバイスがどっちに向いていても(ホームボタンが右か左か関係なく)同じ値を返してくれるんで、処理を共通化できるんですよね。
で、 Gyroscope が持ってる向きの情報はクォータニオンみたいなんで、オイラー角に変換して保存してます。

ホントにこれだけ!
じゃ、実装いってみよー!


デバイスの向きを検出してゲームに反映
ひとまずテストと言う事で、デバイスの傾きに応じて地球を回転させる処理を書いてみましたよ。
Screen Shot 2014-10-15 at 2.13.41 PM.png
これは最近全然触ってなかった Earth クラスの Update() ですね。
15行目でさっきのオイラー角のZ軸の角度を取得。(ハンドルみたいに持つと必要なのはZ軸ですよね。)
17行目でゲームに対してまっすぐ持った時の値、270を引いてます。
ここから、傾きが一定以下だったら動かさない!
Screen Shot 2014-10-15 at 2.14.28 PM.png
24行目はテスト用に回転0にしてるけど、あんまし関係ない。

で、ここの28〜33行目。
Screen Shot 2014-10-15 at 2.14.35 PM.png
ここで、ゲームで検出したい最小と最大の傾きを使って、今の傾きの傾き率を0〜1で求めて、回転速度に反映して、地球を回転させる。
33行目は地球に対しての固有処理なんで、あんまし関係ないかも。
もし単純な速度変化が嫌だったら、32行目の最終的なrateに対して、さらに曲線の加速度を与えてもいいし。

ま、今回は単純な変化でいいかな?

さて、仕上がりは....?
ま、大丈夫ですよね。
ちなみにこの動画は、ちょっと調整を入れた後なんだけど、調整値は、こんな感じ。
Screen Shot 2014-10-15 at 2.25.17 PM.png
ま、そんな悪くないよね...?

あっ!しまった!3GSってジャイロないじゃん!
う〜ん。デバイスの型かOSでジャイロの有無でゲームのモード変えなきゃ駄目?ひょっとして...?

またやる事増えたなぁ〜...

        にほんブログ村 ゲームブログ×PlayNCBlogへ
 初めてみました。よかったらクリックお願いね ♪


地球は回る.....


ついでに映像もね
posted by やまけん at 12:43| Comment(0) | Unity | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: