我的地下城游戏东西,里面藏着一个目标,一旦玩家收集了目标,场景就会重新开始并创建一个新的地下城。我的游戏中有一个关卡计数器文本对象,用于显示玩家已完成的关卡数量,目前,场景重载后分数会恢复为0,但我希望每次玩家收集目标时分数都会增加。
此文件位于Character对象上,该对象是FPSController对象的子级,其他不相关的代码只是检查玩家是否掉进了一个洞而死亡。
public static int levelCounter;
public GameObject text;
// Start is called before the first frame update
void Awake()
{
levelCounter = text.GetComponent<LevelText>().level;
}
void Start()
{
}
// Update is called once per frame
void Update()
{
if (gameObject.transform.position.y < -1)
{
SceneManager.LoadSceneAsync("Death");
levelCounter = 0;
}
}
这是在玩家收集目标,级别计数器增加和场景重新加载时运行的代码
private AudioSource pickupSoundSource;
void Awake() {
pickupSoundSource = DontDestroy.instance.GetComponents<AudioSource>()[1];
}
void OnControllerColliderHit(ControllerColliderHit hit) {
if (hit.gameObject.tag == "Pickup") {
pickupSoundSource.Play();
CharacterScript.levelCounter += 1;
SceneManager.LoadScene("Play");
}
}
这是用于在游戏中实际显示级别计数器的文本对象
public GameObject player;
private Text text;
public int level;
// Start is called before the first frame update
void Start()
{
level = 0;
text = GetComponent<Text>();
}
// Update is called once per frame
void Update()
{
level = CharacterScript.levelCounter;
text.text = "Level: " + level;
}
我尝试摆弄静态变量和DoNotDestroyOnLoad(),但似乎没有任何效果。
答案 0 :(得分:-1)
有多种方法可以实现此目标,具体取决于您的需求。
1-如果您要在重新加载时保留变量值,而不是在重新启动游戏时保留变量值,则可以遵循单调模式,在这种情况下,您不会破坏具有保存该脚本的脚本的游戏对象。在清醒时通过调用DontDestroyOnLoad重新加载级别计数器,但是必须确保场景重新加载时没有同一个类的很多实例
2-使用单位PlayerPref存储值并在重新启动级别时加载它们
您可以在顶部查看重复的问题