【问题标题】:How can I share scores via 2 scenes in Unity如何通过 Unity 中的 2 个场景共享分数
【发布时间】:2020-10-17 11:05:39
【问题描述】:

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

【问题讨论】:

  • 嘿! DontDestroyOnLoad 就是你要找的。此外,您可能希望在 GameManager 中实现 Singleton Pattern
  • 我该怎么做你有什么建议
  • 我实际上想与两个场景共享值,然后我想启用一个脚本,以便我可以将它放入 PlayerPref 部分来存储它

标签: c# unity3d scene-manager


【解决方案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

这里有一个很好的解释。

【讨论】:

  • 谢谢兄弟,我确实做到了。我制作了共同得分脚本,在其中创建了一个静态变量,并将此脚本放在不同场景的两个游戏对象上。所以我取了变量,并从不同的脚本中取了分数,然后将它们添加到播放器首选项中
  • 好的,实际上你也可以不将这样的数据脚本添加到任何对象。它仍然可以工作,因为它使用静态变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多