首页 > 解决方案 > 浮动变量没有保存到 playerprefs 我如何修复这个 Unity?

问题描述

所以我试图保存浮点变量cors.Destroyers每次我的玩家与硬币碰撞时我将它设为= 1然后我确保当我单击KEY S时它应该保存到我的播放器预制中但是当我重新启动时游戏由于某种原因它回到了 0我一直在尝试修复这个问题,但我仍然不确定为什么它根本没有保存,但是当我尝试使我的变量静态时它可以工作但我没有'不希望它是一个静态变量我希望它在没有静态变量的情况下工作以某种方式非常感谢任何帮助

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityStandardAssets.CrossPlatformInput;
using UnityEngine.UI;
using TMPro;
public class savegameprogress2 : MonoBehaviour
{

    public COINS cors;

    private void Start()
    {
        LoadGame();
        //Debug.Log(COINS.gamecoin);
        Debug.Log(cors.Destroyers);
    }
    void Update()
    {


        if (Input.GetKeyDown(KeyCode.S))
        {
        SaveGame();

        }
    }
    public void SaveGame()
    {
        PlayerPrefs.SetFloat("mainmoney", COINS.gamecoin );
        PlayerPrefs.SetFloat("destroy", cors.Destroyers);
        PlayerPrefs.Save();
        Debug.Log("Game data saved!");
    }
    void LoadGame()
    {
        if (PlayerPrefs.HasKey("SavedInteger"))
        {
            //save for scene 2
            COINS.gamecoin = PlayerPrefs.GetFloat("mainmoney");
            cors.Destroyers = PlayerPrefs.GetFloat("destroy");
        }
        else
            Debug.LogError("There is no save data!");
    }

标签: c#unity3d

解决方案


对代码进行以下调整:

  • 在 start 方法中,使用 HasKey 方法检查播放器首选项中是否存在密钥。如果不存在,则分配 0 值。
  • 在退出游戏之前,请确保将首选项保存到磁盘上。

代码:

void Start(){
    if(!PlayerPrefs.HasKey("mainmoney")){
        PlayerPrefs.SetFloat("mainmoney", 0);
    }
    if(!PlayerPrefs.HasKey("destroy")){
        PlayerPrefs.SetFloat("destroy", 0);
    }
}

void OnApplicationQuit(){
    PlayerPrefs.Save;
}

推荐阅读