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



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

记录玩家位置的Score Script。

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

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

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

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

这里有一个很好的解释。

最新更新