0

我是 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);
    }
}
4

1 回答 1

1
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);

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

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

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

这是一个很好的解释。

于 2020-10-17T15:48:48.933 回答