趣味のゲーム開発 vol.28

前回の投稿から少し間が開いてしまいました。
今回は引き続き修正からやっていきます。
プレイヤーが前方に移動しているときに、弾丸がかき消されてしまう不具合ですね。

と思ったのですが・・・現象が再現できませんでした。
前回は色々アプリケーションを同時起動しながら制作していたので、メモリ不足になっていたのでしょうか。
私の環境はmacなので、アクティビティモニタで監視したところ、どうやらCPU負荷がかかってしまっていたようです。
・・・動画流しながらはやはり無理ですかね・・・

いい機会なので、ゲーム内でフレームレートを表示できるようにしたいと思います。
デバッグなどでも使えますしね。

参考ページ

DisplayManagerのクラスを作成したので、そちらにFPS表示処理を追加しておきます。
一応、デバッグのみ表示できるように、GameManagerクラスにフラグを用意し、そちらを参照しつつ処理を行います。

大体参考ページ様の内容を真似して実装しましたが、ちょっと手を加えて、FPSの値に応じて文字色を変えるように変更しました。

/// <summary>
   /// FPS計測
   /// </summary>
   private void CountFPS()
   {
       flameCount++;
       float time = Time.realtimeSinceStartup - prevTime;
       // 0.5秒ごとに算出
       if (time > 0.5f)
       {
           fps = flameCount / time;
           flameCount = 0;
           prevTime = Time.realtimeSinceStartup;
       }
   }
   /// <summary>
   /// FPS表示
   /// </summary>
   private void OnGUI()
   {
       // debug
       if (GManager.instance.isDebug)
       {
           if (fps < 40.0f)
           {
               GUI.color = Color.red;
           }
           else if (fps < 60.0f)
           {
               GUI.color = Color.yellow;
           }
           else
           {
               GUI.color = Color.green;
           }
           GUILayout.Label("FPS:" + fps.ToString());
       }
   }

これをUpdateで呼んであげる感じですね。

FPSを表示できるようになりましたが、根本的な解決にはなっていません。
しかし、ここで止まっていても埒が明かないので、とりあえず先に進む事にします。
後々、最適化について勉強して調整しましょう。

引き続きスクリプトの整理です。
現在、プレイヤーと敵の接触判定にObjectCollitionというクラスを介して処理しています。
これが感覚的にピンと来ないので、変更します。

プレイヤーの子オブジェクトを追加して、Colliderを追加します。
そして、足元判定のみ行うクラスを作成しアタッチすることで、こちらのコライダーを通じて接触判定するよう修正しました。

まあ、私の感覚的にはこちらのほうがしっくりくるかなぁ・・・
なにか問題になったりするのかなぁ・・・

とりあえず今日はここまで。
次回は落ちる床が「プレイヤーが触れた」だけで落ちてしまう問題を解決したいと思います。

この記事が気に入ったらサポートをしてみませんか?