ベストタイム
CoddyのUnityジャーニー「本格的なゲームを作る」セクションの一部。レッスン 53/56。
チャレンジ
中級最後のステップ:各レベルで自己ベストタイムを記録します。これまでのレッスンの内容はすべてそのまま使います。各レベルのHUDには右上にBestTextがあり、シーンではそれをFinishLineの新しいbestTextフィールドに設定します。
FinishLineで(using TMPro;を追加します):
- Inspectorで設定する
TMP_Text型のフィールドbestTextと、プレイ時間を表すfloatを用意します。プレイ時間は毎フレームTime.deltaTimeずつ増えます。 - 各レベルの自己ベストは、それぞれのPlayerPrefsキーに保存します。キーは
BestTime_とレベル名を組み合わせたもので、たとえばBestTime_Level1です。 Startで、そのレベルに保存された自己ベストを小数第1位まで表示します。自己ベストがまだない場合はBest: none、ある場合はBest: 12.4 sのように表示します。- プレイヤーがゴールを通過したら、次のレベルが読み込まれる前に、そのレベルの自己ベストがまだない場合、または今回のプレイ時間が自己ベストを更新した場合に、今回のプレイ時間を保存します。より遅いプレイでは自己ベストは変わりません。
Playを押してタイムを記録し、次にその記録の更新を試してから、Checkを押してください。
自分で試してみよう
using UnityEngine;
using UnityEngine.SceneManagement;
public class FinishLine : MonoBehaviour
{
void OnTriggerEnter(Collider other)
{
if (other.GetComponent<Player>() == null) return;
Scene level = SceneManager.GetActiveScene();
Debug.Log(level.name + " complete!");
int next = level.buildIndex + 1;
if (next >= SceneManager.sceneCountInBuildSettings)
{
next = 0;
}
SceneManager.LoadScene(next);
}
}