Unity游戏开发:如何存储玩家最佳用时(最高分)
无需按钮触发的Unity最佳用时自动存储实现方案
首先将原本写在按钮点击事件中的存储逻辑抽为可主动调用的公共方法,示例代码如下:
/// <summary> /// 对比并存储最佳用时 /// </summary> /// <param name="currentFinishTime">玩家本次完成对局/关卡的最终用时</param> public void SaveBestTime(float currentFinishTime) { // 读取本地已存储的最佳用时,未存储过的话默认返回99999秒(可根据游戏时长上限自行调整) float savedBestTime = PlayerPrefs.GetFloat("BestRecord", 99999f); // 本次用时比历史最佳更短才更新存储 if (currentFinishTime < savedBestTime) { PlayerPrefs.SetFloat("BestRecord", currentFinishTime); // 手动触发写入磁盘,避免应用意外退出导致数据丢失 PlayerPrefs.Save(); } }
之后选择符合业务逻辑的触发节点直接调用上述方法即可,无需绑定按钮:
- 关卡/对局完成触发:在玩家达成通关条件的逻辑节点(比如冲过终点判定、收集完全部道具、击杀最终Boss的判定代码段)直接调用该方法,传入当前计时器的最终用时数值即可,这是最推荐的触发方式,仅在玩家有效完成对局时才会更新最佳记录。
- 退出场景/应用关闭触发:如果需要兼容玩家中途退出也记录当前有效成绩的需求,可在
OnDisable()、OnApplicationQuit()等Unity生命周期函数中调用该方法。 - 实时检测触发(非必要不推荐,有额外性能消耗):如果需要实时提示玩家当前用时突破记录时立刻同步存储,可在计时器的更新逻辑(如Update())中实时比对当前用时和已存储的最佳用时,满足条件就自动存储,适合需要实时弹出新纪录提示的场景使用。
注意:调用存储方法时需确保传入的当前用时是已经停止计时的最终数值,避免未结束对局就存储错误的问题;同时不要频繁调用
PlayerPrefs.Save(),尽量仅在关键节点调用以减少不必要的IO消耗。
内容的提问来源于stack exchange,提问作者vonicsonic
相关产品推荐
相关产品推荐

