C# 统一高分在重生时重置

C# 统一高分在重生时重置,c#,unity3d,C#,Unity3d,当我走进我的“黄金”物品时,我试着能够重生并重置计分。 至于现在,我甚至无法重生,这在尝试实现“Score-Stuff”之前是可能的(起初,“FoundGold”脚本仅用于重生)。同时,我也在努力让最低的分数成为最高的分数。 请注意,我是C#的新手,我有点把我需要的教程中的所有内容都放在一起,所以如果能给出一个带有实际代码的答案/说明哪里出了问题,我将不胜感激 //GoldFound Code using System.Collections; using System.Collections.

当我走进我的“黄金”物品时,我试着能够重生并重置计分。 至于现在,我甚至无法重生,这在尝试实现“Score-Stuff”之前是可能的(起初,“FoundGold”脚本仅用于重生)。同时,我也在努力让最低的分数成为最高的分数。 请注意,我是C#的新手,我有点把我需要的教程中的所有内容都放在一起,所以如果能给出一个带有实际代码的答案/说明哪里出了问题,我将不胜感激

//GoldFound Code
using System.Collections;
using System.Collections.Generic;
using UnityEngine;



public class GoldFound : MonoBehaviour
{
private ScoreManager theScoreManager;
public Transform target;

[SerializeField] private Transform player;
[SerializeField] private Transform respawnpoint;

private void Start()
{
    theScoreManager = FindObjectOfType<ScoreManager>();
}


private void OnTriggerEnter(Collider other)
{
    theScoreManager.scoreIncreasing = false;
    player.transform.position = respawnpoint.transform.position;
    theScoreManager.scoreCount = 0;
    theScoreManager.scoreIncreasing = true;

}


}

如果要在播放会话之间保存高分,最简单的方法是将值保存到PlayerPrefs。如果你想开始保存更多/更复杂的东西,你真的应该把它保存在你自己生成的文件中。但在你的情况下,PlayerPrefs是好的

以下是有关该主题的Unity教程:

否则,您可以这样做:

public void SetHighscore (float currentScore)
{
    if (PlayerPrefs.HasKey("highscore"))
    {
        float highscore = PlayerPrefs.GetFloat("highscore");
        if (highscore > currentScore)
        {
            PlayerPrefs.SetFloat("highscore", currentScore);
            PlayerPrefs.Save();
        }
    }
    else
    {
        PlayerPrefs.SetFloat("highscore", currentScore);
        PlayerPrefs.Save();
    }
}
然后只要在需要时编写playerRefs.GetKey(“highscore”)。 (尽管我也建议您使用PlayerPrefs.HasKey(“highscore”)检查它是否存在)

如果您想在播放会话之间保存高分,那么最简单的方法就是将值保存到PlayerPrefs。如果你想开始保存更多/更复杂的东西,你真的应该把它保存在你自己生成的文件中。但在你的情况下,PlayerPrefs是好的

以下是有关该主题的Unity教程:

否则,您可以这样做:

public void SetHighscore (float currentScore)
{
    if (PlayerPrefs.HasKey("highscore"))
    {
        float highscore = PlayerPrefs.GetFloat("highscore");
        if (highscore > currentScore)
        {
            PlayerPrefs.SetFloat("highscore", currentScore);
            PlayerPrefs.Save();
        }
    }
    else
    {
        PlayerPrefs.SetFloat("highscore", currentScore);
        PlayerPrefs.Save();
    }
}
然后只要在需要时编写playerRefs.GetKey(“highscore”)。 (尽管我也建议您使用PlayerPrefs.HasKey(“highscore”)检查它是否存在)

我觉得你应该做的第一件事就是把你的任务分开。制定得分重置方法,一些球员位置重置方法等。。。然后做出适当使用它们的行为,尝试去做所有硬编码的事情,从而得到一大碗意大利面条式的代码。通过拆分它们,您首先保证它们工作正常,然后按照您的意愿使用它们,而不必修改初始代码。此外,将每次更新时的文本更改为相同的值确实是多余的,您可能是在修改UI元素,我问您,
OnGUI()
在哪里?第二,你应该只在分数改变时刷新分数,而不是每一帧。第三,我不明白你为什么要设置分数管理器。在一次调用中,分数将增加到
true
false
,因为这两个调用之间从未使用过,基本上总是
true
,这让我无法理解它的目的。如果你想让最低分数成为你最好的分数,只需将你的If语句的条件颠倒过来:
If(scoreCount
好吧,如果你能给出一些反馈,那就太好了,但是我要试着去理解你想做什么,你似乎想做一种跑步游戏,你跑得越快,得分越低,效果越好。也许是在完成一个迷宫什么的。你是如何使用你的
bool thescore经理的。从我看来,分数的增加是没有用的。这绝对是真的,至少在触摸了GoldFound的东西之后。我也不认为它的系统也有必要。我觉得你应该做的第一件事就是把你的任务分开。制定得分重置方法,一些球员位置重置方法等。。。然后做出适当使用它们的行为,尝试去做所有硬编码的事情,从而得到一大碗意大利面条式的代码。通过拆分它们,您首先保证它们工作正常,然后按照您的意愿使用它们,而不必修改初始代码。此外,将每次更新时的文本更改为相同的值确实是多余的,您可能是在修改UI元素,我问您,
OnGUI()
在哪里?第二,你应该只在分数改变时刷新分数,而不是每一帧。第三,我不明白你为什么要设置分数管理器。在一次调用中,分数将
增加到
true
false
,因为这两个调用之间从未使用过,基本上总是
true
,这让我无法理解它的目的。如果你想让最低分数成为你最好的分数,只需将你的If语句的条件颠倒过来:
If(scoreCount
好吧,如果你能给出一些反馈,那就太好了,但是我要试着去理解你想做什么,你似乎想做一种跑步游戏,你跑得越快,得分越低,效果越好。也许是在完成一个迷宫什么的。你是如何使用你的
bool thescore经理的。从我看来,分数的增加是没有用的。这绝对是真的,至少在触摸了GoldFound的东西之后。我也不认为它的系统也有必要。你也可以不用。哦,在你写player.transform.position和respawnPoint.target.position的地方,你可以在两者之间去掉额外的“transform”。您已经在引用转换组件,因此可以只编写player.position。除此之外,您的代码看起来应该可以正常工作。(除了评论中的观点)@Jebr如果此评论回答了您的问题,请接受。如果没有,请提供一些关于哪些仍然不起作用的更多信息。哦,还有你在哪里编写player.transform.position和respawnPoint.target.position,你可以在这两者之间放弃额外的“transform”。您已经在引用转换组件,因此可以只编写player.position。除此之外,您的代码看起来应该可以正常工作。(除了评论中的观点)@Jebr如果此评论回答了您的问题,请接受。如果没有,请提供更多关于哪些仍然不起作用的信息。