Unity - 单击重新启动按钮后如何重新启动乐谱?

Posted

技术标签:

【中文标题】Unity - 单击重新启动按钮后如何重新启动乐谱?【英文标题】:Unity - How can I restart the score once the restart button is clicked? 【发布时间】:2021-07-21 02:51:05 【问题描述】:

我在正在开发的游戏中遇到“问题”。当角色因与敌人碰撞或触发游戏对象而死亡时,它会显示一个游戏结束屏幕,其中包含一个“重试”按钮以重新开始游戏,但一旦单击重新开始按钮,从上一场比赛中收集的分数仍然存在.

我该如何解决这个问题?谢谢你的帮助!!

GameOver C# 脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class CS_GameOverMenu : MonoBehaviour


    

    public void RestartButton()
    
        SceneManager.LoadScene("Level 1");
        Debug.Log("Game open");

    

    public void MenuButton()
    

        SceneManager.LoadScene("MainMenu");
        Debug.Log("Main Menu open");
    

    public void ExitButton()
    
        Application.Quit();
        Debug.Log("Game closed");

    

    //public void QuitButton()
    //
    //  Application.Quit();
    //Debug.Log("Game closed");

【问题讨论】:

你是如何保存你的分数的?你在使用 playerprefs 吗? 是的,我使用播放器预制件收集食物以获取分数。我还有一个收集脚本,允许玩家收集食物以获得分数,调用另一个名为 Score 的脚本。实际上,现在的问题是显示游戏结束屏幕后的重新启动按钮。当我点击重试时,之前的分数仍然存在。我不确定我是否必须通过脚本或其他地方在游戏中编写任何代码。 @TEEBQNE 你的分数是静态的吗?你是如何写入分数变量的?您是否使用 playerprefs 或 json/binary 将分数保存在某处。由于您的设置方式,它一直保持不变。如果您让我知道此信息,我可以提供帮助 具体一点,能不能分享一下玩家收集食物后分数增加的代码? 是的。分数是静态整数。我不确定你保存分数是什么意思。我在得分游戏对象中没有任何玩家预制件。只有 scoreText。 【参考方案1】:

由于您有一个静态字段,因此即使在重置后,此数据也会在游戏仍在运行时保留。在你的 Reset 函数里面放类似这样的代码。

如果您不想按名称抓取对象,请使用此 sn-p。

public void RestartButton()

    ScoringSystem.theScore = 0;
    SceneManager.LoadScene("Level 1");
    Debug.Log("Game open");

您只需在重新加载场景时将分数设置回 0,因为您拥有的值被标记为静态。

【讨论】:

我收到此错误是由于静态问题。我不知道如何解决这个问题。 imgur.com/BhR1aor【参考方案2】:

您可以访问 Player 对象(或任何保存分数的对象)并将变量设置为 0(为此它必须是公共的)。

它会像这样工作: scoreGameObject.getComponent<"ScriptName">().scoreValue = 0

【讨论】:

我有点困惑。对不起,我还是个初学者。我应该把那行代码放在哪里?谢谢!【参考方案3】:

获取分数类/文件并重置分数

public void RestartButton()

    GameObjectWithScoreFile.GetComponent<ScoreClass>().Score = 0; // Make sure the Score var is public 
    SceneManager.LoadScene("Level 1");
    Debug.Log("Game open");

如果因为变量不是静态的而出现错误,只需将其设为静态即可。

示例:

public static int Score = 0;

【讨论】:

如果由于某种原因您有多个实例,只需获取您要重置的实例并重置它。

以上是关于Unity - 单击重新启动按钮后如何重新启动乐谱?的主要内容,如果未能解决你的问题,请参考以下文章

重新启动后,按钮单击时,小组件onUpdate未设置pendingIntent

如何从按钮上的网页重新启动iDevice单击

在 Activity 内部,如何暂停 for 循环以调用片段,然后在按钮单击片段后恢复循环以重新开始

在单击按钮时重置/重新初始化/重新启动 UIViewController 视图的最简单(正确)方法是啥?

重新开始位置后如何阻止球体自行移动?

如何在不使用 void 的情况下重新启动 CSS 动画?