【发布时间】: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