如何在 Unity 中通过 2 个场景共享乐谱

How can I share scores via 2 scenes in Unity

我是 Unity 的新手。我的问题是我在第一个场景中有一个分数,它是玩家 z 的位置。我希望它使用 PlayerPrefs 将其保存到 HighScore。我有 2 个名为 MenuManager 和 GameManager 的空对象,它们有自己的脚本,但我不知道如何共享分数的值并将其保存在 PlayerPrefs 中。谁能帮帮我吗?如果组件不在我的场景中,我不知道如何分配组件。也请你帮我使用不同场景的脚本功能。我的意思是如何调用另一个场景中的游戏对象的函数。请帮我。我需要完成我的游戏。

跟踪玩家位置的计分脚本。

using UnityEngine;
using UnityEngine.UI;

public class Score : MonoBehaviour
{
    public Transform player;
    public Text scoreText;
    public HighScore highScore;

    [HideInInspector]public static float totalScore;

    void Update()
    {
        scoreText.text = player.position.z.ToString("0");
        totalScore = player.position.z;
    }
}

负责文本更改的高分脚本,虽然我还没有处理播放器首选项,但如果有人知道也请帮助我。

using UnityEngine;
using UnityEngine.UI;

public class HighScore : MonoBehaviour
{
    static float floatScore;
    public Text highScore;

    private void Start()
    {
        highScore.text = PlayerPrefs.GetFloat("HighScore", 0).ToString();
    }
    public void highScoreFunc()
    {  
        PlayerPrefs.SetFloat("HighScore", floatScore);
        highScore.text = floatScore.ToString();
    }

    public void resetScore()
    {
        PlayerPrefs.DeleteKey("HighScore");
    }
}

可以选择使用按钮的菜单功能脚本。

using UnityEngine;
using UnityEngine.SceneManagement;

public class MenuFunctions : MonoBehaviour
{

    public void StartGame()
    {
        SceneManager.LoadScene(1);
    }

    public void quitGame()
    {
        Application.Quit();
    }
}

游戏管理器,负责切换场景和重启游戏。

using UnityEngine;
using UnityEngine.SceneManagement;

public class GameManager : MonoBehaviour
{
    bool GameEnd = true;
    public HighScore highScore;
    

    public void EndGame()
    {
        if(GameEnd)
        {
            GameEnd = false;
            Invoke("Restart", 1);
        }
    }
  
    void Restart()
    {
        SceneManager.LoadScene(sceneBuildIndex: 0);
    }
}
class ScoreKeeper{
  public static float HighScore;
}
//where you update player score
ScoreKeeper.HighScore= 10;//Score Value
//Where you want to fetch score
Debug.Log(ScoreKeeper.HighScore);

说明:只需创建一个 class(非单声道行为)并使用静态变量来保存可以跨多个场景访问的分数。

就 PlayerPrefs 而言,您最好使用二进制文件

https://www.youtube.com/watch?v=XOjd_qU2Ido&t=825s

这是一个很好的解释。