C# 我如何通过Unity中的两个场景分享分数

C# 我如何通过Unity中的两个场景分享分数,c#,unity3d,scene-manager,C#,Unity3d,Scene Manager,我是团结的新人。我的问题是,在我的第一个场景中,我有一个分数,那就是球员的z位置。我希望它使用PlayerPrefs将其保存到最高分。我有两个名为MenuManager和GameManager的空对象,它们有自己的脚本,但我不知道如何共享分数值并将其保存在PlayerPrefs中。有人能帮我吗?如果组件不在场景中,我不知道如何指定它。也可以请你帮我使用不同场景的脚本功能。我的意思是,如何调用其他场景中游戏对象的函数。请帮帮我。我需要完成我的比赛 记录球员位置的记分脚本 using UnityEn

我是团结的新人。我的问题是,在我的第一个场景中,我有一个分数,那就是球员的z位置。我希望它使用PlayerPrefs将其保存到最高分。我有两个名为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;
    }
}
高分脚本负责文本更改,虽然我还没有在播放器prefs上工作过,但如果有人知道,请在这方面也帮助我

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);
    }
}
说明:只需创建一个类(非Mono行为)并使用静态变量来保存分数,这些分数可以在多个场景中访问

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


这是一个很好的解释。

嘿!这就是你要找的。你可能还想在你的游戏管理器中实现。我该怎么做?你有什么建议吗?我真的想与两个场景分享这个值,然后我想启用一个脚本,这样我就可以将它放在
PlayerPref
部分来存储它。汉克斯兄弟,我真的做到了。我制作了一个通用的记分脚本,在这里我创建了一个静态变量,我在不同场景的两个游戏对象上使用了这个脚本。所以我取了变量,从另一个脚本中取了分数,然后将它们添加到player prefsokay中,实际上你也不能将这样的数据脚本添加到任何对象中。它仍然可以工作,因为它使用静态变量。
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);