趣味のゲーム開発 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を追加します。
そして、足元判定のみ行うクラスを作成しアタッチすることで、こちらのコライダーを通じて接触判定するよう修正しました。
まあ、私の感覚的にはこちらのほうがしっくりくるかなぁ・・・
なにか問題になったりするのかなぁ・・・
とりあえず今日はここまで。
次回は落ちる床が「プレイヤーが触れた」だけで落ちてしまう問題を解決したいと思います。
この記事が気に入ったらサポートをしてみませんか?