重新启动时重设分数

时间:2019-04-10 04:20:44

标签: c# unity3d

我有一个用计分器制作的小型2D游戏。在重新开始/游戏结束时,我希望分数计数器回到0,但是我不确定该怎么做。这是针对Unity上的游戏的,我也调用播放器上的计数器。我在下面附加了我的代码,希望对您有所帮助!

<div style="text-align: center">
<?php
$n = 8;

if($n === 1){ die("input must be greater than 1"); }

$nn = ($n * 2);
$m = (ceil($nn / 2) + 1);
$temp = 0;

for($x = 1; $x <= $nn; $x++){
    $temp = (($x < $m) ? ($temp + 1) : ($temp - 1));
    $total = ($temp > 1 ? ((2 * $temp) - 1) : $temp);

    echo nl2br(str_repeat('* &nbsp;', $total) . "\r\n");
}
?>

重新启动按钮上的代码:

public class CounterScript : MonoBehaviour
{
    public int scoreValue = 0;
    Text score;

    void Start()
    {
        score = GetComponent<Text>();
        scoreValue = 0;
    }

    void Update()
    {
        score.text = "" + scoreValue;
    }
}

我的播放器上的代码:

public class RestartButtonL1 : MonoBehaviour
{
    public CounterScript counter;

    public void restartScene()
    {
        counter.scoreValue = 0;
        SceneManager.LoadScene("GameSceneA");
    }
}

1 个答案:

答案 0 :(得分:2)

通过将scoreValue设置为static的值,不会受到加载另一个(或相同)场景的影响。

一种快速修复方法是在加载场景之前将其重置

public void restartScene()
{
    CounterScript.scoreValue = 0;
    SceneManager.LoadScene("GameSceneA");
}

或(我不知道本教程的工作原理,但是如果没有DontDestroyOnLoad在玩),只需始终在Start的{​​{1}}中设置值即可(这仅适用于本课程)如果没有其他切换场景和其他CounterScript实例)

CounterScript

在这种情况下,可能没问题,但通常您应该避免制作东西void Start() { score = GetComponent<Text> (); scoreValue = 0; } 只是为了“更轻松地”访问它……相反,您应该拥有

static

,然后引用public int scoreValue; 的实际实例,例如

CounterScript

这只是一个示例,说明如何访问实例化值,例如无论您增加多少。因为实际上通过使其变为非静态,它将通过(无论如何)重新加载场景来重置;)

另请参阅Controlling GameObjects using components

边注:您始终应该删除空的public class RestartButtonL1 : MonoBehaviour { // reference the CounterScript here by drag and drop // the acording GameObject from the scene into this field public CounterScript counter; public void restartScene() { counter.scorevalue = 0; SceneManager.LoadScene("GameSceneA"); } } Start和其他MonoBehaviour事件调用。如果您不这样做,Unity无论如何都会调用它们,从而导致不必要的开销。