Unity中的PlayerPrefs是用来保存和读取游戏数据的一个简单的键值对存储系统。它只能在Unity的游戏场景中调用,不能在其他场景中使用。如果在其他场景中需要使用PlayerPrefs保存或读取数据,可以通过以下两种方式解决:
using UnityEngine;
using UnityEngine.SceneManagement;
public class GameManager : MonoBehaviour
{
private int score = 0;
private void Awake()
{
DontDestroyOnLoad(this.gameObject);
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
score++;
}
if (Input.GetKeyDown(KeyCode.Return))
{
PlayerPrefs.SetInt("Score", score);
SceneManager.LoadScene("OtherScene");
}
}
}
在上面的示例中,当按下空格键时,分数会增加。当按下回车键时,将分数保存到PlayerPrefs中,并切换到名为"OtherScene"的场景。
在"OtherScene"场景中,可以通过以下方式读取保存的分数:
using UnityEngine;
public class OtherSceneScript : MonoBehaviour
{
private void Start()
{
int savedScore = PlayerPrefs.GetInt("Score");
Debug.Log("Saved Score: " + savedScore);
}
}
using UnityEngine;
[CreateAssetMenu(fileName = "GameData", menuName = "Custom/GameData")]
public class GameData : ScriptableObject
{
public int score;
}
创建一个名为"GameData"的ScriptableObject,用来保存游戏数据。
然后创建一个自定义的GameManager类,用来管理游戏数据:
using UnityEngine;
public class GameManager : MonoBehaviour
{
public GameData gameData;
private void Awake()
{
DontDestroyOnLoad(this.gameObject);
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
gameData.score++;
}
if (Input.GetKeyDown(KeyCode.Return))
{
SceneManager.LoadScene("OtherScene");
}
}
}
在上面的示例中,GameManager类引用了一个GameData的实例gameData。当按下空格键时,分数会增加。当按下回车键时,将切换到名为"OtherScene"的场景。
在"OtherScene"场景中,可以通过以下方式读取保存的分数:
using UnityEngine;
public class OtherSceneScript : MonoBehaviour
{
public GameData gameData;
private void Start()
{
int savedScore = gameData.score;
Debug.Log("Saved Score: " + savedScore);
}
}
在上面的示例中,OtherSceneScript类也引用了同一个GameData的实例gameData,这样就可以在不同的场景中共享游戏数据。