Avoid The Walls 開発日記 2

今日は昼から飲んだくれ、夕方頃帰ってベッドにぶっ倒れ、22時頃に目を覚ましてからの作業。良い休日であった。

3月12日

今日やったことは以下。

  • スタート時の挙動を一部追加
  • デバッグ用の FPS カウンターを追加

スタート時の挙動を一部追加

ヘッドセットを被ってもらってる間に、その揺れで壁にぶつかってゲームオーバしたのでは面白くありません。そのためユーザー操作でゲームをスタートできる機構を追加します。

仕組みとしては、ゲームスタート時に棒を動かすスクリプトを一時的に無効化し、ユーザー操作で再度有効化できるようにします。

まず、昨日の BarController.cs の Start メソッドに次の1行を追加します。

これで、ゲーム開始時に、棒を動かすスクリプト自分自身を一時的に無効化できます。ちなみに、正式には this.enabled と書くのですが、this(スクリプト自身)は省略できる仕組みになっています。

次に、メインカメラ(プレーヤー)から再度有効化する仕組みを作ります。

仕組みとしては、ユーザーが棒を注視した際に棒を動かせるようにします。見ることで棒を掴む、というようなイメージです。

これには Raycast という機能を使用します。

Raycast は、ある地点から特定の方向へ無限に直線(Ray)を伸ばし、ぶつかった物(コライダー)を取得する機能です。直線の長さも指定できますが、余分なコードを省くため、今回は気にしない事にします。(と言っても2文字しか変わらないようですが)

以上のコードで、「Bar」というタグのついたオブジェクトが視界の中央に来た時、棒の制御を有効化できます。本当は少しの時間注視させたいんですが、それはまた今度。

あと、少しでも処理を軽量化するため、制御有効化と同時に自身を無効化しています。大した処理じゃないし問題ない程度だろうけど、モバイルだし、無駄な処理が毎フレーム走ってるのはキモチワルイので。

デバッグ用の FPS カウンターを追加

VR において、フレームレートの確保は最重要課題の一つです。最大速度を少しでも割り込めば、違和感となって乗り物酔いと同等の気持ち悪さを人に与えてしまいます。(もちろん個人差もあるし、他にも酔う要因は様々)

とは言え、何はともあれまずはフレームレートを見なければいけません。Unity には、Unity Profiler というパフォーマンス測定の機能があり、実機の状況すら確認できるスグレモノですが、少なくとも Gear VR と Galaxy S6 においては、プロファイリング自体の負荷でめちゃくちゃパフォーマンスが下がります。何も置かないまっさらのシーンでも30 FPS を割り込みます。Gear VR は60で動作する必要があるので、オハナシになりません。

自分がなにか間違えているのかもしれませんが…どうにも出来なかったので、とりあえずゲーム内に FPS 表示の仕組みを自分で実装します。

仕組みとしては、毎秒1秒間に Update 関数が実行された回数を計測します。これでほぼ確実な計測が可能なようです。

こちらを参考にさせていただきました。

シーンにテキストを配置し、これを以下のスクリプトで毎秒更新します。

これで毎秒の FPS を見られるようになりました。

2016-03-13 07.26.02

この手法の問題として、毎秒更新なので重い瞬間がいつなのかわかりにくい点があります。でもまあ今は問題になっていないので完了。

前回はこちら

次回はこちら

Avoid The Walls 開発日記 2” への2件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です