问题描述
我在处理一些要发送给的值时遇到问题。
问题是我希望退出游戏后所花费的时间总价值。当玩家登录时,该值乘以金钱。因此,如果玩家在30分钟后进行连接,那么玩家将获得30分钟的价值乘以钱。使用JSON序列化,公共静态和PlayerPrefs,但没有任何作用。
PlayerPrefs和序列化似乎可以正常工作,但是它只记录存储前的存储时间。例如,如果播放器在5秒然后20秒后连接,则第二次获得5秒而不是20秒的值。
脚本A:
public SaveManager save_manager;
public DateTime new_time,old_time;
public TimeSpan gold_reward_time;
public float current_boostValue_gameplay;
private float minutes_booster_gameplay;
private float seconds_booster_gameplay;
private bool is_stopped_booster_gameplay;
private void Start()
{
new_time = DateTime.Now;
old_time = DateTime.Parse(PlayerPrefs.GetString("timeData"));
gold_reward_time = new_time - old_time;
Get_sum_of_time_reward();
}
private void OnApplicationQuit()
{
Application.Quit();
Sum_of_time_passed();
PlayerPrefs.SetString("timeData",DateTime.Now.ToString());
}
public void Get_sum_of_time_reward()
{
double time_hour = Convert.Todouble(gold_reward_time.Hours);
double time_minutes = Convert.Todouble(gold_reward_time.Minutes);
double time_seconds = Convert.Todouble(gold_reward_time.Seconds);
double sum_of_time_values = time_hour + time_minutes + time_seconds;
PlayerPrefs.SetString("totalRewardTime",sum_of_time_values.ToString());
}
脚本B:
public void Calculate_time_as_gold()
{
string load_resident_menu_data = File.ReadAllText(Application.persistentDataPath + "/resident_menu_data.json");
resident_data = Json_helper.FromJson<Resident_menu_data>(load_resident_menu_data);
string load_automation_menu_data = File.ReadAllText(Application.persistentDataPath + "/automation_menu_data.json");
automation_data = Json_helper.FromJson<Automation_menu_data>(load_automation_menu_data);
sum_of_all_per_sec = resident_data[0].resident_gold_per_sec + automation_data[0].automation_gold_per_sec;
sum_of_time_passed = double.Parse(PlayerPrefs.GetString("totalRewardTime"));
result_reward_after_time = sum_of_all_per_sec * sum_of_time_passed;
Debug.Log("total value 1 = " + double.Parse(PlayerPrefs.GetString("RewardTimeValue")));
reward_gold_text.text = Math.Truncate(result_reward_after_time).ToString();
}
解决方法
- PlayerPrefs.Save说,您不需要在OnApplicationQuit中手动调用它。好。
- 最后在
Application.Quit();
中呼叫OnApplicationQuit
。否则,我猜您的更改可能无法保存。 - 如果您这样节省时间:
double sum_of_time_values = time_hour + time_minutes + time_seconds;
的20分钟看起来不会和20秒一样吗? 为什么不简单地将Update()中的Time.deltaTime
添加到变量?时间将以秒为单位。