【问题标题】:Resetting Score In Restart of Game重新开始游戏时重置分数
【发布时间】:2017-01-02 11:56:22
【问题描述】:

我正在制作一个 VR 游戏,其中只有一个关卡在主场景上,另一个场景是“结束”,在该场景上,游戏 Over text Score 可以通过重新启动(重新加载主场景)和退出按钮。

我的问题是,M 使用这个脚本作为我下面给出的ScoreManager 脚本。我也想要这个分数在结尾场景中,这是使用 PlayerPrefs 的 m

但主要问题是,当在结束场景点击重启时,游戏重新加载主场景但该分数仍然与前一游戏相同。我希望它设置为零。

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

namespace CompleteProject
{
    public class ScoreManager : MonoBehaviour
    {
        public static int score ;        // The player's score.
        Text text;                      // Reference to the Text component.

        void Awake()
        {
            // Set up the reference.
            text = GetComponent<Text>();
            score = 0;
            score = PlayerPrefs.GetInt("Score");
        }

        void Update ()
        {

            // Set the displayed text to be the word "Score" followed by the score value.
            text.text = "Score: " + score;
            PlayerPrefs.SetInt("Score", score);

        }
    }
}

我也用DeleteKey(string)删除了分数,但是什么也没发生。

【问题讨论】:

  • 如果你想在下一个级别重置分数,为什么要使用PlayerPrefs

标签: c# unity3d


【解决方案1】:

您说您尝试了DeleteKey(int score),但没有成功。您的代码确实在任何地方都有DeleteKey 函数。如果您不知道如何使用该功能,下面的代码将向您展示如何使用它。如果您确实知道如何使用它,但它不像您的问题中提到的那样工作,那么在它之后调用PlayerPrefs.Save()。这应该会删除密钥并立即更新它。

要在每场比赛后重置比分,请将代码放入OnDisable() 函数中。

void OnDisable()
{
    PlayerPrefs.DeleteKey("Score");
    PlayerPrefs.Save();
}

要在游戏开始时重置它,请像在 Awake() 函数中一样获取当前的 score,然后将上面的函数更改为 OnEnable()

【讨论】:

  • 感谢您的宝贵回复,我这里有两个场景,一个是主场景,一个是结束场景,当我玩游戏时,我在主场景中得分正确更新并在我杀死敌人时显示得分,但是当玩家生命值为零时,结束场景得到脉络它也会显示分数,无论玩家在主场景中获得分数,但是当用户/玩家重新启动游戏时,之前的分数也会显示在主场景中,这就是问题,每当玩家重新启动游戏主场景收集之前玩过的分数并添加到主场景计分板上,
  • 我按照你说的做了,它使最终场景得分值为“0”,另外一件事我在两个场景中都使用了相同的脚本,谢谢你的帮助
  • 在实例化对象时,Awake 不是只调用一次吗?据我所知,每次场景更改都会调用Start,如果重新加载场景,这可能是一个解决方案。
  • @Mateusz AwakeStart 在对象上调用一次。请注意,我要求 OP 将 Awake 更改为 OnEnable
  • @Programmer 好的,谢谢你的解释。我不只是确定这些。
【解决方案2】:

问题你仍然得到你的分数,所以你需要通过将值重置为零来重置保存的值,使用以下行:

PlayerPrefs.SetInt("Score", 0);

 public static int score ;       
        Text text;             
        void Start(){

            PlayerPrefs.SetInt("Score", 0);
            // Set up the reference.
            text = GetComponent<Text>();
            score = 0;
            score = PlayerPrefs.GetInt("Score",0);
        }
        void Update ()
        {

            // Set the displayed text to be the word "Score" followed by the score value.
            text.text = "Score: " + score;
            PlayerPrefs.SetInt("Score", score);

        }

【讨论】:

  • 转储代码即使解决了问题也不会帮助除 OP 之外的任何人。 StackOverflow 通常是一个知识共享平台,每个解决方案都应该至少用一些小句子来描述。添加有关您为解决问题所做的更改的任何说明,并在可能的情况下解释为什么会出现此问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-07
  • 2021-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多